私はLinuxを作る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
役に立たない