У меня выделенный сервер CentOS (Hetzner):
IP: aa.bb.cc.16
Шлюз: aa.bb.cc.1
Маска сети: 255.255.255.255
и дополнительный IP (гостевая виртуальная машина (libvirt) с установленным Debian):
IP: aa.bb.cc.61
Шлюз: aa.bb.cc.1
Маска сети: 255.255.255.192
Я настроил маршрутизируемую конфигурацию с помощью документации Hetzner (https://wiki.hetzner.de/index.php/Netzkonfiguration_CentOS/en#Routed_.28brouter.29).
Конфигурация хоста:
кошка /etc/sysctl.conf
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.default.proxy_arp=1
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.eth0.send_redirects=0
net.ipv4.conf.br0.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
кошка / и т. д. / sysconfig / сетевые скрипты / ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
HWADDR=XX:XX:XX:XX:XX:XX
BOOTPROTO=none
IPADDR=aa.bb.cc.16
NETMASK=255.255.255.255
SCOPE="peer aa.bb.cc.1"
IPV6INIT=yes
IPV6ADDR=2a01:4f8:yyy:yyyy::2/128
IPV6_DEFAULTGW=fe80::1
IPV6_DEFAULTDEV=eth0
кошка / и т. д. / sysconfig / сетевые сценарии / ifcfg-br0
DEVICE=br0
ONBOOT=yes
TYPE="Bridge"
BOOTPROTO=static
IPADDR=aa.bb.cc.16
NETMASK=255.255.255.255
IPV6INIT=yes
IPV6ADDR=2a01:4f8:yyy:yyyy::2/64
STP=off
DELAY=0
кошка / и т. д. / sysconfig / сетевые сценарии / маршрут-br0
ADDRESS0=aa.bb.cc.61
NETMASK0=255.255.255.255
Гостевая конфигурация:
кот / и т.д. / сеть / интерфейсы
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address aa.bb.cc.61
netmask 255.255.255.255
pointopoint aa.bb.cc.16
gateway aa.bb.cc.16
dns-nameservers 212.133.98.98 212.133.99.99 212.133.100.100
iface eth0 inet6 static
address 2a01:4f8:yyy:yyyy::4
netmask 64
address 2a01:4f8:yyy:yyyy::2
Для доступа в Интернет с гостевой виртуальной машины в Интернет я добавил правило:
iptables -t nat -A POSTROUTING -o eth0 -s aa.bb.cc.61 -j SNAT --to-source aa.bb.cc.16
Вопрос: Возможен доступ из Интернета к гостевой ВМ через гостевой IP-адрес aa.bb.cc.61 в маршрутизированном режиме? Когда я пингую извне (интернет) на aa.bb.cc.61 Я получаю сообщение «Истекло время ожидания запроса». Но aa.bb.cc.16 (хост) пингуется нормально. Какое правило я должен добавить?
Спасибо.
Вот рабочее решение:
кошка / и т. д. / sysconfig / сетевые скрипты / ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
HWADDR=XX:XX:XX:XX:XX:XX
BOOTPROTO=none
IPADDR=aa.bb.cc.16
NETMASK=255.255.255.255
SCOPE="peer aa.bb.cc.1"
BRIDGE=br0
кошка / и т. д. / sysconfig / сетевые сценарии / ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=aa.bb.cc.16
NETMASK=255.255.255.255
SCOPE="peer aa.bb.cc.1"
ONBOOT=yes
DELAY=0
mv / и т. д. / sysconfig / сетевые сценарии / маршрут-eth0 / и т. д. / sysconfig / сетевые сценарии / маршрут-br0 кошка кошка / и т. д. / sysconfig / сетевые сценарии / маршрут-br0
### Hetzner Online GmbH - installimage
# routing for eth0
ADDRESS0=0.0.0.0
NETMASK0=0.0.0.0
GATEWAY0=aa.bb.cc.1
Гостевая конфигурация:
кот / и т.д. / сеть / интерфейсы
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address aa.bb.cc.61
netmask 255.255.255.255
pointopoint aa.bb.cc.16
gateway aa.bb.cc.16
dns-nameservers 212.133.98.98 212.133.99.99 212.133.100.100
hwaddress ether 00:01:02:ab:cd:de # MAC Address for additional IP
Во-первых, необходимо прояснить несколько вещей.
В руководстве, которое вы используете, упоминаются «режим маршрутизатора» и «мостовой режим».
Описанный режим роутера почти полностью бессмыслен. Он включает в себя создание пустого моста «только для хоста», подключение к нему виртуальной машины и последующую маршрутизацию трафика IP-уровня от этого моста к исходящему интерфейсу. Это игнорирует тот факт, что libvirt может создать свой собственный виртуальный интерфейс NAT (с дополнительной маршрутизацией, DHCP и DNS) и подключать к нему интерфейсы виртуальных машин. Фактически, libvirt создает и активирует эту сеть по умолчанию. Это называется сетью "по умолчанию".
В вашем случае у вас есть две подсети (которые, как я предполагаю, находятся в отдельных доменах уровня 2 - как это было бы почти во всех ситуациях). Один адрес будет использоваться для доступа к вашему гипервизору «aa.bb.cc.16 / 32» (это недопустимая подсеть - подробнее об этом позже). Этот адрес можно разместить непосредственно в интерфейсе.
И тогда у вас есть второй IP-адрес в другой подсети (aa.bb.cc.61 / 26). Этот адрес должен находиться на интерфейсе виртуальной машины в гостевой системе. Это можно сделать напрямую с помощью моста, и хотя опубликованное вами руководство изначально предлагает плохие решения для «режима маршрутизации», предлагаемая конфигурация для напрямую используемого моста на самом деле является правильным способом работы. Однако он также предлагает совершенно неправильную конфигурацию.
Следующая сетевая конфигурация будет работать для указанного моста, если вы обновите значения, чтобы отразить свой сценарий:
# /etc/sysconfig/network-scripts/ifcfg-eth0
# device: eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
BRIDGE=br0
# /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE="Bridge"
BOOTPROTO=static
ONBOOT=yes
Как только это будет сделано, используйте этот мост как устройство для подключения вашей сетевой карты виртуальной машины. При необходимости вы можете указать IP-адрес на самом мосту, чтобы обеспечить связь между хостом и гостем. Однако это будет в вашей подсети, к которой вы предъявляете иск за публичный доступ. Если вам действительно нужна связь между хостом и гостем, я бы порекомендовал частный домен уровня 2 либо через интерфейс NAT «по умолчанию», либо через пустой мост с частным IP-пространством как на хосте, так и на гостевой (что создаст всего два сетевых адаптера на ВМ).
В качестве примечания: сетевая маска, которую вы опубликовали для своего IP-адреса гипервизора (255.255.255.255), составляет 32 бита. Это не позволит использовать один адрес в его сети, и я предполагаю, что это просто опечатка. Если это не опечатка, вам нужно использовать адресное пространство, которое фактически позволит хосту, даже если это всего лишь 31-битная сетевая маска.
Это касается вещей в общем смысле. Надеюсь, этой информации достаточно, чтобы вы приняли решение и правильно все настроили.