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

Proxmox VE (проблема маршрутизации и переадресации портов)

Я установил PVE, я получил три публичных IP-адреса, два из которых находятся в одном диапазоне, третий - в другом диапазоне. Я хотел предоставить хосту PVE один IP-адрес паба, чтобы он был доступен извне, а два других - для виртуальных машин. Я также хотел создать две виртуальные машины с частным IP-адресом и выполнить переадресацию портов. ниже моя конфигурация:

auto lo

iface lo inet loopback

auto eth0
iface eth0 inet static

address  x.x.203.141
netmask  255.255.255.128
pointopoint x.x.203.137
gateway  x.x.203.137
broadcast  x.x.203.255
#post-up echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp


iface eth1 inet manual

    auto vmbr0
    iface vmbr0 inet static

    address x.x.203.141
    netmask 255.255.255.128
    #gateway x.x.203.137
    bridge_ports none
    bridge_stp on
    bridge_fd 0
    bridge_maxwait 0



   iface vmbr1 inet manual
    bridge_ports none
    bridge_stp on
    bridge_fd 0

up ip route add x.x.203.142/32 dev vmbr0  ##IP of the first VM
up ip route add x.x.220.37/32 dev vmbr1   ## IP of the second VMS

auto vmbr2

iface vmbr2 inet static

address 192.168.0.254
netmask 255.255.255.0
bridge_ports none
bridge_stp on
bridge_fd 0

post-up echo 1 > /proc/sys/net/ipv4/ip_forward

post-up iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o eth0 -j MASQUERADE

post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o eth0 -j MASQUERADE

но я теряю пинг на внешней машине. а также со вторыми виртуальными машинами, у которых есть общедоступный IP-адрес с другим диапазоном, у меня очень медленный интернет? Другое дело, что я не могу подключиться к виртуальной машине по ssh с частным IP-адресом извне.

Заранее спасибо за помощь!

Самый простой способ добиться этого - предоставить виртуальным машинам белые (общедоступные) IP-адреса через мост (не proxy-arp). Вы по-прежнему сможете пропускать трафик межсетевого экрана для всех виртуальных машин на хосте, потому что netfilter в Linux поддерживает проверку трафика моста с помощью правил iptables.

В этом случае конфигурация, вероятно, будет выглядеть так:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto vmbr0
iface vmbr0 inet static
    address  x.x.203.141
    netmask  255.255.255.128
    pointopoint x.x.203.137
    gateway  x.x.203.137
    broadcast  x.x.203.255
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

auto eth1
iface eth1 inet manual

auto vmbr1
iface vmbr1 inet manual
    bridge_ports eth1
    bridge_stp off
    bridge_fd 0

auto vmbr2
iface vmbr2 inet static
    address 192.168.0.254
    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.0.0/24' -o vmbr0 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o vmbr0 -j MASQUERADE

Вы должны поместить виртуальную машину, которая должна появиться на eth0, на vmbr0, виртуальную машину, которая должна появиться на eth1, на vmbr1, а все остальное будет на vmbr2, любой трафик из этой сети будет замаскирован. Обратите внимание, что vmbr1 не имеет IP-адреса, он не нужен, потому что единственная цель этого моста - связать eth1 и виртуальный интерфейс виртуальной машины. Все коммуникации с хостом осуществляются через vmbr0.

Я не знаю, почему вы добавили ключевое слово pointtopoint для eth0. Я сохранил его в vmbr0; все же я считаю это ошибкой и в этом нет необходимости. У вас есть сеть BMA на eth0 с маской / 25, она имеет 128 адресов (126 используемых), поэтому «точка-точка» (что означает, что у вас есть только один партнер) выглядит здесь неправильно. Еще я отключил stp на всех мостах. В этом нет особого смысла, потому что вы не будете соединять интерфейсы, подключенные где-либо еще.

В любом случае tcpdump - ваш лучший друг.

Вы можете настроить proxy-arp вместо моста для первой виртуальной машины (которая появляется на eth0). Я думаю, что это сделает ситуацию менее надежной, и я предлагаю вам не идти по этому пути.

Из вашего описания я делаю вывод, что у вашего хоста должен быть только один IP-адрес, и этот адрес должен быть виден на eth0, поэтому eth1 будет ненумерован на хосте (не должен иметь никакого адреса), там будет только адрес виртуальной машины. Я не знаю, можно ли настроить proxy-arp и маршрутизацию в Linux на ненумерованном интерфейсе (тот, у которого нет IP-адреса), поэтому, чтобы прояснить эту часть, мне нужно провести небольшое исследование самостоятельно.