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

LXC: перенаправить трафик локального хоста контейнера на локальный хост хоста

У меня есть служба A, работающая на хосте и привязанная к порту 127.0.0.1:7800.

У меня есть служба B, работающая внутри моего контейнера LXC, который хочет подключиться к службе A через 127.0.0.1:7800, но в настоящее время не может.

Как настроить контейнер или iptables для пересылки трафика?

На стороне контейнера вы должны добавить эти правила:

iptables -t nat -A OUTPUT \
         -d 127.0.0.1 \
         -p tcp --dport 7800 \
    -j DNAT --to-address <HOST.EXT.IP>

iptables -t nat -A POSTROUTING \
         -o <LXC.HOST.IFACE> \
         -d <HOST.EXT.IP> -s 127.0.0.1 \
         -p tcp --dport 7800 \
    -j MASQUERADE

Также требуется включение net.ipv4.conf.all.route_localnet sysctl вариант.

Потому что на хосте приложение слушает только 127.0.0.1 адрес, это означает, что он не может принимать внешние соединения по умолчанию. Но вы можете использовать DNAT/REDIRECT цели как обходной путь.

iptables -t nat -A PREROUTING \
         -i <HOST.LXC.IFACE> \
         -d <HOST.LXC.IP> -s <LXC.IP> \
         -p tcp --dport 7800 \
    -j DNAT --to-address 127.0.0.1:7800

Также необходимо включить route_localnet вариант.

Использовать iptables-save -c (проверьте счетчики правил) и tcpdump для устранения неполадок.