TUN デバイスがパケットを受信できない

TUN デバイスがパケットを受信できない

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デバイスの間でパケットが多すぎるのはなぜですか?

ベストアンサー1

おすすめ記事