背景
首先介绍一下 Tailscale · Best VPN Service for Secure Networks
一款 VPN 软件, 底层使用的 wireguard 。
通过该款软件,可以完成
1、在内网的主机上,架设局域网,进行 点对点 的访问
2、利用子网路由,从而解决内网其他主机的访问
搭建非常简单,基于官网文档即可。但是过程中,发现 windows 到 mac 上访问不同。 虽然能够 ping 通,但是在 mac 上启动服务器后, 从 windows 上进行访问的时候,一直会显示 neterror 502 的问题
抓包确认
tailscale 等类似的软件一般都是以新建网卡的方式,或者叫新建 tunnel (隧道)的方式进行。
比如
wireshark 是可以对网卡进行监控的,所以选定对应的网卡, 进行抓包。
windows 上的抓包如下
4 0.819841 192.168.52.128 170.33.9.35 TCP 74 39958 → 11158 [SYN] Seq=0 Win=65232 Len=0 MSS=1359 SACK_PERM=1 TSval=2198523866 TSecr=0 WS=128
8 0.894724 170.33.9.35 192.168.52.128 TCP 58 11158 → 39958 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0 MSS=1460
9 0.894857 192.168.52.128 170.33.9.35 TCP 60 39958 → 11158 [ACK] Seq=1 Ack=1 Win=65232 Len=0
13 1.895277 192.168.52.128 170.33.9.35 TCP 70 [TCP Previous segment not captured] 39958 → 11158 [PSH, ACK] Seq=809438908 Ack=2685525536 Win=65232 Len=16
14 1.895300 170.33.9.35 192.168.52.128 TCP 54 [TCP Dup ACK 1] 11158 → 39958 [ACK] Seq=1 Ack=1 Win=64240 Len=0
19 2.895745 192.168.52.128 170.33.9.35 TCP 70 [TCP Retransmission] 39958 → 11158 [PSH, ACK] Seq=809438908 Ack=2685525535 Win=65232 Len=16
20 2.895759 170.33.9.35 192.168.52.128 TCP 54 [TCP Dup ACK 2] 11158 → 39958 [ACK] Seq=1 Ack=1 Win=64240 Len=0
25 3.895946 192.168.52.128 170.33.9.35 TCP 70 [TCP Retransmission] 39958 → 11158 [PSH, ACK] Seq=809438907 Ack=2685525535 Win=65232 Len=16
26 3.895967 170.33.9.35 192.168.52.128 TCP 54 [TCP Dup ACK 3] 11158 → 39958 [ACK] Seq=1 Ack=1 Win=64240 Len=0
30 4.896407 192.168.52.128 170.33.9.35 TCP 70 [TCP Retransmission] 39958 → 11158 [PSH, ACK] Seq=809438908 Ack=2685525536 Win=65232 Len=16
31 4.896427 170.33.9.35 192.168.52.128 TCP 54 [TCP Dup ACK 4] 11158 → 39958 [ACK] Seq=1 Ack=1 Win=64240 Len=0
35 5.820383 192.168.52.128 170.33.9.35 TCP 60 [TCP Retransmission] 39958 → 11158 [FIN, ACK] Seq=1 Ack=1 Win=65232 Len=0
36 5.820439 170.33.9.35 192.168.52.128 TCP 54 11158 → 39958 [ACK] Seq=1 Ack=2 Win=64239 Len=0
81 24.720406 170.33.9.35 192.168.52.128 TCP 54 11158 → 39958 [RST, ACK] Seq=1 Ack=2 Win=64239 Len=0
其中有一个错误 TCP Previous segment not Captured
基于这个回答, TCP previous segment not captured - Ask Wireshark 以及 [Connection Problems] [Hint: MTU] Reducing MTU for tunnel
我们大概可以推断出一定是 mac 发来的请求数据丢失。
所以只需要调整 mtu 大小即可。
Troubleshooting guide · Tailscale Docs 的官网也有相关的说明
结论
理论讲,只需要调整一方的 mtu 的大小即可。但是我尝试在 windows 上调整 mtu 大小。
实际无果。具体原因未知。只能调整 mac 上的 mtu 大小。