TUN0 インターフェイスから IP パケットを読み取る単純なサーバーがあります。そして、このコードでは、ポート 80 で TCP リスニング ポートの動作をシミュレートしようとしているので、サーバーと呼びます。したがって、SYN 要求を受け取った場合は、SYN+ACK 応答で応答します。
コードの SYN+ACK パケットが無視されていることを繰り返し確認しており、SYN パケットが再送信され続けています。これはなぜですか?
私の SYN+ACK パケットは問題ないようです。他の誰かもそれをチェックしました。必要に応じて、完全なパケット キャプチャについては以下を参照してください。しかし、私のクライアントは、TCP SYN パケットに対するサーバー コードの SYN+ACK パケット応答を無視しています。
私はnetstatをチェックしました
$ netstat --interfaces
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eno1 1500 9524 0 0 0 9813 0 0 0 BMRU
lo 65536 2110 0 0 0 2110 0 0 0 LRU
tun0 1500 28 0 0 0
Linux ReverseのPathフィルタリングも無効にしました
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter ;
echo 0 > /proc/sys/net/ipv4/conf/tun0/rp_filter ;
しかし、私の netstat はドロップされたパケットを示していません。クライアントがサーバーの SYN+ACK パケットを単純に無視しているもう 1 つの理由は何でしょうか。そして、クライアントから SYN パケットの再送信を受け続けます。SYN+ACK パケットを拒否する Linux カーネルで実行された魔法のような作業があり、誰もそれを知りません。設定する必要iptableがありますか、最初はこれが必要だとは思いませんでしたが、他に何ができるでしょうか。
これは、初期 SYN および SYN+ACK の 16 進ダンプです。
0000 45 00 00 3c 27 20 40 00 40 06 7e 28 c0 a8 0a 14
0010 c0 a8 0a 0f b3 b0 00 50 51 26 ee f7 00 00 00 00
0020 a0 02 fa f0 c2 46 00 00 02 04 05 b4 04 02 08 0a
0030 68 c4 98 71 00 00 00 00 01 03 03 07
SYN+ACK
0000 45 00 00 28 00 64 40 00 40 06 a4 f8 c0 a8 0a 0f
0010 c0 a8 0a 14 00 50 b3 b0 00 01 00 00 51 26 ee f7
0020 50 12 fa f0 2b 4e 00 00
パケット キャプチャは次を示します。
3 7.708817335 192.168.10.20 → 192.168.10.15 TCP 60 48332 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=2667509633 TSecr=0 WS=128
4 7.708913705 192.168.10.15 → 192.168.10.20 TCP 40 80 → 48332 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0
5 8.736000043 192.168.10.20 → 192.168.10.15 TCP 60 [TCP Retransmission] 48332 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=2667510660 TSecr=0 WS=128
6 8.736098933 192.168.10.15 → 192.168.10.20 TCP 40 [TCP Retransmission] 80 → 48332 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0
7 10.751997741 192.168.10.20 → 192.168.10.15 TCP 60 [TCP Retransmission] 48332 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=2667512676 TSecr=0 WS=128
8 10.752078320 192.168.10.15 → 192.168.10.20 TCP 40 [TCP Retransmission] 80 → 48332 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0
9 14.847991184 192.168.10.20 → 192.168.10.15 TCP 60 [TCP Retransmission] 48332 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=2667516772 TSecr=0 WS=128
10 14.848068483 192.168.10.15 → 192.168.10.20 TCP 40 [TCP Retransmission] 80 → 48332 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0
11 23.040001163 192.168.10.20 → 192.168.10.15 TCP 60 [TCP Retransmission] 48332 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=2667524964 TSecr=0 WS=128
12 23.040081745 192.168.10.15 → 192.168.10.20 TCP 40 [TCP Retransmission] 80 → 48332 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0
13 39.167998575 192.168.10.20 → 192.168.10.15 TCP 60 [TCP Retransmission] 48332 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=2667541092 TSecr=0 WS=128
14 39.168081088 192.168.10.15 → 192.168.10.20 TCP 40 [TCP Retransmission] 80 → 48332 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0
そして、これは完全なパケット キャプチャです。
https://drive.google.com/file/d/1hF8FeQcZqGvAZzxHHRRtO2BOl8Y1Yymn/view?usp=sharing
カーネル バージョン: カーネル 5.13.0-22-generic