VRF no Linux usando namespaces de rede

3

Meu objetivo final é implementar o Virtual Routing and Forwarding (VRF) no Linux. O método que parece ser mais amplamente aceito é configurar espaços de nome de rede diferentes (um para cada tabela de roteamento separada) e executar um daemon Quagga ou BIRD para cada tabela de espaço de nomes / roteamento. Eu não sou casada com esse método, então se alguém tiver outras sugestões, por favor me avise.

A máquina em questão está executando o Debian 7 (wheezy) dentro da estação de trabalho VMware 12. Ele sempre foi um roteador e foi roteado com sucesso por um tempo antes de iniciar essa reconfiguração, portanto sei que a configuração geral de roteamento é boa.

O problema imediato é que não consigo me comunicar através do namespace da minha rede. Ou seja, veth1 (que está no meu namespace como abaixo) pode pingar somente veth0 e nada mais. Não há comunicação de rede entre veth1 e as redes abaixo dela - nem mesmo os ARPs. Se eu não soubesse melhor, eu diria que alguém puxou o cabo do switch (mas é meio difícil fazer isso no ambiente virtual). E sim, verifiquei se as vmnets estavam configuradas corretamente. O roteador funciona quando restaurado para sua configuração antiga. Apenas não funciona nesta nova configuração.

Alguém tem alguma idéia de como se comunicar com o veth1? Ou até mesmo um método totalmente diferente para fazer o VRF funcionar no Linux? Agradecemos antecipadamente.

Eu configurei a nova configuração da seguinte forma:

adicione namespace

ip netns add nsx

adicione interfaces virtuais

ip link add veth0 type veth peer name veth1

crie uma ponte

ip link add name vbr0 type bridge

adicione eth1 AND veth1 à ponte

ip link set dev eth1 master vbr0
ip link set dev veth1 master vbr0

Atribuir veth1 ao namespace

ip link set veth1 netns nsx

configure os IPs do veth

ip addr add 10.0.2.10/24 dev vbr0
ip addr add 10.0.2.1/24 dev veth0
ip netns exec nsx ip addr add 10.0.2.2/24 dev veth1

Traga as i / f's para cima

ip link set dev vbr0 up
ip link set dev veth0 up
ip netns exec nsx ip link set dev veth1 up

atribua veth2 a sua própria tabela de roteamento

ip netns exec nsx ip rule add dev veth1 table 1

Defina a rota padrão para a vtable

ip netns exec nsx ip route add default via 10.0.2.1 dev veth1

Você pode ver na saída do iptables-save que tudo está configurado para ACCEPT ou FORWARD conforme apropriado

saída do ip addr show:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:10:e0:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.26.5/24 brd 192.168.26.255 scope global eth0
    inet 192.168.26.0/24 brd 192.168.26.255 scope global secondary eth0
    inet6 fe80::20c:29ff:fe10:e001/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vbr0 state UP qlen 1000
    link/ether 00:0c:29:10:e0:ed brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/24 brd 10.0.0.255 scope global eth1
    inet6 fe80::20c:29ff:fe10:e0ed/64 scope link
       valid_lft forever preferred_lft forever
47: veth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether ce:63:69:82:73:35 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.1/24 scope global veth0
    inet6 fe80::cc63:69ff:fe82:7335/64 scope link tentative
       valid_lft forever preferred_lft forever
48: vbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 00:0c:29:10:e0:ed brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.10/24 scope global vbr0
    inet6 fe80::20c:29ff:fe10:e0ed/64 scope link tentative
       valid_lft forever preferred_lft forever

saída do programa ip route:

 default via 192.168.26.2 dev eth0
    10.0.0.0/24 dev eth1  proto kernel  scope link  src 10.0.0.1
    10.0.2.0/24 dev vbr0  proto kernel  scope link  src 10.0.2.10
    10.0.2.0/24 dev veth0  proto kernel  scope link  src 10.0.2.1
    192.168.26.0/24 dev eth0  proto kernel  scope link  src 192.168.26.5

saída do ip netns exec nsx ip addr show:

    45: lo: <LOOPBACK> mtu 16436 qdisc noop state DOWN
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    46: veth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether b6:27:40:06:c2:de brd ff:ff:ff:ff:ff:ff
        inet 10.0.2.2/24 scope global veth1
        inet6 fe80::b427:40ff:fe06:c2de/64 scope link tentative
           valid_lft forever preferred_lft forever

saída de ip netns exec nsx ip route show

 default via 10.0.2.1 dev veth1
    10.0.2.0/24 dev veth1  proto kernel  scope link  src 10.0.2.2

saída do iptables-save

# Generated by iptables-save v1.4.14 on Thu Apr 14 18:19:19 2016
*nat
:PREROUTING ACCEPT [36:3588]
:INPUT ACCEPT [32:2540]
:OUTPUT ACCEPT [51:3744]
:POSTROUTING ACCEPT [55:4792]
COMMIT
# Completed on Thu Apr 14 18:19:19 2016
# Generated by iptables-save v1.4.14 on Thu Apr 14 18:19:19 2016
*filter
:INPUT ACCEPT [3319:373389]
:FORWARD ACCEPT [8:2004]
:OUTPUT ACCEPT [3558:428447]
COMMIT
# Completed on Thu Apr 14 18:19:19 2016
    
por user349251 15.04.2016 / 00:42

1 resposta

1

Iniciando com a versão do kernel 4.3 O Linux possui uma implementação VRF. Confira: link .

    
por 12.08.2016 / 02:00