Eu tenho uma instalação do Windows Server 2012 R2, com configuração Hyper-V, RRAS e NAT.
Estou tendo um problema com duas das minhas VMs e RRAS NAT:
Essencialmente, essas duas VMs não se comunicarão fora da sub-rede local. Eles podem se comunicar com tudo dentro da rede local (outras VMs, o gateway), mas nada fora dela. A única diferença entre essas duas e as outras VMs é que elas são sistemas baseados em Linux. Todas as outras VMs são sistemas baseados no Windows Server 2012 R2.
Existe algo específico para o Linux que estaria causando esse problema? Uma é uma instalação do CentOS e a outra é uma instalação do Debian.
Se eu atribuir a qualquer uma das caixas Linux uma interface voltada para o público, elas terão conectividade externa. Obviamente, não quero fazer isso, pois desperdiça meu espaço de endereçamento IP.
Observe: o servidor pode executar ping no gateway padrão (10.0.0.1) perfeitamente. O tempo é geralmente em torno de 0,450ms.
Por enquanto, eu só quero resolver o problema com a instalação do debian, então aqui estão alguns dados dele:
# 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)
(Loopback não incluído)
# 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
O /etc/network/interfaces
arquivo é o seguinte:
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
Mais algumas informações:
# 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
A rede é configurada basicamente da seguinte forma: o Hyper-V Windows Server possui uma porta de rede, que é conectada à internet. O host então tem o RRAS e o NAT instalados e usa todo o meu espaço IP público para traduzir o NAT para as VMs. Cada VM obtém um /24
bloco diferente de endereços IP do 10.0.0.0/16
intervalo, mas mantém a /16
máscara de sub-rede. A VM Debian, por exemplo, é 10.0.4.0 - 10.0.4.255
.
Portanto, o problema ocorre devido ao descarregamento da soma de verificação.
Por algum motivo, os convidados Linux não funcionam sobre NAT quando o descarregamento de soma de verificação IPv4 está ativado. (Eles funcionam sem NAT muito bem, o que é bizarro.)
Então, depois de desabilitar o IPv4 Checksum Offload na interface física e virtual e reiniciar o servidor, tudo funciona conforme o esperado.