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

proxmox KVM-маршрутизируемая сеть с несколькими общедоступными IP-адресами

У меня есть выделенный хостинг с hetzner. Дополнительно я купил подсеть 6IP.

Мой основной IP: 148.111.111.200 Моя основная подсеть: 255.255.255.224

Мои дополнительные IP-адреса: от 148.222.222.1 до 148.222.222.6.

Мой сценарий использования следующий: несколько экземпляров будут иметь общедоступные IP-адреса (веб-серверы и т. Д.). Все экземпляры будут иметь вторую настройку nic для внутренней локальной сети, поэтому я могу заблокировать сервер 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 могут пинговать друг друга, но все остальное не работает. Хост может пинговать экземпляры, но ничего больше. И я не могу получить доступ в Интернет на своих экземплярах.

Что мне нужно изменить в моей конфигурации, чтобы это работало.

P.S. Тип NIC установлен на virtio в proxmox

Я решил проблему, используя следующую конфигурацию:

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 / и т.д. / сеть / интерфейсы

#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

также вам нужно это вверху

авто лоу

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

Глядя на вашу конфигурацию для vmbr0, кажется, что вы указываете маршрутизацию на устройства, которые интерфейс не может достичь (то есть на устройства, которые сетевая маска помещает вне зоны действия сети интерфейса).

Не углубляясь в вашу конфигурацию, я бы сделал следующие предложения, чтобы упростить вашу настройку сейчас и в будущем:

  • Create a VM that will act as your UTM (возможно, работает pfsense, vyatta, astaro, zentyal, clearos, untangle и т. д.). Это гарантирует, что вы будете беспокоиться о подключении только на одном или двух узлах, которые играют роли шлюза (и резервного шлюза). Тогда вся ваша логика маршрутизации и доступа будет происходить в этой виртуальной машине UTM. Я лично успешно сделал это с помощью pfsense и zentyal
  • Proxmox VE 3.2 now works with openvswitch, попробуйте развернуть поверх этого. Это упростит администрирование сетевых стеков, не вдаваясь в подробности правил ebtables и iptables.

Кроме того, вы настраиваете сеть как на интерфейсах eth {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.