На хосте ubuntu у меня есть два идентичных IP-адреса, настроенных на двух интерфейсах, порабощенных двумя разными vrfs ядра. Они здесь:
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
Ubuntu - это LTS 16.04 с обновленным ядром и утилитой ip
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
Vrfs работают, вы можете увидеть маршрут bgp от внешнего пира в vrf VRF1402.
Теперь я хотел бы настроить два отдельных неуправляемых туннеля l2tpv3, каждый из которых будет получать из определенного интерфейса. Утилита "ip", которую я использую, обеспечивает привязку только к локальному IP-адресу, но IP-адреса не уникальны в моей настройке. Команда «ip l2tp add tunnel» не предоставляет возможности привязать туннель к устройству, поэтому я не вижу, как можно настроить конкретный туннель для использования, например, локального IP-адреса второго vrf, а не первого vrf.
Мой вопрос # 1: как можно сделать туннель ip lt2pv3 "осведомленным о vrf", привязав его сокет к устройству vrf, чтобы использовать таблицу маршрутизации, связанную с этим устройством vrf?
2. Я также пытался просто создать туннель, после этого собираясь поработить интерфейс локального туннельного сеанса для конкретного vrf, но "ip l2tp add tunnel" не работает:
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
Похоже на то ip l2tp add tunnel
пытается найти локальный IP-адрес в глобальной таблице маршрутизации и терпит неудачу? (Я проверил с локальным ip-интерфейсом в grt, он работает)
Нужно ли исправлять утилиту ip для поддержки привязки источника туннеля к определенному интерфейсу vrf-ip? Или это просто моя проблема с настройкой?