Eu criei um dispositivo TUN (nat64) e criei uma rota para que todos os pacotes necessários sejam encaminhados para o dispositivo TUN de um dispositivo eth. Mas vejo que muitos pacotes não são recebidos pelo dispositivo TUN.
Ao explicar a longa história, estou tentando implementar um aplicativo NAT64 simples usando o dispositivo TUN para filtrar o tráfego necessário. 2001: abcd: 1 :: 1 é o IP do gateway. Todos os pacotes IPv6 recebidos pelo gateway e destinados a 2001: abcd: 1: ffff :: / 64 precisam ser convertidos para IPv4. Eu escrevi um programa que lê o dispositivo TUN e faz todas as traduções necessárias do IPv6 para o IPv4.
Eu criei uma rota para o dispositivo TUN 'nat64' para 2001: abcd: 1: ffff :: / 64. Ele funciona bem se eu tentar o ping6 ou o tráfego em taxas baixas. Quando tentei enviar pacotes a uma taxa mais alta, muitos pacotes não atingiram o dispositivo TUN. Dos pacotes UDP 4M que transmiti a 200K / seg, apenas 2,9 milhões de pacotes foram encaminhados para o dispositivo TUN.
Eu verifiquei isso a partir das estatísticas no ifconfig e também usando contadores durante a leitura () do dispositivo TUN. Também verifiquei o tcpdump para verificar se todos os pacotes atingiram a eth0. Usou a ferramenta ostinato para enviar os pacotes UDP.
Abaixo está a configuração -
> $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
Qual poderia ser a razão de tantos pacotes ausentes entre o dispositivo eth0 e o TUN?
Tags networking tcpdump tunneling route