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

Однозначное сопоставление диапазона портов от аппаратного узла до контейнеров VZ с помощью iptables


В любое время у меня есть около 3-4 контейнеров VZ на сервере (Hardware Node на CentOS6). У меня есть веб-серверы, ssh, почта и т. Д., Работающие на разных контейнерах. С другого хоста в сети к ним обращаются как ip.of.hardware.node: port, а iptables перенаправляет их с правилом в таблице nat.

Чтобы объяснить, чего я действительно хочу:
Предположим, что у меня идентификаторы контейнера 2, 3, 4. И их IP-адреса соответственно 192.168.0.2, 192.168.0.3, 192.168.0.4.
Мне нужна настройка, при которой, если кто-то обращается к ip.of.hardware.node: 2080, соединение должно быть перенаправлено на 192.168.0.2:80.
Так же:
ip.of.hardware.node: 2022 => 192.168.0.2:22 (ContainerID: 2)
ip.of.hardware.node: 3022 => 192.168.0.3:22 (ContainerID: 3)
ip.of.hardware.node: 4080 => 192.168.0.4:80 (ContainerID: 4)
ip.of.hardware.node: 4443 => 192.168.0.4:443 (ContainerID: 4)
... и так далее.

Таким образом, каждый Контейнер получает блок из 1000 портов для работы. Есть ли способ добиться этого без указания 1000 правил для каждого Контейнера?

На аппаратном узле вам нужно будет создать правило IPtables DNAT для каждой перенаправляемой службы, которую вы хотите.

Используя ваш пример сценария:

iptables -t nat -A PREROUTING -p tcp --dport 2022 -i eth0 -j DNAT --to-destination 192.168.0.2:22
iptables -t nat -A PREROUTING -p tcp --dport 3022 -i eth0 -j DNAT --to-destination 192.168.0.3:22
iptables -t nat -A PREROUTING -p tcp --dport 4080 -i eth0 -j DNAT --to-destination 192.168.0.4:80
iptables -t nat -A PREROUTING -p tcp --dport 4443 -i eth0 -j DNAT --to-destination 192.168.0.4:443

Если вы планируете развернуть еще много контейнеров и сервисов, вы можете создать скрипт для создания этих правил на основе соглашений о портах.