Я запускаю Proxmox VE на корневом сервере. Есть несколько виртуальных контейнеров, один из которых действует как обратный прокси, который выполняет завершение TLS.
На машине proxmox iptables обрабатывает переадресацию портов и защиту внутренней сети. Конфигурация выглядит так:
*nat
# enable network access for vms
-A POSTROUTING -s 192.168.1.0/24 -o enp4s0 -j MASQUERADE
# reverseproxy
-A POSTROUTING -s 192.168.1.2/24 -o vmbr0 -j MASQUERADE
-A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:80
-A PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 192.168.1.2:443
COMMIT
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
-A OUTPUT -j ACCEPT
# Allows SSH connection
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -j ACCEPT
# log iptables denied calls (access via 'dmesg' command)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
COMMIT
Когда я пытаюсь подключиться (с помощью wget) из одного контейнера к общедоступному URL-адресу другого контейнера, я получаю сообщение об ошибке, содержащее: «xxx.xxx.xxx.xxx |: 443 ... сбой: соединение отклонено».
Когда я получаю доступ к тому же URL извне, я могу получить доступ к контейнеру без проблем. Есть что-то, что я случайно заблокировал или забыл включить?
Ответ был очевиден:
Я включил переадресацию портов для обратного прокси-сервера, поступающего с интерфейса vmbr0 (мост между статическим IP-адресом сервера и внутренней сетью), но не для vmbr1 (мост, через который подключаются контейнеры). Поскольку доменные имена разрешаются во внешний IP-адрес, но пакеты поступают от внутреннего моста vmbr1, а не от внешнего vmbr0, переадресация портов не производилась.
Решение добавляло это в таблицу * nat:
-A POSTROUTING -s 192.168.1.2/24 -o vmbr1 -j MASQUERADE
-A PREROUTING -i vmbr1 -d SERVERIP -p tcp --dport 80 -j DNAT --to 192.168.1.2:80
-A PREROUTING -i vmbr1 -d SERVERIP -p tcp --dport 443 -j DNAT --to 192.168.1.2:443