virtualbox 的 NAT 网络上的 udp 打洞失败

virtualbox 的 NAT 网络上的 udp 打洞失败

我正在用virutalbox的NAT网络测试strongswan的打洞功能,但是发生了错误:

[sudo] password for bluven: 
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
10:02:55.430425 enp43s0 B   ARP, Request who-has 10.40.10.180 tell 10.40.10.168, length 46
10:02:55.430446 enp43s0 Out ARP, Reply 10.40.10.180 is-at c0:25:a5:3a:22:86, length 28
10:02:55.431092 enp43s0 In  IP 10.40.10.168.47648 > 10.40.10.180.48475: UDP, length 88
10:02:55.431147 enp43s0 Out IP 10.40.10.180 > 10.40.10.168: ICMP 10.40.10.180 udp port 48475 unreachable, length 124
10:02:55.433350 enp43s0 Out IP 10.40.10.180.33182 > 10.40.10.168.32768: UDP, length 88
10:02:55.435262 enp43s0 In  IP 10.40.10.168 > 10.40.10.180: ICMP 10.40.10.168 udp port 32768 unreachable, length 124
10:02:55.455493 enp43s0 In  IP 10.40.10.168.47648 > 10.40.10.180.48475: UDP, length 88
10:02:55.455494 enp43s0 In  IP 10.40.10.168.47680 > 10.40.10.180.48475: UDP, length 88
10:02:55.455557 enp43s0 Out IP 10.40.10.180 > 10.40.10.168: ICMP 10.40.10.180 udp port 48475 unreachable, length 124
10:02:55.455575 enp43s0 Out IP 10.40.10.180 > 10.40.10.168: ICMP 10.40.10.180 udp port 48475 unreachable, length 124
10:02:55.462016 enp43s0 Out IP 10.40.10.180.33182 > 10.40.10.168.32768: UDP, length 88
10:02:55.462293 enp43s0 Out IP 10.40.10.180.53372 > 10.40.10.168.32768: UDP, length 88
10:02:55.463936 enp43s0 In  IP 10.40.10.168 > 10.40.10.180: ICMP 10.40.10.168 udp port 32768 unreachable, length 124
10:02:55.466452 enp43s0 In  IP 10.40.10.168 > 10.40.10.180: ICMP 10.40.10.168 udp port 32768 unreachable, length 124
10:02:55.481386 enp43s0 In  IP 10.40.10.168.47648 > 10.40.10.180.48475: UDP, length 88
10:02:55.481387 enp43s0 In  IP 10.40.10.168.47680 > 10.40.10.180.48475: UDP, length 88
10:02:55.481432 enp43s0 Out IP 10.40.10.180 > 10.40.10.168: ICMP 10.40.10.180 udp port 48475 unreachable, length 124
10:02:55.481442 enp43s0 Out IP 10.40.10.180 > 10.40.10.168: ICMP 10.40.10.180 udp port 48475 unreachable, length 124
10:02:55.490814 enp43s0 Out IP 10.40.10.180.33182 > 10.40.10.168.32768: UDP, length 88
10:02:55.490824 enp43s0 Out IP 10.40.10.180.53372 > 10.40.10.168.32768: UDP, length 88
10:02:55.492815 enp43s0 In  IP 10.40.10.168 > 10.40.10.180: ICMP 10.40.10.168 udp port 32768 unreachable, length 124
10:02:55.493639 enp43s0 In  IP 10.40.10.168 > 10.40.10.180: ICMP 10.40.10.168 udp port 32768 unreachable, length 124
10:02:55.507903 enp43s0 In  IP 10.40.10.168.47680 > 10.40.10.180.48475: UDP, length 88
10:02:55.507949 enp43s0 Out IP 10.40.10.180 > 10.40.10.168: ICMP 10.40.10.180 udp port 48475 unreachable, length 124
10:02:55.516542 enp43s0 Out IP 10.40.10.180.53372 > 10.40.10.168.32768: UDP, length 88
10:02:55.519175 enp43s0 In  IP 10.40.10.168 > 10.40.10.180: ICMP 10.40.10.168 udp port 32768 unreachable, length 124
10:02:55.526381 enp43s0 In  IP 10.40.10.168.47648 > 10.40.10.180.48475: UDP, length 88
10:02:55.538668 enp43s0 Out IP 10.40.10.180.33182 > 10.40.10.168.32768: UDP, length 88
10:02:55.551839 enp43s0 In  IP 10.40.10.168.47680 > 10.40.10.180.48475: UDP, length 88

但我检查发现这个端口48475是开放的:

sudo ss -upn  
Recv-Q                      Send-Q                                             Local Address:Port                                              Peer Address:Port                      Process                      
0                           0                                                   10.40.10.180:48475                                             10.22.53.102:4500                       users:(("VBoxNetNAT",pid=738900,fd=26))

这是怎么发生的?

答案1

显示UDP套接字已连接,即:connect(2)对它使用了系统调用。手册connect(2)告诉:

如果插座sockfd是类型SOCK_DGRAM,那么地址
数据报默认发送到的地址,并且
接收数据报的唯一地址。

UDP 套接字将忽略任何不是来自远程地址 10.22.53.102 端口 4500 的 UDP 数据报:因此,这些数据报会像往常一样被操作系统拒绝并出现 ICMP 错误。

因此,端口 48475 虽然在技术上是开放的(存在套接字),但不会向当前对等方以外的任何其他端口开放,就像从某个随机端口到端口 80 或 443 上的 Web 服务器的任何客户端 TCP 连接也不被视为开放。


注意:如果您想显示状态(ESTAB即处于连接状态),您可以运行此命令,-a可以显示所有状态,从而在前面添加状态:

ss -aunp state established

或者

ss -aunp sport 48475
ss -aunp dport 4500

等等。默认情况下仅显示连接状态,因此不添加前缀ESTAB

当没有使用选项时 ss 显示打开的列表不听 套接字(例如 TCP/UNIX/UDP) 已建立的连接

具有

相关内容