OpenVZ Forum


Home » International » Russian » Как заставить работать NAT в контейнере?
Как заставить работать NAT в контейнере? [message #37640] Tue, 06 October 2009 10:47 Go to next message
lithium is currently offline  lithium
Messages: 77
Registered: April 2007
Member
From: *ros-express.ru
Есть потребность использовать 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 #37642 is a reply to message #37640] Tue, 06 October 2009 13:59 Go to previous messageGo to next message
AeroWave is currently offline  AeroWave
Messages: 20
Registered: October 2007
Junior Member

From: *awhost.ru.60.195.91.in-addr.arpa
cat /etc/vz/conf/2000.conf | grep IPTABLES
IPTABLES="ip_tables iptable_filter iptable_mangle ipt_limit ipt_multiport ipt_tos ipt_TOS ipt_REJECT ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_LOG ipt_length ip_conntrack ip_conntrack_ftp ipt_state iptable_nat ip_nat_ftp"
Re: Как заставить работать NAT и контейнере? [message #37643 is a reply to message #37642] Tue, 06 October 2009 14:01 Go to previous messageGo to next message
lithium is currently offline  lithium
Messages: 77
Registered: April 2007
Member
From: *ros-express.ru
?
Re: Как заставить работать NAT и контейнере? [message #37645 is a reply to message #37643] Tue, 06 October 2009 14:03 Go to previous messageGo to next message
AeroWave is currently offline  AeroWave
Messages: 20
Registered: October 2007
Junior Member

From: *awhost.ru.60.195.91.in-addr.arpa
lithium wrote on Tue, 06 October 2009 18:01
?

Вставь эту строчку и все будет чики-чики!
Re: Как заставить работать NAT и контейнере? [message #37646 is a reply to message #37645] Tue, 06 October 2009 14:16 Go to previous messageGo to next message
lithium is currently offline  lithium
Messages: 77
Registered: April 2007
Member
From: *ros-express.ru
imho кривое решение
Re: Как заставить работать NAT и контейнере? [message #37647 is a reply to message #37646] Tue, 06 October 2009 14:20 Go to previous messageGo to next message
AeroWave is currently offline  AeroWave
Messages: 20
Registered: October 2007
Junior Member

From: *awhost.ru.60.195.91.in-addr.arpa
lithium wrote on Tue, 06 October 2009 18:16
imho кривое решение

Это есть нормальное решение.

man vzctl

Раздел - Iptables control parameters

Хотел помочь Wink
Re: Как заставить работать NAT и контейнере? [message #37648 is a reply to message #37646] Tue, 06 October 2009 14:39 Go to previous messageGo to next message
lithium is currently offline  lithium
Messages: 77
Registered: April 2007
Member
From: *ros-express.ru
1. Оттуда:
"by default all iptables modules that are loaded in the host system are accessible inside a VE"
Налицо явная ошибка, или у меня, или у OpenVZ. Тыкаться по кнопочкам чтобы обойти проблему мне кажется неправильным.
2. Насколько я понял, этот подход используется когда нужно жестко ограничить доступность модуля в определенном контейнере, то есть для других целей.
Re: Как заставить работать NAT и контейнере? [message #37652 is a reply to message #37648] Tue, 06 October 2009 15:48 Go to previous messageGo to next message
AeroWave is currently offline  AeroWave
Messages: 20
Registered: October 2007
Junior Member

From: *bb.netbynet.ru
Тебе виднее, видимо.
Re: Как заставить работать NAT и контейнере? [message #37663 is a reply to message #37640] Thu, 08 October 2009 08:13 Go to previous messageGo to next message
lithium is currently offline  lithium
Messages: 77
Registered: April 2007
Member
From: *ros-express.ru
Еще, судя по всему, не работает отслеживание соединений в контейнере. В контейнере запущено два экземпляра 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 Go to previous messageGo to next message
lithium is currently offline  lithium
Messages: 77
Registered: April 2007
Member
From: *ros-express.ru
Проблема с отслеживанием соединений решилась указанием в /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 Go to previous messageGo to next message
maratrus is currently offline  maratrus
Messages: 1495
Registered: August 2007
Location: Moscow
Senior Member
From: *sw.ru
Здравствуйте,

согласен, что про 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 Go to previous messageGo to next message
lithium is currently offline  lithium
Messages: 77
Registered: April 2007
Member
From: *ros-express.ru
> читаем внимательно ответ по ссылке, приведенной в вашем посте,

я читал эту ссылку очень много раз, но либо у меня мозги по другому устроены (и я не понимаю этот язык изложения), либо Вам это кажется понятным, т.к. Вы представляете общую картину.

> поэтому необходимо в глобальном конфигурационном файле добавить "ip_conntrack iptable_nat" (то есть nat и conntrack остались в этих пределах)

сейчас, к сожалению, нет времени, с завтрашнего дня ухожу в отпуск на неделю, как вернусь -- обязательно напишу о результатах.

> Если у вас есть желание, забейте баг с требованием придерживаться единой верной линии изложния (начните, например с man vzctl).

тут возникает проблема, аналогичная вышеизложенной, я единственное что могу написать в багзилле -- "ничего не понятно". Отсутствует знание половины вопроса, чтобы задать его правильно Sad .
Re: Как заставить работать NAT и контейнере? [message #37811 is a reply to message #37701] Sat, 24 October 2009 10:46 Go to previous messageGo to next message
maratrus is currently offline  maratrus
Messages: 1495
Registered: August 2007
Location: Moscow
Senior Member
From: *sw.ru
Quote:

я читал эту ссылку очень много раз, но либо у меня мозги по другому устроены (и я не понимаю этот язык изложения), либо Вам это кажется понятным, т.к. Вы представляете общую картину.


Не знаю, я пытался плясать от печки, то есть читал внимательно то, что написали Вы. Ваши доводы показались мне довольно убедительными, и выводы были сделаны четкие, поэтому мне не понятно, почему вы пишете
Quote:

тут возникает проблема, аналогичная вышеизложенной, я единственное что могу написать в багзилле -- "ничего не понятно". Отсутствует знание половины вопроса, чтобы задать его правильно



Вернемся еще раз к тому, что было написано по ссылке:
- Раньше была маска, которая являлась необходимым и достаточным условием работы iptables модуля внутри VE: битик в маске стоит - модуль доступен, нет - нет.
- Постепенно решили от этой маски отказаться, однако, до конца это сделать не удалось, а значит, не совсем верно говорить, что все модули, загруженные на HN (до старта VE!) будут автоматически доступны и внутри VE, поскольку читаем
Quote:
в новых ядрах порешили от маску урезать до более-менее разумных пределов (tables для ipv4, tables для ipv6, коннтраки и еще что-то осталось по-мелочи или недоразумению)
,
то есть iptable_nat и ip_conntrack еще нужно указывать в значении переменной IPTABLES.
- Если все вышеописанное является правдой, то, например, в pdf Guide написана информация, противоречищая этой логике.
- Поэтому можно либо попросить поправить Guide, либо выяснить, что описанная логика не соответсвует действительности.
Как-то так.
Re: Как заставить работать NAT и контейнере? [message #41555 is a reply to message #37811] Mon, 07 February 2011 13:17 Go to previous message
veresk is currently offline  veresk
Messages: 34
Registered: July 2009
Member
From: *nwgsm.ru
А дело так с места и не тронулось..
Previous Topic: ProxMox на Debian Squeeze AMD64
Next Topic: Debian Squeeze i386: nat\ip_forvard внутри VE
Goto Forum:
  


Current Time: Mon Dec 17 05:53:54 GMT 2018