LXC: Перенаправление трафика localhost контейнера на localhost хоста

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

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

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

0
задан 30 May 2019 в 08:09
1 ответ

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

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

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

Поскольку на хосте приложение прослушивает только адрес 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 для устранения неполадок.

0
ответ дан 23 November 2019 в 23:44

Теги

Похожие вопросы