背景

首先介绍一下 Tailscale · Best VPN Service for Secure Networks
一款 VPN 软件, 底层使用的 wireguard
通过该款软件,可以完成
1、在内网的主机上,架设局域网,进行 点对点 的访问
2、利用子网路由,从而解决内网其他主机的访问

搭建非常简单,基于官网文档即可。但是过程中,发现 windows 到 mac 上访问不同。 虽然能够 ping 通,但是在 mac 上启动服务器后, 从 windows 上进行访问的时候,一直会显示 neterror 502 的问题

抓包确认

tailscale 等类似的软件一般都是以新建网卡的方式,或者叫新建 tunnel (隧道)的方式进行。

比如

|500

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 大小。

参考

windows 设置 mtu
网络基础:MTU 和 MSS
Wireshark 分析艺术
TCP 实战抓包