我创建了一个 TUN 设备(nat64)并创建了一条路由,以便所有需要的数据包都从 eth 设备转发到 TUN 设备。但是,我发现 TUN 设备未收到许多数据包。
解释一下长话短说,我正在尝试使用 TUN 设备来实现一个简单的 NAT64 应用程序来过滤所需的流量。 2001:abcd:1::1 是网关 IP。网关收到的所有发往 2001:abcd:1:ffff::/64 的 IPv6 数据包都需要转换为 IPv4。我编写了一个程序,它从 TUN 设备读取数据并执行从 IPv6 到 IPv4 的所有所需转换。
我为 2001:abcd:1:ffff::/64 创建了一条到“nat64”TUN 设备的路由。如果我尝试 ping6 或低速率流量,效果很好。当我尝试以更高的速率发送数据包时,许多数据包尚未到达 TUN 设备。在我以 200K/秒的速度传输的 4M UDP 数据包中,只有 2.9M 数据包被路由到 TUN 设备。
我从 ifconfig 中的统计数据以及从 TUN 设备读取()时使用计数器验证了这一点。还检查了 tcpdump 以验证所有数据包均已到达 eth0。使用ostinato工具发送UDP数据包。
下面是配置-
> $ip -6 route
> 2001:abcd:1:ffff::/64 dev nat64 metric 1024 mtu 1500 advmss 1440 hoplimit 0
>
> eth0 Link encap:Ethernet HWaddr 08:AC:A5:10:01:52 inet6 addr:
> 2001:abcd:1::1/128 Scope:Global inet6 addr: fe80::aac:a5ff:fe10:152/64
> Scope:Link UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 RX
> packets:182256365 errors:0 dropped:0 overruns:0 frame:0 TX
> packets:91927 errors:0 dropped:0 overruns:0 carrier:0 collisions:0
> txqueuelen:0 RX bytes:8762429793 (8.1 GiB) TX bytes:10618282 (10.1
> MiB)
>
> nat64 Link encap:UNSPEC HWaddr
> 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 UP POINTOPOINT RUNNING
> NOARP MULTICAST MTU:1500 Metric:1 RX packets:49370386 errors:0
> dropped:0 overruns:0 frame:0 TX packets:49379475 errors:0 dropped:31
> overruns:12933189 carrier:0 collisions:0 txqueuelen:500 RX
> bytes:1394031492 (1.2 GiB) TX bytes:2378651480 (2.2 GiB)
>
> $tcpdump -ni nat64 > /dev/null
> tcpdump: WARNING: arptype 65534 not
> supported by libpcap - falling back to cooked socket tcpdump: WARNING:
> nat64: no IPv4 address assigned tcpdump: verbose output suppressed,
> use -v or -vv for full protocol decode listening on nat64, link-type
> LINUX_SLL (Linux cooked), capture size 65535 bytes ^C2961568 packets
> captured 2961568 packets received by filter 0 packets dropped by
> kernel
>
> $tcpdump -ni eth0 > /dev/null
> tcpdump: WARNING: eth0: no IPv4 address
> assigned tcpdump: verbose output suppressed, use -v or -vv for full
> protocol decode listening on eth0, link-type EN10MB (Ethernet),
> capture size 65535 bytes ^C4000482 packets captured 4000482 packets
> received by filter 0 packets dropped by kernel
eth0 和 TUN 设备之间丢失这么多数据包的原因可能是什么?