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

Перенаправление портов с одного мостового интерфейса в гостевой контейнер на ОС хоста

Конфигурация у меня простая.

Карта разума, как все выглядит

Итак, у меня есть структура:

Сети Proxmox:

vmbr0
    Link encap: Ethernet
    inet addr: 136.136.136.161
    Bcast: 136.136.136.191
    Mask: 255.255.255.192

vmbr1
    Link encap: Ethernet
    inet addr: 192.168.1.254
    Bcast: 136.136.1.255
    Mask: 255.255.255.0

Сеть контейнера 1:

eth0
    Link encap: Ethernet
    inet addr: 136.211.123.180
    Bcast: 136.211.123.180
    Mask: 255.255.255.255

Контейнер 2 сети:

eth0
    Link encap: Ethernet
    inet addr: 192.168.1.1
    Bcast: 192.168.1.255
    Mask: 255.255.255.0

Обычный iptables проксмокс выглядит так. (Пример пересылки TeamSpeak³ для udp-порта 9987)

~# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       udp  --  anywhere             anywhere             udp dpt:9987 to:192.168.1.1:9987

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE all  --  192.168.1.0/24       anywhere

Это добавляется через:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o vmbr0 -j MASQUERADE
iptables -t nat -A PREROUTING -i vmbr0 -p udp -m udp --dport 9987 -j DNAT --to-destination 192.168.1.1:9987

И вопрос, как сделать форвард из контейнера 1 в контейнер 2?

В настоящий момент запросы отправляются на хост Proxmox, и они перенаправляют эти запросы в контейнеры через iptables. Но контейнеру 1 назначен статический IP-адрес, потому что обычно все порты должны идти на этот сервер. - кроме нескольких, которые я хочу переслать в другой контейнер.

Итак, как я могу перенаправить запросы на другой статический IP-адрес контейнера 1 в контейнер 2?

Контейнер 2 - это контейнер TS³. Контейнер 1 - это контейнер «статического IP-адреса». И у хоста proxmox тоже есть собственный IP-адрес, который в настоящий момент используется для всех этих запросов.

Заранее спасибо за любые идеи.

Я бы просто установил общедоступный адрес .180 на интерфейсе vmbr0 хост-ОС, а затем сделал бы переадресацию портов в хост-ОС.

Я не вижу смысла иметь здесь отдельную виртуальную машину. Если вы действительно хотите сделать дополнительную сложность с отдельной виртуальной машиной, вы можете попробовать это.

Настройка сети вашего контейнера 1 нечетная, вы не можете получить доступ к любому другому хосту в 136.211.123.128/255.255.255.192 сеть из этого контейнера. Вы должны использовать ту же сетевую маску и широковещательные адреса, которые используются в ОС хоста.

Для фактической пересылки вам необходимо добавить второй интерфейс к контейнеру 1, который соединен с vmbr1. Затем вы можете создать правило переадресации портов в контейнере 1:

iptables -t nat -A PRETROUTING -i eth0 -p udp -m udp --dport 9987 -j DNAT --to-destination 192.168.1.1:9987

Итак, контейнер 1 имеет интерфейс как во внешней, так и во внутренней сети, и затем он может перенаправить порт.