Re: nat не натит сеть, которая недоступна напрямую
On Wed, May 29, 2013 at 03:19:46PM +0400, Mikhail A Antonov wrote: > 29.05.2013 14:27, Eugene Berdnikov пишет: ... > > лишнего. Не пишите "! -d 172.16.2.44/32" в правиле SNAT, оно там излишне > > потому что пакет с локальным dst_ip в POSTROUTING не попадёт. Но эта > > мелочь режет глаз, а с чайниками в netdev никто разговаривать не хочет. > Замечено следующее - если на сервере запущен какой-то сервис (пусть > будет почтовый сервер) и пользователь из локальной сети захочет > подключиться к этому серверу используя внешний адрес - у него ничего не > выйдет. Если в правиле указать что если dst свой - не натить - то всё > работает. Это странно, потому что, повторю, пакет с локальным dst_ip не должен попадать в POSTROUTING. И если указание локального адреса в правиле что-то меняет, это уже повод задуматься... Я подозреваю, что в Вашей конфигурации где-то дважды отрабатывает conntrack, потому что пакет проходит "транзитом" через сетевую подсистему HN два раза, заныривая по пути в виртуалку GW. И это обстоятельство может привести к каким-то ошибкам (багам) в районе nat'a, потому что для nat'a существеннен факт принадлежности пакета уже установленной коннекции. Для диагностики этого дела можно дополнить tcpdump и трассировку цепочек мониторингом коннекций. Запускайте conntrack -E (-n, -g, -j), кроме того, можно нашинковать цепочки iptables логгированием (-j LOG) состояний контрака, чтобы выяснить, в какой момент коннекция регистрируется ядром, где она переходит из NEW в ESTABLISHED и т.д. Возможно, тогда станет ясно, почему в POSTROUTING она неправильно обрабатывается. > пользователь с ноутом, на котором настроен почтовый клиент, который > подключается к серверу по имени mail.company.com. > Он всегда будет получать внешний адрес mail.company.com и пытаться к > нему подключиться. > Из внешней сети он нормально будет работать. Из внутренней - нет. Вообще говоря, в случае стандартной конфигурации шлюза подключение через внутренний интерфейс по внешнему адресу должно работать. > Можно нагородить костылей в виде заворачивания всех dns-запросов к себе > и отдавать локальные адреса локальным пользователям, используя view в > bind, но чем оно лучше? Для вьюшек не нужно заворачивать запросы на шлюзе, достаточно просто иметь собственный dns. :) Вьюшки это настолько полезный и удобный функционал, что я просто не представляю, как без них жить... Но это отдельный вопрос, никак не связанный с багами nat'а, a чем вьюшки лучше nat'а -- ну, наверное тем же, чем тёплое лучше мягкого. :) -- Eugene Berdnikov -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20130529144024.gh3...@sie.protva.ru
Re: nat не натит сеть, которая недоступна напрямую
29.05.2013 14:27, Eugene Berdnikov пишет: > On Wed, May 29, 2013 at 01:41:11PM +0400, Mikhail A Antonov wrote: >> 29.05.2013 10:50, Eugene Berdnikov пишет: >>> Проверьте tcpdump'ом с обеих сторон и трассировкой правил iptables, >>> может быть, там всё-таки есть ошибка конфигурации. >> iptables приводил в первом письме. > Я сказал "трассировку": iptables -t raw -j TRACE. Я не верно понял. Спасибо, посмотрю на это подробнее. Ни разу не пользовался. >> tcpdump тоже смотрел: >> root@klon-gw:~# tcpdump -pni any -vvv host 213.79.76.3 > Здесь непонятно, через какие интерфейсы ходят пакеты. Вы думаете, что > знаете их точно, но постороннему человеку нужны доказательства. > К тому же с бриджами всё непросто, там можно отдельно слушать brX, > а можно те интерфейсы, которые к бриджу подключены, и получать > разные результаты. У меня слушается именно бридж. Про это прослушивание eth я в курсе. Когда буду писать в netdev разнесу tcpdump по интерфейсам >> на GW - пакет пришёл, пакет ушёл >> на HN - пакет пришёл на физику, ушёл в бридж, вернулся в vnet, прошёл >> через hn на выход на другую физику >> Всё работает, кроме ната. > Да, похоже на баг. Но таки проверьте, что что все интерфейсы и цепочки > проходятся в нужной последовательности. Я проверил. Но попробую трассировку применить. Если я нарвался на ядерный баг - куда мне писать? >>> В net...@vger.kernel.org. Но если нет готовности собирать у себя ядро >>> из свежего git'а и делать бисекты, а также пробовать патчи от тамошних >>> хакеров, то лучше туда не соваться, а искать обходной путь... IMHO. >> Эта конфигурация легко собирается на любой машине, на которой сможет >> работать kvm. Не думаю что тамошним хакерам будет удобно играть в >> испорченный телефон. Быстрее, проще и удобнее у себя такое же сделать. > Наивный человек, :) никто не будет городить такое страшилище с kvm, > а собирать ядро придётся Вам, если вообще кого-то эта тема заинтересует. > Причём заинтересовать может лишь если ситуация воспроизводится на самом > свежем ядре из git'а, которое сейчас под рукой у девелоперов. > > Нужен простой и понятный тесткейс: два интерфейса, одно правило, ничего > лишнего. Не пишите "! -d 172.16.2.44/32" в правиле SNAT, оно там излишне > потому что пакет с локальным dst_ip в POSTROUTING не попадёт. Но эта > мелочь режет глаз, а с чайниками в netdev никто разговаривать не хочет. Замечено следующее - если на сервере запущен какой-то сервис (пусть будет почтовый сервер) и пользователь из локальной сети захочет подключиться к этому серверу используя внешний адрес - у него ничего не выйдет. Если в правиле указать что если dst свой - не натить - то всё работает. Пример: пользователь с ноутом, на котором настроен почтовый клиент, который подключается к серверу по имени mail.company.com. Он всегда будет получать внешний адрес mail.company.com и пытаться к нему подключиться. Из внешней сети он нормально будет работать. Из внутренней - нет. Можно нагородить костылей в виде заворачивания всех dns-запросов к себе и отдавать локальные адреса локальным пользователям, используя view в bind, но чем оно лучше? -- Best regards, Mikhail - WWW: http://www.antmix.ru/ XMPP: ant...@stopicq.ru signature.asc Description: OpenPGP digital signature
Re: nat не натит сеть, которая недоступна напрямую
On Wed, May 29, 2013 at 01:41:11PM +0400, Mikhail A Antonov wrote: > 29.05.2013 10:50, Eugene Berdnikov пишет: > > > > Проверьте tcpdump'ом с обеих сторон и трассировкой правил iptables, > > может быть, там всё-таки есть ошибка конфигурации. > > iptables приводил в первом письме. Я сказал "трассировку": iptables -t raw -j TRACE. > tcpdump тоже смотрел: > root@klon-gw:~# tcpdump -pni any -vvv host 213.79.76.3 Здесь непонятно, через какие интерфейсы ходят пакеты. Вы думаете, что знаете их точно, но постороннему человеку нужны доказательства. К тому же с бриджами всё непросто, там можно отдельно слушать brX, а можно те интерфейсы, которые к бриджу подключены, и получать разные результаты. > на GW - пакет пришёл, пакет ушёл > на HN - пакет пришёл на физику, ушёл в бридж, вернулся в vnet, прошёл > через hn на выход на другую физику > Всё работает, кроме ната. Да, похоже на баг. Но таки проверьте, что что все интерфейсы и цепочки проходятся в нужной последовательности. > >> Если я нарвался на ядерный баг - куда мне писать? > > В net...@vger.kernel.org. Но если нет готовности собирать у себя ядро > > из свежего git'а и делать бисекты, а также пробовать патчи от тамошних > > хакеров, то лучше туда не соваться, а искать обходной путь... IMHO. > Эта конфигурация легко собирается на любой машине, на которой сможет > работать kvm. Не думаю что тамошним хакерам будет удобно играть в > испорченный телефон. Быстрее, проще и удобнее у себя такое же сделать. Наивный человек, :) никто не будет городить такое страшилище с kvm, а собирать ядро придётся Вам, если вообще кого-то эта тема заинтересует. Причём заинтересовать может лишь если ситуация воспроизводится на самом свежем ядре из git'а, которое сейчас под рукой у девелоперов. Нужен простой и понятный тесткейс: два интерфейса, одно правило, ничего лишнего. Не пишите "! -d 172.16.2.44/32" в правиле SNAT, оно там излишне потому что пакет с локальным dst_ip в POSTROUTING не попадёт. Но эта мелочь режет глаз, а с чайниками в netdev никто разговаривать не хочет. -- Eugene Berdnikov -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20130529102701.gb4...@protva.ru
Re: nat не натит сеть, которая недоступна напрямую
29.05.2013 10:50, Eugene Berdnikov пишет: > > Проверьте tcpdump'ом с обеих сторон и трассировкой правил iptables, > может быть, там всё-таки есть ошибка конфигурации. iptables приводил в первом письме. tcpdump тоже смотрел: root@klon-gw:~# tcpdump -pni any -vvv host 213.79.76.3 tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes 23:58:36.450112 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.1.2 > 213.79.76.3: ICMP echo request, id 14733, seq 1, length 64 23:58:36.450161 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.1.2 > 213.79.76.3: ICMP echo request, id 14733, seq 1, length 64 root@klon-hn0:~# tcpdump -pni any -vvv host 213.79.76.3 tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes 23:58:38.907749 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.1.2 > 213.79.76.3: ICMP echo request, id 14733, seq 1, length 64 23:58:38.907772 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.1.2 > 213.79.76.3: ICMP echo request, id 14733, seq 1, length 64 23:58:38.907958 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.1.2 > 213.79.76.3: ICMP echo request, id 14733, seq 1, length 64 23:58:38.907958 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.1.2 > 213.79.76.3: ICMP echo request, id 14733, seq 1, length 64 23:58:38.907967 IP (tos 0x0, ttl 62, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.1.2 > 213.79.76.3: ICMP echo request, id 14733, seq 1, length 64 на GW - пакет пришёл, пакет ушёл на HN - пакет пришёл на физику, ушёл в бридж, вернулся в vnet, прошёл через hn на выход на другую физику Всё работает, кроме ната. На br1 на HN повесил 172.17.1.1, потушив GW: root@klon-hn0:~# tcpdump -pni any -vvv host 213.79.76.3 tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes 00:23:06.865122 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.1.2 > 213.79.76.3: ICMP echo request, id 16360, seq 1, length 64 00:23:06.865147 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.16.2.44 > 213.79.76.3: ICMP echo request, id 16360, seq 1, length 64 00:23:06.870937 IP (tos 0x0, ttl 56, id 24230, offset 0, flags [none], proto ICMP (1), length 84) 213.79.76.3 > 172.16.2.44: ICMP echo reply, id 16360, seq 1, length 64 00:23:06.870953 IP (tos 0x0, ttl 55, id 24230, offset 0, flags [none], proto ICMP (1), length 84) 213.79.76.3 > 172.17.1.2: ICMP echo reply, id 16360, seq 1, length 64 00:23:06.870956 IP (tos 0x0, ttl 55, id 24230, offset 0, flags [none], proto ICMP (1), length 84) 213.79.76.3 > 172.17.1.2: ICMP echo reply, id 16360, seq 1, length 64 Пакет проходит как надо. А вот что будет если включить нат на GW: root@klon-gw:~# tcpdump -pni any -vvv host 213.79.76.3 tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes 00:41:28.400688 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.1.2 > 213.79.76.3: ICMP echo request, id 17548, seq 1, length 64 00:41:28.400717 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.0.2 > 213.79.76.3: ICMP echo request, id 17548, seq 1, length 64 00:41:28.407494 IP (tos 0x0, ttl 55, id 24226, offset 0, flags [none], proto ICMP (1), length 84) 213.79.76.3 > 172.17.0.2: ICMP echo reply, id 17548, seq 1, length 64 00:41:28.407504 IP (tos 0x0, ttl 54, id 24226, offset 0, flags [none], proto ICMP (1), length 84) 213.79.76.3 > 172.17.1.2: ICMP echo reply, id 17548, seq 1, length 64 tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes 00:41:30.272168 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.1.2 > 213.79.76.3: ICMP echo request, id 17548, seq 1, length 64 00:41:30.272189 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.1.2 > 213.79.76.3: ICMP echo request, id 17548, seq 1, length 64 00:41:30.272635 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.0.2 > 213.79.76.3: ICMP echo request, id 17548, seq 1, length 64 00:41:30.272635 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.17.0.2 > 213.79.76.3: ICMP echo request, id 17548, seq 1, length 64 00:41:30.272648 IP (tos 0x0, ttl 62, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 172.16.2.44 > 213.79.76.3: ICMP echo request, id 17548, seq 1, length 64 00:41:30.278967 IP (tos 0x0, ttl 56, id 24226, offset 0, flags [none], proto ICMP (1), length 84) 213.79.76.3 > 172.16.2.44: ICMP echo reply, id 17548, seq 1, length 64 00:41:30.278988 IP (tos 0x0, ttl 55, id 24226, offset 0, flags [none], proto ICMP (1), length 84) 213
Re: nat не натит сеть, которая недоступна напрямую
29.05.2013 09:56, Dmitry A. Zhiglov пишет: > Мне эта тема тоже интересна. На squeeze в подобной конфигурации пакеты > вылетали не через виртуализованный гейт, а через ip, который был > присвоен "виртуальному коммутатору", то есть если создана > vnet0:192.168.0.1/24 и в ней находятся виртуалки, то пакет летит не с > виртуализованного шлюза виртуальной сети (например адрес гейта > 192.168.0.254) а с 192.168.0.1, который является "шлюзом" для vnet0 > "гипервизора". Какой IP ближе к пользователю - с того и летит. Это логично и нормально. Именно поэтому на бридже у HN нет адреса из сети с пользователями. > Еще, когда kvm создает виртуальные сети (они же "виртуальные > коммутаторы"), то на гипервизоре он настраивает как-то iptables. > Попробуйте посмотреть как изменяется iptables и возможно ebtables на > гипервизоре до создания (и/или активации погашенной) vnet0 и после > создания/активации, может там есть что подкрутить. У меня он "сам" iptables не трогает. При запуске виртуальной машины kvm создаёт vnet виртуальной машины и подключает его к созданному мной "вручную" бриджу. Больше kvm ничего не делает в плане сети. -- Best regards, Mikhail - WWW: http://www.antmix.ru/ XMPP: ant...@stopicq.ru signature.asc Description: OpenPGP digital signature
Re: nat не натит сеть, которая недоступна напрямую
On Wed, May 29, 2013 at 12:39:25AM +0400, Mikhail A Antonov wrote: > Если трафик проходит через GW и имеет адрес не GW - пакет проходит через > HN, но nat не выполняется. Проверьте tcpdump'ом с обеих сторон и трассировкой правил iptables, может быть, там всё-таки есть ошибка конфигурации. > Если я нарвался на ядерный баг - куда мне писать? В net...@vger.kernel.org. Но если нет готовности собирать у себя ядро из свежего git'а и делать бисекты, а также пробовать патчи от тамошних хакеров, то лучше туда не соваться, а искать обходной путь... IMHO. -- Eugene Berdnikov -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20130529065052.gw4...@protva.ru
Re: nat не натит сеть, которая недоступна напрямую
29 мая 2013 г., 0:39 пользователь Mikhail A Antonov написал: > 28.05.2013 23:58, Eugene Berdnikov пишет: >> On Tue, May 28, 2013 at 10:40:39PM +0400, Mikhail A Antonov wrote: >> [skip] >>> Есть идеи что это и почему оно работает не так, как предполагается? >> Стык бриджа с ip-nat довольно редко применяется, он плохо отлажен, >> здесь есть хорошие шансы найти несколько новых ядерных багов... > Я пробовал повесить на br1, который сбриджован с eth0, который смотрит в > сеть с пользователями IP 172.17.1.1/24 (потушив виртуалку GW и убрав > маршрут из таблицы маршрутизации) - нат заработал. > Если нат включить на GW - то процесс ната выполняется дважды, но > пользователи получают интернет. > Если трафик проходит через GW и имеет адрес не GW - пакет проходит через > HN, но nat не выполняется. > > Если я нарвался на ядерный баг - куда мне писать? > > Интересно, а на xen этот баг повторяется? Есть счастливчики с такой > конфигурацией с xen? Мне эта тема тоже интересна. На squeeze в подобной конфигурации пакеты вылетали не через виртуализованный гейт, а через ip, который был присвоен "виртуальному коммутатору", то есть если создана vnet0:192.168.0.1/24 и в ней находятся виртуалки, то пакет летит не с виртуализованного шлюза виртуальной сети (например адрес гейта 192.168.0.254) а с 192.168.0.1, который является "шлюзом" для vnet0 "гипервизора". Еще, когда kvm создает виртуальные сети (они же "виртуальные коммутаторы"), то на гипервизоре он настраивает как-то iptables. Попробуйте посмотреть как изменяется iptables и возможно ebtables на гипервизоре до создания (и/или активации погашенной) vnet0 и после создания/активации, может там есть что подкрутить.
Re: nat не натит сеть, которая недоступна напрямую
28.05.2013 23:58, Eugene Berdnikov пишет: > On Tue, May 28, 2013 at 10:40:39PM +0400, Mikhail A Antonov wrote: > [skip] >> Есть идеи что это и почему оно работает не так, как предполагается? > Стык бриджа с ip-nat довольно редко применяется, он плохо отлажен, > здесь есть хорошие шансы найти несколько новых ядерных багов... Я пробовал повесить на br1, который сбриджован с eth0, который смотрит в сеть с пользователями IP 172.17.1.1/24 (потушив виртуалку GW и убрав маршрут из таблицы маршрутизации) - нат заработал. Если нат включить на GW - то процесс ната выполняется дважды, но пользователи получают интернет. Если трафик проходит через GW и имеет адрес не GW - пакет проходит через HN, но nat не выполняется. Если я нарвался на ядерный баг - куда мне писать? Интересно, а на xen этот баг повторяется? Есть счастливчики с такой конфигурацией с xen? -- Best regards, Mikhail - WWW: http://www.antmix.ru/ XMPP: ant...@stopicq.ru signature.asc Description: OpenPGP digital signature
Re: nat не натит сеть, которая недоступна напрямую
On Tue, May 28, 2013 at 10:40:39PM +0400, Mikhail A Antonov wrote: [skip] > Есть идеи что это и почему оно работает не так, как предполагается? Стык бриджа с ip-nat довольно редко применяется, он плохо отлажен, здесь есть хорошие шансы найти несколько новых ядерных багов... Я под 2.6.30 сталкивался с тем, что в направлении ethX->brX пакеты не натятся, хотя в обратном направлении brX->ethX всё нормально. При этом трассировка показывала, что пакеты идут по PREROUTING и пролетают мимо правила DNAT, как это им удаётся -- непонятно. :-) Нужно было копаться в сорцах ядра, но я не стал париться, быстро решил свою проблему через -J REDIRECT и юзерспейсовый форвардер. -- Eugene Berdnikov -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20130528195848.gg3...@sie.protva.ru
nat не натит сеть, которая недоступна напрямую
Здравствуйте. Имею проблему с nat - правило есть, преобразования не происходит. Свежеустановленный debian wheezy. ~# uname -a Linux klon-hn0 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2+deb7u2 x86_64 GNU/Linux ~# iptables --version iptables v1.4.14 Есть железная машина [HN], на которой запускаются виртуалки. ~# ip a 1: lo: mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc mq master br1 state UP qlen 1000 link/ether 88:51:fb:28:fa:2c brd ff:ff:ff:ff:ff:ff 3: eth1: mtu 1500 qdisc mq state UP qlen 1000 link/ether 88:51:fb:28:fa:2d brd ff:ff:ff:ff:ff:ff inet 172.16.2.44/24 brd 172.16.2.255 scope global eth1 inet6 2001:67c:2158:a039:8a51:fbff:fe28:fa2d/64 scope global dynamic valid_lft 86248sec preferred_lft 14248sec inet6 fe80::8a51:fbff:fe28:fa2d/64 scope link valid_lft forever preferred_lft forever 4: br0: mtu 1500 qdisc noqueue state UP link/ether fe:54:00:00:d2:81 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/28 brd 172.17.0.15 scope global br0 inet6 fe80::6c53:b6ff:fef6:a74c/64 scope link valid_lft forever preferred_lft forever 5: br1: mtu 1500 qdisc noqueue state UP link/ether 88:51:fb:28:fa:2c brd ff:ff:ff:ff:ff:ff inet 172.17.0.17/28 brd 172.17.0.31 scope global br1 inet6 fe80::8a51:fbff:fe28:fa2c/64 scope link valid_lft forever preferred_lft forever 6: vnet0: mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN qlen 500 link/ether fe:54:00:00:d2:81 brd ff:ff:ff:ff:ff:ff inet6 fe80::fc54:ff:fe00:d281/64 scope link valid_lft forever preferred_lft forever 7: vnet1: mtu 1500 qdisc pfifo_fast master br1 state UNKNOWN qlen 500 link/ether fe:54:00:12:84:dc brd ff:ff:ff:ff:ff:ff inet6 fe80::fc54:ff:fe12:84dc/64 scope link valid_lft forever preferred_lft forever Вот так выглядят бриджи: ~# brctl show bridge namebridge idSTP enabledinterfaces br08000.fe54d281novnet0 br18000.8851fb28fa2cnoeth0 vnet1 Таблица маршрутизации: ~# ip r default via 172.16.2.1 dev eth1 172.16.2.0/24 dev eth1 proto kernel scope link src 172.16.2.44 172.17.0.0/28 dev br0 proto kernel scope link src 172.17.0.1 172.17.0.16/28 dev br1 proto kernel scope link src 172.17.0.17 172.17.1.0/24 via 172.17.0.2 dev br0 Собсно правило NAT: ~# iptables-save -t nat # Generated by iptables-save v1.4.14 on Tue May 28 20:42:38 2013 *nat :PREROUTING ACCEPT [1066:99540] :INPUT ACCEPT [5:339] :OUTPUT ACCEPT [1:80] :POSTROUTING ACCEPT [864:77910] -A POSTROUTING ! -d 172.16.2.44/32 -o eth1 -j SNAT --to-source 172.16.2.44 COMMIT # Completed on Tue May 28 20:42:38 2013 Т.е. схематично сеть выглядит так: [(eth1:172.16.2.44)-HN-(br0:172.17.0.1)]~~~[(eth0:172.17.0.2)-GW-(eth1:172.17.1.1)]===[(eth0:172.17.1.2)-USER] Трафик с GW, проходящий через HN - натится а вот трафик от USER (обычная машина, включённая в eth0 на HN) - не натится т.е. tcpdump -pni eth1 на HN показывает трафик с IP-адресом от USER, хотя должен был понатить GW является kvm-вируалкой, которая физически живёт на машине HN её eth0 сбриждован с br0, который в реальные eth не смотрит eth1 от GW сбриджован с br1, который физически уходит на eth0 HN Пересечений по интерфейсам (физическим и логическим) я не наблюдаю Вот адреса на GW: ~# ip a 1: lo: mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:00:d2:81 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/28 brd 172.17.0.15 scope global eth0 inet6 fe80::5054:ff:fe00:d281/64 scope link valid_lft forever preferred_lft forever 3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:12:84:dc brd ff:ff:ff:ff:ff:ff inet 172.17.1.1/24 brd 172.17.1.255 scope global eth1 inet 192.168.15.205/24 scope global eth1 inet6 fe80::5054:ff:fe12:84dc/64 scope link valid_lft forever preferred_lft forever Трафик самой GW уходящий в интернет через HN нормально натится. Трафик из сети 172.17.1.0/24 (которая напрямую HN не видит) до 172.17.0.1 (адрес HN) ходит, но дальше - не натится. Имею довольно большое количество установок где натить надо и сети, доступные напрямую, и сети, которые так же зароучены через другие машины - и там всё работает. Физически на машине HN на eth0 висит локалка и iLO от самой машины. Если на eth0 (т.е. на br1) повесить IP из 172.17.1.0/24 и iLO поставить адрес из той же сети, то трафик не пойдёт через машину GW. На GW планируется поставить прозрачную проксю для офиса и возможно трафикосчиталку. На железную машину, которая занимается запуском виртуалок, проксю ставить не хочу. Ставить непонятную трафикосчи