Home » International » Russian » Как заставить работать NAT в контейнере?
Как заставить работать NAT в контейнере? [message #37640] |
Tue, 06 October 2009 10:47 |
lithium
Messages: 78 Registered: April 2007
|
Member |
|
|
Есть потребность использовать NAT в контейнере. Текущее положение дел:
На HN:
# cat /proc/net/ip_tables_names
nat
mangle
filter
# lsmod | grep nat
iptable_nat 13580 0
ip_nat 22032 2 iptable_nat,vzrst
ip_conntrack 60356 6 iptable_nat,xt_state,vzrst,ip_nat,vzcpt,ip_conntrack_netbios _ns
nfnetlink 10648 2 ip_nat,ip_conntrack
ip_tables 18760 3 iptable_nat,iptable_mangle,iptable_filter
x_tables 19204 15 iptable_nat,xt_state,ipt_recent,xt_tcpudp,ipt_LOG,xt_length, ipt_ttl,xt_tcpmss,ipt_TCPMSS,xt_multiport,xt_limit,ipt_tos,i pt_REJECT,xt_comment,ip_tables
# grep -i iptables /etc/vz/vz.conf
IPTABLES="ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length ipt_LOG"
(я так и не понял, для чего этот параметр, дублировать IPTABLES_MODULES из /etc/sysconfig/iptables-config?)
В контейнере:
# cat /proc/net/ip_tables_names
mangle
filter
Соответственно, в контейнере
# iptables -t nat -L -nv
iptables v1.3.5: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
Пытался читать OpenVZ-Users-Guide.pdf, http://kb.parallels.com/en/5228 (это вообще imho устаревшее), на которые ссылается мануал по OpenVPN из wiki, http://forum.openvz.org/index.php?t=msg&goto=24735&& amp; amp;srch=Unknown+iptable+module#msg_24735 , так и не понял что к чему, и соответственно, почему не работает. Пишут, что параметр с модулями iptables в конфиге CT -- это устаревшее. Не использую. Пишут что чтобы модуль работал внутри CT, его нужно загрузить на HN -- загрузил все со словом nat в названии. Пишут что модули, указанные в vz.conf вроде бы как просто для того, чтобы они стартовали при запуске OpenVZ -- у меня они загружены через modprobe, как потом их запускать разберусь. Вроже бы все так, но не работает. У меня вариантов нет, может кто подскажет что не так?
[Updated on: Tue, 15 December 2009 09:16] Report message to a moderator
|
|
|
|
|
|
|
|
|
|
Re: Как заставить работать NAT и контейнере? [message #37663 is a reply to message #37640] |
Thu, 08 October 2009 08:13 |
lithium
Messages: 78 Registered: April 2007
|
Member |
|
|
Еще, судя по всему, не работает отслеживание соединений в контейнере. В контейнере запущено два экземпляра OpenVPN, нужно сделать между ними маршрутизацию. Первое правило в FORWARD стоит
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
второе было
-A FORWARD -i tun0 -o tun1 -m state --state NEW -j ACCEPT
Все это не работало.
Путем различных манипуляций пришел к выводу что не работает именно отслеживание соединений, т.к. при явном разрешении прохождения пакетов туда и обратно:
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
53 7672 ACCEPT all -- tun0 tun1 0.0.0.0/0 0.0.0.0/0
49 8200 ACCEPT all -- tun1 tun0 0.0.0.0/0 0.0.0.0/0
все работает, но видно, что по первому правилу не проходит ни один пакет.
P.S. Не знаю, как должно быть, но файл /proc/net/ip_conntrack на HN есть (но не содержит записей с нужными ip-адресами), в контейнере такого файла нет.
[Updated on: Thu, 08 October 2009 08:29] Report message to a moderator
|
|
|
Re: Как заставить работать NAT и контейнере? [message #37666 is a reply to message #37663] |
Thu, 08 October 2009 10:43 |
lithium
Messages: 78 Registered: April 2007
|
Member |
|
|
Проблема с отслеживанием соединений решилась указанием в /etc/sysconfig/vz.conf модуля ip_conntrack.
Однако, если туда же вставить ip_nat при старте CT получаем:
Warning: Unknown iptable module: ip_nat, skipped
правило $IPTABLES -t nat -A POSTROUTING [...]
выдает
iptables: Unknown error 4294967295
Вообщем, вернулись к тому, с чего начинали -- как работает iptables и как связаны модули, загружаемые на HN, файл /etc/vz.conf и конфиг конкретного контейнера неизвестно. Из pdf известны следующие гипотезы:
1. Модули, загруженные на HN должны быть доступны в контейнерах.
2. Если в параметре IPTABLES в конфиге контейнера прописаны модули, только эти модули будут доступны в контейнере.
3. Модули, указанные в /etc/sysconfig/vz.conf будут доступны во всех контейнерах.
Из http://forum.openvz.org/index.php?t=msg&goto=24735&& amp;srch=Unknown+iptable+module#msg_24735 имеем следующие уточнения:
1. Модули, указанные в /etc/sysconfig/vz.conf загружаются при старте сервиса vz.
2. С определенного момента параметр IPTABLES в конфиге контейнера не ограничивает список модулей, доступных в контейнере, т.е. потерял смысл.
3. Если в конфиге контейнера указан модуль, в котором не поставлен определенный бит, будет ругань при запуске, этот параметр лучше не использовать (см. предыдущий пункт.).
Экспериментальные данные:
1. При загруженных на HN модулях ip_nat и iptable_nat и загрузке правила в таблицу nat в контейнере получаем сообщения, что такой таблицы нет, т.е. явнеое противоречие с теоретическими данными или баг.
2. Ругань на модуль (ip_nat) происходит и при указании его в параметре IPTABLES в vz.conf, т.о. из вышесказанного получается, что модули в vz.conf добавлять не надо (я не помню что там было по дефолту, и было ли, но на текущие модули ругани нет, значит они с нужным битом и их можно оставить).
3. При загруженном модуле ip_conntrack и без указания его в vz.conf отслеживание соединений не происходит. Налицо явное противоречение в исходных данных или баг.
Вообщем, у меня в голове каша, нет целостной и непротиворечивой картины, как это все устроено и как настраивать чтобы работало (очень желательно не переносить настройку (загрузку) модулей для конкретного контейнера из CT.mount -скрипта в HN-специфичные файлы, чтобы не было привязки контейнера к HN при переносе или бэкапе/восстановлении).
В связи с вышеизложенным просьба к разработчикам набросать картину устройства этого хозяйства в двух словах, на основе которой можно было бы сделать страницу в wiki и понять самому, как это все настраивать, чтобы работало.
|
|
|
Re: Как заставить работать NAT и контейнере? [message #37676 is a reply to message #37666] |
Fri, 09 October 2009 13:47 |
maratrus
Messages: 1495 Registered: August 2007 Location: Moscow
|
Senior Member |
|
|
Здравствуйте,
согласен, что про iptables написано крайне запутанно.
Думаю, в вашем случае дело было вот в чем:
читаем внимательно ответ по ссылке, приведенной в вашем посте,
Quote: |
поэтому в новых ядрах порешили от маску урезать до более-менее разумных пределов (tables для ipv4, tables для ipv6, коннтраки и еще что-то осталось по-мелочи или недоразумению). Про остальные модули vzctl больше ничего знать не должен
|
поэтому необходимо в глобальном конфигурационном файле добавить "ip_conntrack iptable_nat" (то есть nat и conntrack остались в этих пределах)
Если у вас есть желание, забейте баг с требованием придерживаться единой верной линии изложния (начните, например с man vzctl).
|
|
|
Re: Как заставить работать NAT и контейнере? [message #37701 is a reply to message #37676] |
Mon, 12 October 2009 08:15 |
lithium
Messages: 78 Registered: April 2007
|
Member |
|
|
> читаем внимательно ответ по ссылке, приведенной в вашем посте,
я читал эту ссылку очень много раз, но либо у меня мозги по другому устроены (и я не понимаю этот язык изложения), либо Вам это кажется понятным, т.к. Вы представляете общую картину.
> поэтому необходимо в глобальном конфигурационном файле добавить "ip_conntrack iptable_nat" (то есть nat и conntrack остались в этих пределах)
сейчас, к сожалению, нет времени, с завтрашнего дня ухожу в отпуск на неделю, как вернусь -- обязательно напишу о результатах.
> Если у вас есть желание, забейте баг с требованием придерживаться единой верной линии изложния (начните, например с man vzctl).
тут возникает проблема, аналогичная вышеизложенной, я единственное что могу написать в багзилле -- "ничего не понятно". Отсутствует знание половины вопроса, чтобы задать его правильно .
|
|
|
Re: Как заставить работать NAT и контейнере? [message #37811 is a reply to message #37701] |
Sat, 24 October 2009 10:46 |
maratrus
Messages: 1495 Registered: August 2007 Location: Moscow
|
Senior Member |
|
|
Quote: |
я читал эту ссылку очень много раз, но либо у меня мозги по другому устроены (и я не понимаю этот язык изложения), либо Вам это кажется понятным, т.к. Вы представляете общую картину.
|
Не знаю, я пытался плясать от печки, то есть читал внимательно то, что написали Вы. Ваши доводы показались мне довольно убедительными, и выводы были сделаны четкие, поэтому мне не понятно, почему вы пишете
Quote: |
тут возникает проблема, аналогичная вышеизложенной, я единственное что могу написать в багзилле -- "ничего не понятно". Отсутствует знание половины вопроса, чтобы задать его правильно
|
Вернемся еще раз к тому, что было написано по ссылке:
- Раньше была маска, которая являлась необходимым и достаточным условием работы iptables модуля внутри VE: битик в маске стоит - модуль доступен, нет - нет.
- Постепенно решили от этой маски отказаться, однако, до конца это сделать не удалось, а значит, не совсем верно говорить, что все модули, загруженные на HN (до старта VE!) будут автоматически доступны и внутри VE, поскольку читаем
Quote: | в новых ядрах порешили от маску урезать до более-менее разумных пределов (tables для ipv4, tables для ipv6, коннтраки и еще что-то осталось по-мелочи или недоразумению)
| ,
то есть iptable_nat и ip_conntrack еще нужно указывать в значении переменной IPTABLES.
- Если все вышеописанное является правдой, то, например, в pdf Guide написана информация, противоречищая этой логике.
- Поэтому можно либо попросить поправить Guide, либо выяснить, что описанная логика не соответсвует действительности.
Как-то так.
|
|
|
|
Goto Forum:
Current Time: Mon Nov 04 01:25:55 GMT 2024
Total time taken to generate the page: 0.03545 seconds
|