Recentemente, configurei o Proxmox como um host de virtualização. É apenas KVM + Debian em uma boa distribuição linux. Minha rede doméstica é 192.168.12.0/24. Eu queria usar 192.168.14.0/24 como a sub-rede para todas as minhas VMs na máquina proxmox. Eu uso o DHCP para configurar quase todos os meus hosts. Se eu quiser um 'static-ip' eu geralmente configuro uma reserva DHCP para o dispositivo manualmente. Então, eu queria que minhas VMs obtivessem endereços DHCP na sub-rede 192.168.14.0/24.
Quando instalei o Proxmox, criei uma ponte chamada vmbr0
, que é preenchida com eth0
. O endereço IP da ponte é 192.168.12.12
.
Eu adicionei uma ponte em /etc/network/interfaces
chamado vmbr14
em ponte com eth0.14
. Eu dei um IP de 192.168.14.12
. Eu também modprobe'd no módulo 8021q
e adicionei a /etc/modules
.
Meu servidor DHCP está em outra máquina 192.168.12.95
com uma interface eth0
. Eu adicionei outra interface chamada eth0.14
e dei o IP de 192.168.14.95
. Eu atualizei /etc/dhcp/dhcpd.conf
com outro pool para a sub-rede 192.168.14.0
. A rota padrão especificada é 192.168.14.12
, a máquina Proxmox. O DHCP funcionou imediatamente sem problemas.
Para obter os hosts na rede 192.168.12.0/24
para saber como rotear 192.168.14.0/24
, fui ao meu gateway da Internet ( 192.168.12.2
) e adicionei uma rota da seguinte forma
192.168.14.0 192.168.12.12 255.255.255.0 UG 1 0 0 eth2
A caixa proxmox já tem o encaminhamento ativado para IPv4
ericu@basov:~$ cat /proc/sys/net/ipv4/ip_forward
1
Depois disso, as coisas simplesmente funcionaram. Eu posso SSH e pingar minhas VMs da minha área de trabalho sem problemas.
Mas nas próprias VMs, não consigo alcançar 192.168.12.95
only 192.168.14.95
. Fiz um ping em uma das VMs para 192.168.12.95
e o pacote capturado usando tcpdump
ericu@katz:~$ sudo tcpdump -n -i eth0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:50:16.007898 IP 192.168.14.130 > 192.168.12.95: ICMP echo request, id 11498, seq 18, length 64
18:50:17.010380 IP 192.168.14.130 > 192.168.12.95: ICMP echo request, id 11498, seq 19, length 64
18:50:18.012969 IP 192.168.14.130 > 192.168.12.95: ICMP echo request, id 11498, seq 20, length 64
18:50:19.015433 IP 192.168.14.130 > 192.168.12.95: ICMP echo request, id 11498, seq 21, length 64
18:50:20.018043 IP 192.168.14.130 > 192.168.12.95: ICMP echo request, id 11498, seq 22, length 64
Os pacotes obviamente chegam à máquina, mas não tenho ideia do que acontece depois disso. A máquina simplesmente não responde. O TCP também não funciona.
ericu@katz:~$ sudo tcpdump -n tcp port 3000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:53:21.048128 IP 192.168.14.130.58499 > 192.168.12.95.3000: Flags [S], seq 2306774687, win 14600, options [mss 1460,sackOK,TS val 665263 ecr 0,nop,wscale 7], length 0
18:53:22.051442 IP 192.168.14.130.58499 > 192.168.12.95.3000: Flags [S], seq 2306774687, win 14600, options [mss 1460,sackOK,TS val 666264 ecr 0,nop,wscale 7], length 0
18:53:24.060540 IP 192.168.14.130.58499 > 192.168.12.95.3000: Flags [S], seq 2306774687, win 14600, options [mss 1460,sackOK,TS val 668268 ecr 0,nop,wscale 7], length 0
Se eu tentar acessar o IP de 192.168.14.95
das VMs, tudo funcionará bem.
Se eu ifdown eth0.14
na máquina 192.168.12.95
for alcançável pelas VMs. Obviamente, isso não é prático, pois o servidor DHCP precisa estar acessível.
Por que as máquinas na sub-rede 192.168.14.0/24
só alcançam a máquina usando o endereço 192.168.14.95
e não o endereço 192.168.12.95
?
A é a tabela de roteamento em 192.168.12.95
ericu@katz:~$ ip route show
default via 192.168.12.2 dev eth0 metric 100
192.168.12.0/24 dev eth0 proto kernel scope link src 192.168.12.95
192.168.14.0/24 dev eth0.14 proto kernel scope link src 192.168.14.95
ericu@katz:~$
Esta é a tabela de roteamento em 192.168.14.130
[ericu@squid3 ~]$ ip route show
default via 192.168.14.12 dev ens18 proto static metric 1024
192.168.14.0/24 dev ens18 proto kernel scope link src 192.168.14.130
[ericu@squid3 ~]$
Para solucionar esse problema, criei uma VM na minha área de trabalho. Eu editei /etc/network/interfaces
como segue
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
auto eth0.14
iface eth0.14 inet static
address 192.168.14.14
netmask 255.255.255.0
A máquina obteve um endereço DHCP no eth0 de 192.168.12.172
. De 192.168.12.130
, ainda não consegui acessá-lo usando 192.168.12.172
. Na VM de teste, mudei /etc/iproute2/rt_tables
para se parecer com o seguinte
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
14 vlan14
Eu então executei os seguintes comandos
root@ubuntuvmdesktop:/home/ericu# ip route show
default via 192.168.12.2 dev eth0
192.168.12.0/24 dev eth0 proto kernel scope link src 192.168.12.172
192.168.14.0/24 dev eth0.14 proto kernel scope link src 192.168.14.14
root@ubuntuvmdesktop:/home/ericu# ip route del 192.168.14.0/24 dev eth0.14 src 192.168.14.14
root@ubuntuvmdesktop:/home/ericu# ip route show
default via 192.168.12.2 dev eth0
192.168.12.0/24 dev eth0 proto kernel scope link src 192.168.12.172
root@ubuntuvmdesktop:/home/ericu# ip route add 192.168.14.0/24 dev eth0.14 src 192.168.14.14 table vlan14
root@ubuntuvmdesktop:/home/ericu# ip route add default via 192.168.14.12 dev eth0.14 src 192.168.14.14 table vlan14
RTNETLINK answers: Network is unreachable
root@ubuntuvmdesktop:/home/ericu# ip rule add from 192.168.14.14 table vlan14
root@ubuntuvmdesktop:/home/ericu# ip route show table vlan14
192.168.14.0/24 dev eth0.14 scope link src 192.168.14.14
Depois de fazer isso, a VM com IP pode acessar a máquina usando 192.168.14.14
e 192.168.12.172
[ericu@squid3 ~]$ nc -v 192.168.12.172 22
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.12.172:22.
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
^C
[ericu@squid3 ~]$ nc -v 192.168.14.14 22
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.14.14:22.
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
^C
[ericu@squid3 ~]$
Portanto, esta é pelo menos uma maneira de corrigir o problema. No entanto, eu realmente não entendo o que isso faz. Eu entendo que eu adicionei uma tabela de roteamento separada chamada 'vlan14' para a máquina. Meu palpite é que usar ip rule add
de alguma forma direciona o tráfego destinado a 192.168.14.14
para sua própria tabela de roteamento. Isso isola o roteamento das duas sub-redes em sua própria tabela de roteamento? No entanto, todas as alterações de rota que fiz usando ip route
não persistem durante a reinicialização. Parece que preciso atualizar /etc/network/interfaces
para indicar, de alguma forma, que as rotas devem entrar nessa tabela de roteamento alternativa.
Alguém pode explicar como funciona a tabela de roteamento separada?
Alguém poderia explicar como alterar minha configuração para que as alterações feitas usando o comando ip
sejam persistentes nas reinicializações?