Назад | Перейти на главную страницу

Виртуальный гость не использует NAT при использовании IP-адреса хоста

Я использую lxc для размещения некоторых служб. Я хочу показать одну из этих услуг внешнему миру.

Я установил три правила NAT на моем хосте с использованием iptables, одно для eth0, одно для br0 (мост для контейнеров / гостей) и правило OUTPUT для трафика от самого хоста.

С помощью этих правил я могу использовать IP-адрес хоста (10.234.13.185) с выбранным мной портом (4050) для доступа к гостю / контейнеру (192.168.3.54:61616). Это работает от внешнего мира, хозяина и других гостей.

Однако я не могу заставить его работать от гостя со службой (192.168.3.54).

Я заметил, что трафик поступает на хост через порт 4050 и в нормальных условиях попадает на гостевой порт 61616. Однако, если трафик идет от гостя, он все равно попадает на порт 4050 хоста, но не маршрутизируется на 61616, а остается на нем. 4050 вместо этого.

Я сделал ngrep и от других клиентов, которых я вижу (используя telnet):

Однако, когда я повторяю, но telnet от самого гостя, я вижу:

Я предполагаю, что отсутствует правило (возможно, правило POSTROUTING для источника?).

Вот копия моего iptables-save

*nat
:PREROUTING ACCEPT [36:2286]
:INPUT ACCEPT [5:426]
:OUTPUT ACCEPT [25:1610]
:POSTROUTING ACCEPT [8:504]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 4050 -j DNAT --to-destination 192.168.3.54:61616
-A PREROUTING -i br0  -p tcp -m tcp --dport 4050 -j DNAT --to-destination 192.168.3.54:61616
-A OUTPUT -p tcp -m tcp --dport 4050 -j DNAT --to-destination 192.168.3.54:61616
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

Любая помощь очень ценится.