У меня установлена Windows Server 2012 R2 с настройкой Hyper-V, RRAS и NAT.
У меня проблема с двумя виртуальными машинами и RRAS NAT:
По сути, эти две виртуальные машины не будут обмениваться данными за пределами локальной подсети. Они могут связываться со всем в локальной сети (другими виртуальными машинами, шлюзом), но ни с чем за ее пределами. Единственная разница между этими двумя виртуальными машинами и другими виртуальными машинами состоит в том, что они являются системами на базе Linux. Все остальные виртуальные машины - это системы на базе Windows Server 2012 R2.
Есть ли что-то специфическое для Linux, которое могло бы вызвать эту проблему? Один - это установка CentOS, а другой - установка Debian.
Если я назначу любому из Linux-боксов общедоступный интерфейс, у них будет внешнее подключение. Очевидно, я не хочу этого делать, так как это тратит впустую мое IP-адресное пространство.
Обратите внимание: сервер может нормально пинговать шлюз по умолчанию (10.0.0.1). Время обычно составляет около 0,450 мс.
На данный момент я просто хочу решить проблему с установкой debian, поэтому вот немного данных из нее:
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:15:5d:91:82:07
inet addr:10.0.4.0 Bcast:10.0.255.255 Mask:255.255.0.0
inet6 addr: fe80::215:5dff:fe91:8207/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1842 errors:0 dropped:0 overruns:0 frame:0
TX packets:7245 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:119697 (116.7 KiB) TX bytes:701216 (684.7KiB)
(Петля не входит в комплект)
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
localness * 255.255.0.0 U 0 0 0 eth0
# ip route
default via 10.0.0.1 dev eth0
10.0.0.0/16 dev eth0 proto kernel scope link src 10.0.4.0
В /etc/network/interfaces
файл выглядит следующим образом:
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet static
address 10.0.4.0
netmask 255.255.0.0
network 10.0.0.0
broadcast 10.0.255.255
gateway 10.0.0.1
Дополнительная информация:
# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
# iptables -L
Chain INPUT (policy ACCEPT)
target port opt source destination
Chain INPUT (policy ACCEPT)
target port opt source destination
Chain OUTPUT (policy ACCEPT)
target port opt source destination
Сеть в основном настроена следующим образом: Hyper-V Windows Server имеет один сетевой порт, который подключен к Интернету. Затем на хосте установлены RRAS и NAT, и он использует все мое общедоступное IP-пространство для преобразования NAT для виртуальных машин. Каждая виртуальная машина отличается /24
блок IP-адресов из 10.0.0.0/16
диапазон, но они сохраняют /16
маска подсети. Например, виртуальная машина Debian 10.0.4.0 - 10.0.4.255
.
Итак, как выясняется, проблема связана с разгрузкой контрольной суммы.
По какой-то причине гостевые системы Linux не работают через NAT, когда активирована разгрузка контрольной суммы IPv4. (Они прекрасно работают без NAT, что странно.)
Итак, после отключения разгрузки контрольной суммы IPv4 как на физическом, так и на виртуальном интерфейсе и перезагрузки сервера все работает должным образом.