Проксимовая сеть с маршрутизацией KVM с несколькими общедоступными IP-адресами
У меня есть выделенный хостинг с Хетцнером. Дополнительно я купил подсеть 6IP.
Мой основной IP-адрес: 148.111.111.200. Моя основная подсеть: 255.255.255.224.
Мои дополнительные IP-адреса от 148.222.222.1 до 148.222.222.6.
Мой сценарий использования выглядит следующим образом: у нескольких экземпляров будут открытые IP-адреса (веб-серверы и т. Д.). У всех экземпляров будет вторая настройка для внутренней ЛВС, поэтому я могу иметь сервер mysql, memcached и т. Д. В частной сети, заблокированной извне.
Веб-сервер будет в сети 148.222.222.1 и будет иметь второй сетевой адаптер с ip 10.10.10.10
В настоящее время я настроил внутреннюю сеть. Все экземпляры могут соединяться и пинговать друг друга по внутреннему IP (10.10.10.X), но мой веб-сервер не может подключиться к Интернету.
Я не могу использовать мостовой режим, так как hetzner не позволяет использовать несколько MAC-адресов на одном и том же внешнем ip, поэтому я должен использовать режим маршрутизации. Вот мой файл /etc/network/interfaces для хоста:
# network interface settings
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 148.111.111.200
netmask 255.255.255.255
pointopoint 148.111.111.193
gateway 148.111.111.193
broadcast 148.111.111.223
post-up echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
#commentedout
#up route add -net 148.111.111.192 netmask 255.255.255.224 gw 148.111.111.193 eth0
# default route to access subnet
auto vmbr0
iface vmbr0 inet static
address 148.111.111.200
netmask 255.255.255.255
bridge_ports none
bridge_stp off
bridge_fd 0
up ip route add 148.222.222.1/32 dev vmbr0
up ip route add 148.222.222.2/32 dev vmbr0
auto vmbr1
iface vmbr1 inet static
address 10.10.10.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 '10.10.10.0/24' -o eth0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERADE
auto vmbr2
iface vmbr2 inet static
address 148.222.222.1
netmask 255.255.255.248
bridge_ports none
bridge_stp off
bridge_fd 0
А вот мой файл интерфейсов kvm:
auto eth0
iface eth0 inet static
address 148.222.222.1
netmask 255.255.255.255
pointopoint 148.111.111.200
gateway 148.111.111.200
dns-nameservers 8.8.8.8 8.8.4.4
auto eth1
address 10.10.10.12
netmask 255.255.255.0
network 10.10.10.0
broadcast 10.10.10.255
В настоящее время экземпляры KVM могут пропинговать еще один, но больше ничего не работает. Хост может пропинговать экземпляры, но больше ничего. И я не могу получить доступ в Интернет на своих экземплярах.
Что мне нужно изменить в моей конфигурации, чтобы это работало.
Тип PS NIC установлен на virtio в proxmox
3 ответа
Я решил проблему с помощью следующего конфига:
auto eth0
iface eth0 inet static
address 148.111.111.200
netmask 255.255.255.255
pointopoint 148.111.111.193
gateway 148.111.111.193
broadcast 148.111.111.193
# default route to access subnet
auto vmbr0
iface vmbr0 inet static
address 148.111.111.200
netmask 255.255.255.255
bridge_ports none
bridge_stp off
bridge_fd 0
bridge_maxwait 0
#subnet
up ip route add 148.222.222.0/32 dev vmbr0
up ip route add 148.222.222.1/32 dev vmbr0
up ip route add 148.222.222.2/32 dev vmbr0
up ip route add 148.222.222.3/32 dev vmbr0
up ip route add 148.222.222.4/32 dev vmbr0
up ip route add 148.222.222.5/32 dev vmbr0
up ip route add 148.222.222.6/32 dev vmbr0
up ip route add 148.222.222.7/32 dev vmbr0
auto vmbr1
iface vmbr1 inet static
address 10.10.10.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 '10.10.10.0/24' -o eth0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERADE
На ваших клиентских машинах вам нужно определить один или два сетевых интерфейса
- Один для VMBR0 (публичный IP)
- Один для VMBR1 (частный IP - 10.10.10.X)
Пример конфигурации для Ubuntu/ etc / network / interfaces
#vmbr0
auto eth0
iface eth0 inet static
address 148.222.222.1
netmask 255.255.255.255
pointopoint 148.111.111.200
gateway 148.111.111.200 #public IP for the proxmox node
dns-nameservers 8.8.8.8 8.8.4.4
#vmbr1
auto eth1
iface eth1 inet static
address 10.10.10.20
netmask 255.255.255.0
network 10.10.10.0
broadcast 10.10.10.255
Глядя на ваш конфиг для vmbr0, кажется, что вы указываете маршрутизацию на устройства, к которым интерфейс не может подключиться (т. Е. На устройства, которые маска сети выводит за пределы области действия интерфейса).
Не копаясь слишком много в вашей конфигурации, я бы сделал следующие предложения, чтобы упростить вашу настройку сейчас и в будущем:
Create a VM that will act as your UTM
(возможно, запуск pfsense, vyatta, astaro, zentyal, clearos, untangle и т. д.). Это позволит вам беспокоиться о подключении только на одном или двух узлах, которые играют роль шлюза (и избыточного шлюза). Тогда вся ваша логика маршрутизации и доступа будет происходить внутри этой виртуальной машины UTM. Я лично успешно сделал это с pfsense и zentyalProxmox VE 3.2 now works with openvswitch
, попробуйте и разверните поверх этого. Это упростит вам администрирование сетевых стеков, не вдаваясь в подробности правил ebtables и iptables.
Кроме того, вы настраиваете сеть как на интерфейсах {0,1}, так и на мостах между ними. Обычно я бы предложил снять конфиги с интерфейсов eth{0,1} и настроить сеть только на интерфейсах моста.
Как насчет следующего, который забирает детали конфигурации интерфейса от хоста, а также оставляет контроль для маршрутизации между сетями на вашу виртуальную машину UTM ..:
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
auto vmbr0
iface vmbr0 inet manual
bridge_ports eth0
bridge_stp off
bridge_fd 0
auto vmbr1
iface vmbr1 inet manual
bridge_ports eth0
bridge_stp off
bridge_fd 0
auto vmbr2
iface vmbr2 inet static
address 10.10.10.12
netmask 255.255.255.0
gateway 10.10.10.1
bridge_ports eth1
bridge_stp off
bridge_fd 0
Очевидно, что если проблема связана с подключением к хосту, вам придется изменить vmbr0 или vmbr1 и добавить IP-адрес для хоста. Основная идея состоит в том, чтобы не обременять хост маршрутизацией между виртуальными сетями и иметь одну выделенную виртуальную машину, которая позаботится о эти детали
С этой настройкой ваша виртуальная машина UTM становится очень мощной, и вы даже будете перенаправлять хост на нее для внешних IP-адресов. В этом случае я бы порекомендовал запустить Proxmox в кластере (даже в кластере с двумя узлами) и включить HA для виртуальной машины UTM.
Также вам нужно это наверху
авто ло
iface lo inet loopback
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 148.111.111.200
netmask 255.255.255.255
pointopoint 148.111.111.193
gateway 148.111.111.193
broadcast 148.111.111.193
# default route to access subnet
auto vmbr0
iface vmbr0 inet static
address 148.111.111.200
netmask 255.255.255.255
bridge_ports none
bridge_stp off
bridge_fd 0
bridge_maxwait 0
#subnet
up ip route add 148.222.222.0/32 dev vmbr0
up ip route add 148.222.222.1/32 dev vmbr0
up ip route add 148.222.222.2/32 dev vmbr0
up ip route add 148.222.222.3/32 dev vmbr0
up ip route add 148.222.222.4/32 dev vmbr0
up ip route add 148.222.222.5/32 dev vmbr0
up ip route add 148.222.222.6/32 dev vmbr0
up ip route add 148.222.222.7/32 dev vmbr0
auto vmbr1
iface vmbr1 inet static
address 10.10.10.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 '10.10.10.0/24' -o eth0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERADE