私は luasocket を使用する udp クライアントを持っています。
s=socket.udp()
s:setsockname("*",0)
s:setpeername(socket.dns.toip("example.com"),64299)
s:settimeout(0)
s:send(...)
s:settimeout(10)
msg,err=s:receive()
s:settimeout(0)
print(msg,err)
サーバーのデバッグ出力 (リモート ホストへの ssh) ですべてが正常に表示されているのに、クライアントで「タイムアウト」エラーが発生します。
クライアント側の Wireshark ですべてを検査すると、クライアントが送信したパケット、サーバーからの応答パケット (正しいポートとすべて)、および応答としてクライアント ホストからサーバーに送信された ICMP "ポートに到達できない" パケットが表示されます。それは(正しい)応答です。
そこで何が起こっているのですか?「すべてを受け入れる」ようにiptablesをリセットするなど、すべてを試しましたが、クライアントはまだ「ポートに到達できません」を送信します。
関連するパケットは次のとおりです。
From To Len Description
192.168.2.100 95.143.172.171 UDP 61 Source port: 45025 Destination port: 64299
000e8f11e7000025229835a908004500002f4008400040112b6fc0a802645f8facabafe1fb2b001b28d794d2000ec8360100aa81a477616e74a3756964
95.143.172.171 192.168.2.100 UDP 60 Source port: 64299 Destination port: 45025
0025229835a9000e8f11e70008004500002b000040003911727b5f8facabc0a80264fb2bafe100172e8d94d2000e0ea10100a681a3756964ff000000
192.168.2.100 95.143.172.171 ICMP 85 Destination unreachable (Port unreachable)
000e8f11e7000025229835a9080045c00047061d00004001a492c0a802645f8facab0303cc6c000000004500002b000040003911727b5f8facabc0a80264fb2bafe100172e8d94d2000e0ea10100a681a3756964ff
重要な場合に備えて、ファイアウォール (これが発生している間、iptables は INPUT パケット カウンターをインクリメントしないため、私はそうは思いません):
$ sudo iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --sport 64299 -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i eth0 -p tcp -m tcp --dport 10001:30000 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT