Я установил 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-адреса), поэтому, чтобы прояснить эту часть, мне нужно провести небольшое исследование самостоятельно.