четверг, 4 сентября 2014 г.

Проброс портов из HOST машины в GUEST. Proxmox

Задача следующая. Имеется система виртуализации proxmox (HOST) установленная на сервере. имеющая два настроенных сетевых интерфейса (external - внешний и internal - внутренний):

vim /etc/network/interfaces



# network interface settings
auto lo
iface lo inet loopback

iface eth0 inet manual
#external interface
auto vmbr0
iface vmbr0 inet static
        address  172.16.0.29
        netmask  255.255.255.0
        gateway  172.16.0.1
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0

#internal interface
iface eth1 inet manual
auto vmbr1
iface vmbr1 inet static
        address 192.168.2.185
        netmask 255.255.0.0
        bridge_ports eth1
        bridge_stp off
        bridge_fd 0
Внутри установлена виртуальная машина Ubuntu 14.04 LTS x64 (GUEST). На неё необходимо пробосить трафик из машины HOST со внешнего интерфейса по определённым портам (22 ssh и 80 web).
Краткая схема:

То есть если внешних ip-адресов только один, а виртуальные машины хочется выбросить во внешнюю сеть, необходимо будет делать проброс портов на сервере виртуализации в GUEST машины.
Создаём в машине HOST (proxmox) виртуальный сетевой интерфейс. В файле interfaces прописываем
auto vmbr0:0
iface vmbr0:0 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
После махинаций с сетевыми интерфейсами лучше всего, для применения настроек внесённых в файл intefaces выполнять отключение/подключение его, следующими командами:
# ifdown vmbr0
# ifup vmbr0
Добавляем правила для iptables:
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o vmbr0 -j MASQUERADE
# iptables -t nat -A PREROUTING -i vmbr0 -p tcp -m tcp --dport 10080 -j DNAT --to-destination 192.168.0.100:80
# iptables -t nat -A PREROUTING -i vmbr0 -p tcp -m tcp --dport 10022 -j DNAT --to-destination 192.168.0.100:22
Первое включает "натирование" трафика на сеть 192.168.0.0/24 с интерфейса vmbr0, т.е. с внешнего интерфейса HOST машины на виртуальную сеть vmbr0:0. Остальные два пробрасывают трафик поступающий на внешний интерфейс vmbr0 на порты 10022 и 10080 в виртуальную машину GUEST (Ubuntu) на интерфейс eth0 на порты 22 и 80 соответственно.
Можно записать данные правила в файл:
# iptables-save > /etc/iptables.rules
и добавить их в настройки интерфейса vmbr0 для машины HOST (отображена часть кода):
iface vmbr0 inet static
        pre-up iptables-restore < /etc/iptables.rules
        address  172.16.0.29
        netmask  255.255.255.0
        gateway  172.16.0.1
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
Они будут загружаться когда перед тем как интерфейс vmbr0 будет "поднят".
И добавляем настройки интерфейса на который будет приходить трафик из HOST машины:
auto eth0
iface eth0 inet static
     address 192.168.0.100
     network 192.168.0.0
     netmask 255.255.255.0
     broadcast 192.168.0.255
     gateway 192.168.0.1
     dns-nameservers /some ip/
На всякий случай скрин вебморды proxmox где сидит GUEST (matilda1)
Обращаю внимание, в GUEST машине два сетевых интерфейса, один смотрит на внутреннюю сеть (bridge=vmbr1), а второй смотрит на интерфейс vmbr0 HOST машины (bridge=vmbr0).
Использованные материалы:
http://www.ameir.net/blog/archives/55-running-proxmox-behind-a-single-ip-address.html
http://toster.ru/q/23118?utm_source=tm_habrahabr&utm_medium=tm_block&utm_campaign=tm_promo
http://pve.proxmox.com/wiki/Network_Model#Masquerading_.28NAT.29

Комментариев нет:

Отправить комментарий