私のマシンには 2 つの仮想 TAP インターフェイス tap0 と tap1 があります。それぞれの IP は 10.0.0.1 と 10.0.0.2 です。それらは両方とも socat を使用して相互に接続されています。どちらもネットマスク 255.255.255.0 を持っています (したがって、同じサブネット上にあります)。この設定で、tap0 を介して 10.0.0.2 に ping を実行してみます (逆も同様です)。これは何らかの理由で機能しないようです。tcpdump は、tap0 から tap1 に到達する ARP パケットを示していますが、ARP 応答がないため、ICMP 要求も ICMP 応答もありません。TAP デバイスの代わりに TUN デバイスを使用すると、ARP 要求/応答サイクルがバイパスされますが、ICMP 要求は tap1 に表示され、ICMP 応答は返されません。
ip_forward の有効化 ( echo 1 > /proc/sys/net/ipv4/ip_forward ) やリバース パス フィルタリングの無効化 ( echo 0 > /proc/sys/net/ipv4/conf/tap0/rp_filter と echo ) など、いくつか試してみました。 0 > /proc/sys/net/ipv4/conf/tap1/rp_filter )。
私の問題を再現するコマンドは次のとおりです。
sudo socat TUN:10.0.0.1/24,tun-type=tap TUN:10.0.0.2/24,tun-type=tap
sudo ifconfig tap0 10.0.0.1 netmask 255.255.255.0
sudo ifconfig tap1 10.0.0.2 netmask 255.255.255.0
ping -Itap0 10.0.0.2
tcpdump -Itap0 -n
tcpdump -Itap1 -n