Часто, когда сервер арендуется у какого-либо хостинг-провайдера, к нему прилагается от одного до нескольких IP-адресов. Если сервер «каноничный» и все сервисы устанавливаются прямо на ОС, деля ресурсы между собой как придется, то данной проблемы может и не возникнуть. Но если же планируется четкое разделение ресурсов сервера посредством виртуализации, то в какой-то момент может появиться надобность либо в дополнительных IP-адресах, либо в организации NAT и пробросе портов. Если, конечно, сервисы смотрят наружу. Организовать NAT для нескольких виртуальных машин довольно просто. В Proxmox «из коробки» доступно создание сетевых мостов. Для наших целей создадим бридж vmbr1 с ip-адресом 192.168.1.1 и стандартной маской 255.255.255.0.

После того как он заработает, идем в /etc/network/interfaces и немного правим конфигурацию созданного бриджа:
1 2 3 4 5 6 7 8 9 10
|
auto vmbr1 iface vmbr1 inet static address 192.168.1.1 netmask 255.255.255.0 bridge_ports none bridge_stp off bridge_fd 0 post-up echo 1 > /proc/sys/net/ipv4/ip_forward post-up iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE post-down iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE
|
Здесь мы разрешаем виртуальным машинам на vmbr1 подключаться к интернету через vmbr0. Стоит отметить, что последние две строчки с добавлением и удалением правил файрвола могут отличаться по причине того, что в моем случае главным интерфейсом сервера является бридж vmbr0 и сеть настраивается на него. У меня он работает для получения несколькими виртуальными машинами реальных IP-адресов от внешнего гейта. Если у вас сеть настраивается на eth0, то он и должен быть вместо vmbr0. В остальном разницы никакой нет. Также, включать ip_forward можно в /etc/sysctl.conf.
Далее, если необходимо пробросить определенные порты на нужные виртуальные машины. Это можно сделать с помощью iptables:
1
|
iptables -A PREROUTING -t nat -i vmbr0 -p tcp -d %ext_ip_on_vmbr0% --dport %ext_port% -j DNAT --to %int_ip_on_vmbr1%:%int_port%
|
Где
%ext_ip_on_vmbr0% — внешний IP-адрес, который находится на vmbr0. Если не указать этого параметра, то порт будет пробрасываться со всех адресов на этом бридже. %ext_port% — внешний порт по которому будут обращаться к серверу из интернета. %int_ip_on_vmbr1% — внутренний IP виртуальной машины на vmbr1. %int_port% — внутренний порт, на котором будет работать сервис в виртуальной машине.
Ну и после применения правил для нужных портов можно посмотреть все ли правильно:
1 2 3 4 5 6 7 8 9 10 11 12
|
# iptables -L -t nat Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- anywhere xxx.yyy.ru tcp dpt:33122 to:192.168.1.2:22 DNAT tcp -- anywhere xxx.yyy.ru tcp dpt:33222 to:192.168.1.3:22 Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 192.168.1.0/24 anywhere
|
Если все верно — остается сделать так, чтобы при перезагрузке правила восстанавливались. Для этого можно воспользоваться iptables-save и скриптами инициализации сети.
1
|
iptables-save > /etc/iptables.up.rules
|
Создадим скрипт загрузки правил:
1
|
nano /etc/network/if-pre-up.d/iptables
|
И впишем в него команду загрузки правил из сохраненного ранее файла:
1 2
|
#!/bin/bash /sbin/iptables-restore < /etc/iptables.up.rules
|
Не забудем дать права на исполнение этому файлу:
1
|
chmod +x /etc/network/if-pre-up.d/iptables
|
Все. Проброс портов работает.
На виртуальных же машинах, которые сидят на vmbr1 конфигурация сети банальна:
1 2 3 4 5 6
|
# The primary network interface allow-hotplug eth0 iface eth0 inet static address 192.168.1.2 netmask 255.255.255.0 gateway 192.168.1.1
|
источник: http://skobkin.ru/2012/03/kvm-vps-proxmox-with-port-forwarding
ссылка на материал: http://www.thin.kiev.ua/categoryblog/741-kvm-vps-proxmox-with-port-forwarding.html
{jcomments on} |