Я использую 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
Любая помощь очень ценится.