Привет! Я использую Proxmox с версии 4.4 в своём домашнем сервере и недавно настроил первый Proxmox-инстанс на Hetzner Root Server. У машины один публичный IPv4 и обычная подсеть /64 для IPv6. Большая часть настроек работает, но есть одна проблема, для которой мне нужны свежие идеи.
По IPv6 хост и все ВМ имеют адреса из подсети. Это самая простая конфигурация, и она работает без сбоев. По IPv4 публичный адрес назначен хосту. Для ВМ я использую маршрутизируемую схему с маскарадингом на хосте — тоже работает отлично.
Кроме того, машина и ВМ должны быть доступны из облачных серверов Hetzner по приватной сети. Чтобы это устроить, я подключил vSwitch к облачной сети и к серверу. Hetzner использует VLAN тег 4000 для пакетов vSwitch. Я создал дополнительный интерфейс для этого VLAN и ещё один VM Bridge. У мостика IP из приватной подсети vSwitch. Все ВМ, подключённые к этому мосту, тоже получают IP из этой подсети.
Для ВМ всё работает как надо — они могут и обращаться к облачным серверам, и получать от них ответ. А вот на хосте странная проблема: сразу после перезагрузки соединение работает и туда, и обратно. Но через пару минут связь пропадает, и хост становится недоступен для всех облачных серверов. Обратно сначала облачные серверы тоже недоступны с хоста, но после нескольких пакетов соединение оживает и работает ещё несколько минут в обе стороны — пока проблема опять не повторится.
Если "восстановить" связь с помощью ping, то обычно приходится потерять 3-4 пакета, прежде чем соединение снова заработает. Если "починить" через traceroute к облачному серверу, приходится ждать от 14 до 16 пакетов, пока vSwitch ответит. Проблема только у хоста — ВМ всегда в порядке, независимо от состояния хоста.
В чём может быть дело? Честно, у меня уже кончаются идеи, и похожих случаев искать в интернете не получилось. Ниже приложу конфигурацию /etc/network/interfaces с замаскированными IP.
Одно уточнение — я категорически не хочу иметь более одного публичного IPv4-адреса. В планах много ВМ, и публичный IPv4 нужен только для API провайдеров, которые почему-то считают нормой не поддерживать IPv6 для своих API. Весь входящий трафик идёт через балансировщик нагрузки и приватную сеть. В условиях дефицита IPv4 я не хочу расходовать адреса просто ради интернет-связи по IPv4.
Если нужна дополнительная информация — спрашивайте, буду рад любым идеям.
TheJKM
Код:
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
iface lo inet6 loopback
auto enp27s0
iface enp27s0 inet static
address <PUBLIC_IP>/32
gateway <PUBLIC_IP_GATEWAY>
pointopoint <PUBLIC_IP_GATEWAY>
up route add -net <PUBLIC_IP_NET_BASE> netmask 255.255.255.192 gw <PUBLIC_IP_GATEWAY> dev enp27s0
iface enp27s0 inet6 static
address <PUBLIC_IP_V6>/128
gateway fe80::1
auto enp27s0.4000
iface enp27s0.4000 inet manual
mtu 1400
auto vmbr0
iface vmbr0 inet static
address 192.168.0.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o enp27s0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o enp27s0 -j MASQUERADE
iface vmbr0 inet6 manual
address <ANOTHER_PUBLIC_IP_V6>/64
up ip -6 route add <PUBLIC_IP_V6_PREFIX>/64 dev vmbr0
auto vmbr4000
iface vmbr4000 inet static
address 10.0.30.10/24
bridge-ports enp27s0.4000
bridge-stp off
bridge-fd 0
mtu 1400
up ip route add 10.0.0.0/16 via 10.0.30.1 dev vmbr4000
down ip route del 10.0.0.0/16 via 10.0.30.1 dev vmbr4000
По IPv6 хост и все ВМ имеют адреса из подсети. Это самая простая конфигурация, и она работает без сбоев. По IPv4 публичный адрес назначен хосту. Для ВМ я использую маршрутизируемую схему с маскарадингом на хосте — тоже работает отлично.
Кроме того, машина и ВМ должны быть доступны из облачных серверов Hetzner по приватной сети. Чтобы это устроить, я подключил vSwitch к облачной сети и к серверу. Hetzner использует VLAN тег 4000 для пакетов vSwitch. Я создал дополнительный интерфейс для этого VLAN и ещё один VM Bridge. У мостика IP из приватной подсети vSwitch. Все ВМ, подключённые к этому мосту, тоже получают IP из этой подсети.
Для ВМ всё работает как надо — они могут и обращаться к облачным серверам, и получать от них ответ. А вот на хосте странная проблема: сразу после перезагрузки соединение работает и туда, и обратно. Но через пару минут связь пропадает, и хост становится недоступен для всех облачных серверов. Обратно сначала облачные серверы тоже недоступны с хоста, но после нескольких пакетов соединение оживает и работает ещё несколько минут в обе стороны — пока проблема опять не повторится.
Если "восстановить" связь с помощью ping, то обычно приходится потерять 3-4 пакета, прежде чем соединение снова заработает. Если "починить" через traceroute к облачному серверу, приходится ждать от 14 до 16 пакетов, пока vSwitch ответит. Проблема только у хоста — ВМ всегда в порядке, независимо от состояния хоста.
В чём может быть дело? Честно, у меня уже кончаются идеи, и похожих случаев искать в интернете не получилось. Ниже приложу конфигурацию /etc/network/interfaces с замаскированными IP.
Одно уточнение — я категорически не хочу иметь более одного публичного IPv4-адреса. В планах много ВМ, и публичный IPv4 нужен только для API провайдеров, которые почему-то считают нормой не поддерживать IPv6 для своих API. Весь входящий трафик идёт через балансировщик нагрузки и приватную сеть. В условиях дефицита IPv4 я не хочу расходовать адреса просто ради интернет-связи по IPv4.
Если нужна дополнительная информация — спрашивайте, буду рад любым идеям.
TheJKM
Код:
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
iface lo inet6 loopback
auto enp27s0
iface enp27s0 inet static
address <PUBLIC_IP>/32
gateway <PUBLIC_IP_GATEWAY>
pointopoint <PUBLIC_IP_GATEWAY>
up route add -net <PUBLIC_IP_NET_BASE> netmask 255.255.255.192 gw <PUBLIC_IP_GATEWAY> dev enp27s0
iface enp27s0 inet6 static
address <PUBLIC_IP_V6>/128
gateway fe80::1
auto enp27s0.4000
iface enp27s0.4000 inet manual
mtu 1400
auto vmbr0
iface vmbr0 inet static
address 192.168.0.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o enp27s0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o enp27s0 -j MASQUERADE
iface vmbr0 inet6 manual
address <ANOTHER_PUBLIC_IP_V6>/64
up ip -6 route add <PUBLIC_IP_V6_PREFIX>/64 dev vmbr0
auto vmbr4000
iface vmbr4000 inet static
address 10.0.30.10/24
bridge-ports enp27s0.4000
bridge-stp off
bridge-fd 0
mtu 1400
up ip route add 10.0.0.0/16 via 10.0.30.1 dev vmbr4000
down ip route del 10.0.0.0/16 via 10.0.30.1 dev vmbr4000