Package: linux-image-5.10.0-8-amd64

Version: 5.10.46-4

I have host device which is directly connected to debian router. On both sides 
there are interfaces enp0s9.
Host device have default route, next hop is router.

Router have three network interfaces:
enp0s3 - connected to WAN, no VRF (default)
enp0s9 - connected to end host, assigned to VRF vrf-routing
dummy0 - assigned to vrf-routing

When I ping from end host to dummy0 interface, everything works well.

Issue is when I ping network from end host which is not in vrf-routing table on 
router, for example 8.8.8.8 . Then routing is leaked from vrf-routing table and 
jump to default table. Packet is then routed to WAN via default table on router.
root@host:~# ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group 
default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP 
group default qlen 1000
inet 192.168.10.2/24 brd 192.168.10.255 scope global enp0s9
valid_lft forever preferred_lft forever
root@host:~# ip -4 r
default via 192.168.10.1 dev enp0s9
192.168.10.0/24 dev enp0s9 proto kernel scope link src 192.168.10.2
root@host:~# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode 
DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP 
mode DEFAULT group default qlen 1000
link/ether 08:00:27:b1:8f:b6 brd ff:ff:ff:ff:ff:ff

root@router:~# ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group 
default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP 
group default qlen 1000
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
valid_lft 85358sec preferred_lft 85358sec
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master 
vrf-routing state UP group default qlen 1000
inet 192.168.10.1/24 brd 192.168.10.255 scope global enp0s9
valid_lft forever preferred_lft forever
6: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue master 
vrf-routing state UNKNOWN group default qlen 1000
inet 192.168.255.255/32 scope global dummy0
valid_lft forever preferred_lft forever
root@router:~# ip -4 r
default via 10.0.2.2 dev enp0s3
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15
root@router:~# ip vrf
Name Table
-----------------------
vrf-routing 10

VRF routing works well:
root@host:~# ping 192.168.255.255
PING 192.168.255.255 (192.168.255.255) 56(84) bytes of data.
64 bytes from 192.168.255.255: icmp_seq=1 ttl=64 time=0.438 ms
64 bytes from 192.168.255.255: icmp_seq=2 ttl=64 time=0.537 ms
^C
--- 192.168.255.255 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1038ms
rtt min/avg/max/mdev = 0.438/0.487/0.537/0.049 ms

If I start ping on host to 8.8.8.8, then I see this packet leak from vrf 
vrf-routing and jump into default routing table:
root@router:~# tcpdump -i enp0s3
...
19:17:28.104547 IP 192.168.10.2 > dns.google: ICMP echo request, id 23874, seq 
5, length 64
...
19:17:29.123176 IP 192.168.10.2 > dns.google: ICMP echo request, id 23874, seq 
6, length 64
...

Hotfix for this is issue is add unreachable route with highest metric:
ip -4 route add vrf vrf-routing unreachable default metric 4278198272

Reply via email to