Linux VRF에서 루프백 주소를 할당하는 방법은 무엇입니까?

Linux VRF에서 루프백 주소를 할당하는 방법은 무엇입니까?

나는 리눅스를 만든다VRF그리고

ip link add vrf-blue type vrf table 10
ip link set dev vrf-blue up
ip link set dev eth2 master vrf-blue
ip ro add default via 192.168.3.202 table 10

그런 다음 해당 VRF(이 경우 쉘)에서 명령을 실행합니다. 외부 주소에서는 작동하지만 루프백 주소에서는 작동하지 않습니다.

ip vrf exec vrf-blue sh
# (in the new shell)
ping -c1 -W1 20.0.0.1   # Works
ping -c1 -W1 127.0.0.1  # Doesn't work

많은 프로그램에서는 루프백 주소가 127.0.0.0/8 및 ::1/128이라고 가정합니다. 지금까지 나는 "linux vrf loopback"을 검색하고 테이블 10에 로컬 경로 설정을 시도했지만 작동하도록 할 수 없었습니다.

Linux VRF에서 루프백 주소를 할당하는 방법은 무엇입니까?

# ip rule show
0:      from all lookup local
1000:   from all lookup [l3mdev-table]
32766:  from all lookup main
32767:  from all lookup default

ip 규칙 표시는 "l3mdev-table"보다 높은 우선순위 0의 "로컬" 테이블을 나열하므로 루프백은 VRF 전에 처리됩니다.

# tcpdump -i any icmp
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
07:47:15.923179 lo    In  IP localhost > localhost: ICMP echo request, id 27859, seq 1, length 64
07:47:15.923190 lo    In  IP localhost > localhost: ICMP echo reply, id 27859, seq 1, length 64

기본 VRF의 tcpdump는 icmp 요청/응답을 표시하지만 응답은 VRF에서 실행 중인 "ping" 프로그램에 도달하지 않습니다.

sysctl -w net.ipv4.raw_l3mdev_accept=1도움이 안돼

관련 정보