Я использую LXC для размещения некоторых своих сервисов. Один из них - скажем, контейнер A, - это nginx, работающий как обратный прокси. Другой, назовем его B, - это сервис, которому нужен доступ к контейнеру A через домен хоста (example.com
).
Теперь, чтобы nginx работал, я настроил PREROUTING
править в IPTABLES
для перенаправления трафика с портов 80 и 443 хоста в контейнер A. Из внешнего мира все работает нормально, но контейнер B не работает с сообщением «В соединении отказано» при попытке доступа example.com
.
я использую lxc-net
для настройки сети в обоих контейнерах (кстати, оба они непривилегированы). Я также не использую IPv6 для упрощения начальной настройки.
Вот мой iptables
config, 10.0.3.10
мой контейнер A:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -o lxcbr0 -j ACCEPT
-A FORWARD -i lxcbr0 -j ACCEPT
-A FORWARD -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -d 10.0.3.10/32 -i lxcbr0 -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -d 10.0.3.10/32 -i lxcbr0 -p tcp -m tcp --dport 443 -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.3.10:80
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.0.3.10:443
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
COMMIT
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o lxcbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
Я пробовал добавить -A PREROUTING -i lxcbr0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.3.10:80
, но из-за этого сетевые клиенты в контейнере B зависали только при попытке подключения к хосту / контейнеру A через HTTP.
Что мне изменить в моем iptables
разрешить доступ к HTTP-серверу в контейнере A из других контейнеров через домен хоста?