Em um host ubuntu eu tenho dois endereços IP idênticos configurados em duas interfaces escravizadas a dois vrfs diferentes do kernel. Aqui estão eles:
mikle@LabHost:~$ ip link show vrf VRF1401
7: enp3s0f0.1401@enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master VRF1401 state UP mode DEFAULT group default qlen 1000
link/ether c0:3f:d5:e9:76:c6 brd ff:ff:ff:ff:ff:ff
10: Lo1401: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue master VRF1401 state UNKNOWN mode DEFAULT group default qlen 1000
link/ether a6:45:5b:d6:bf:43 brd ff:ff:ff:ff:ff:ff
mikle@LabHost:~$ ip link show vrf VRF1402
8: enp3s0f0.1402@enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master VRF1402 state UP mode DEFAULT group default qlen 1000
link/ether c0:3f:d5:e9:76:c6 brd ff:ff:ff:ff:ff:ff
11: Lo1402: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue master VRF1402 state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 1a:7b:13:3a:5b:19 brd ff:ff:ff:ff:ff:ff
mikle@LabHost:~$ ip addr show vrf VRF1401
7: enp3s0f0.1401@enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master VRF1401 state UP group default qlen 1000
link/ether c0:3f:d5:e9:76:c6 brd ff:ff:ff:ff:ff:ff
inet 10.14.0.1/24 scope global enp3s0f0.1401
valid_lft forever preferred_lft forever
inet6 fe80::c23f:d5ff:fee9:76c6/64 scope link
valid_lft forever preferred_lft forever
10: Lo1401: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue master VRF1401 state UNKNOWN group default qlen 1000
link/ether a6:45:5b:d6:bf:43 brd ff:ff:ff:ff:ff:ff
inet 10.14.100.100/32 scope global Lo1401
valid_lft forever preferred_lft forever
inet6 fe80::a445:5bff:fed6:bf43/64 scope link
valid_lft forever preferred_lft forever
mikle@LabHost:~$ ip addr show vrf VRF1402
8: enp3s0f0.1402@enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master VRF1402 state UP group default qlen 1000
link/ether c0:3f:d5:e9:76:c6 brd ff:ff:ff:ff:ff:ff
inet 10.14.0.1/24 scope global enp3s0f0.1402
valid_lft forever preferred_lft forever
inet6 fe80::c23f:d5ff:fee9:76c6/64 scope link
valid_lft forever preferred_lft forever
11: Lo1402: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue master VRF1402 state UNKNOWN group default qlen 1000
link/ether 1a:7b:13:3a:5b:19 brd ff:ff:ff:ff:ff:ff
inet 10.14.100.100/32 scope global Lo1402
valid_lft forever preferred_lft forever
inet6 fe80::187b:13ff:fe3a:5b19/64 scope link
valid_lft forever preferred_lft forever
mikle@LabHost:~$ ip route show vrf VRF1401
10.14.0.0/24 dev enp3s0f0.1401 proto kernel scope link src 10.14.0.1
mikle@LabHost:~$ ip route show vrf VRF1402
default via 10.14.0.11 dev enp3s0f0.1402 proto 186 metric 20
10.14.0.0/24 dev enp3s0f0.1402 proto kernel scope link src 10.14.0.1
O Ubuntu é o LTS 16.04 com o utilitário kernel e ip atualizado %código% Vrfs estão funcionando, você pode ver a rota bgp do peer externo em vrf VRF1402.
Agora, gostaria de configurar dois túneis l2tpv3 não gerenciados distintos, obtendo cada um deles da interface específica. O utilitário "ip" que eu uso fornece ligação apenas para o endereço IP local, mas os endereços IP não são exclusivos na minha configuração. O comando "ip l2tp add tunnel" não fornece uma opção para ligar um túnel a um dispositivo, por isso não vejo como o túnel específico poderia ser configurado para usar o endereço IP local do segundo vrf, não o primeiro vrf, por exemplo.
Minha pergunta 1 : como o túnel ip lt2pv3 pode ser feito "vrf aware" ligando seu soquete ao dispositivo vrf para usar a tabela de roteamento associada ao dispositivo vrf?
2. Eu também tentei apenas criar um túnel, para depois escravizar a interface de sessão do túnel local para o vrf específico, mas o "ip l2tp add tunnel" falha:
mikle@LabHost:~$ ip -V
ip utility, iproute2-ss161212
mikle@LabHost:~$ dpkg -s iproute2
Package: iproute2
Version: 4.9.0-1ubuntu1
mikle@LabHost:~$ uname -r
4.9.51-040951-lowlatency
Parece que
mikle@LabHost:~$ sudo ip l2tp add tunnel tunnel_id 14011 peer_tunnel_id 1401 encap ip local 10.14.100.100 remote 10.14.0.11
RTNETLINK answers: Cannot assign requested address
mikle@LabHost:~$ sudo ip l2tp add tunnel tunnel_id 14011 peer_tunnel_id 1401 encap ip local 10.14.0.1 remote 10.14.0.11
RTNETLINK answers: Cannot assign requested address
tenta encontrar o endereço IP local na tabela de roteamento global e falha? (Chequei com a interface ip local no grt, funciona)
O utilitário ip precisa ser corrigido para suportar a vinculação de uma origem de túnel a uma interface vrf-ip específica? Ou é apenas o meu problema de configuração?
Tags kernel tunnel linux-networking l2tp