Я установил 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-адреса виртуальным машинам через мост (не прокси-арп). Вы всё равно сможете использовать межсетевой экран для трафика всех ВМ на хосте, потому что 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 и виртуальный интерфейс VM. Вся связь с хостом осуществляется через vmbr0.
Я не знаю, зачем вы добавили ключевое слово 'pointtopoint' для eth0. Я сохранил его в vmbr0, но все равно думаю, что это ошибка и не нужно. У вас есть сеть BMA на eth0 с маской /25, она имеет 128 адресов (126 usable), так что 'pointtopoint' (что означает, что у вас только один ровесник) выглядит там неправильно. Я также отключил лямку на всех мостах. Это не очень удобно, потому что вы не будете мостить интерфейсы, которые подключены в другом месте.
В любом случае, tcpdump - ваш лучший друг.
Вы можете настроить прокси-арп вместо моста на первой ВМ (которые появляются на eth0). Я думаю, что это сделает вещи менее надежными, и я советую вам не идти этим путем.
Из вашего описания я делаю вывод, что ваш хост должен иметь только один IP адрес, и этот адрес должен быть виден на eth0, так что eth1 будет ненумерован на хосте (не должен иметь никакого адреса), только VM адрес появится там. Не знаю, можно ли настроить прокси-арп и маршрутизацию в Linux на ненумерованном интерфейсе (тот, который не имеет никакого IP-адреса), поэтому для уточнения этой части мне нужно провести кое-какие исследования самостоятельно
.