背景
我有一个在 draytek 调制解调器上运行的 VPN 服务器。
如果我通过 Android 手机的调制解调器连接,一切都正常。
而如果我使用 pptp 从 NetworkManager 连接,它会起作用:
- 连接正常
- 我可以使用 ssh 连接到 pptp 链路另一端的机器
- 我可以 ls 并得到 OK 响应
- 然而,当我“ls -la”(产生更大的响应)时,连接冻结
- 此外,任何包含页面上图像的 http 会话也会冻结
诊断
与 MTU 混淆
我已设法通过调整 MTU 使其正常工作在远端, IE:
- 连接 VPN - 确定
- 使用 ifconfig 检查本地端的 MTU(为 1400)
- 通过 ssh 连接到 pptp 链接另一端的机器
- 使用 ifconfig 检查远端的 MTU(它是 1500)
- 调整 MTU远端到 1300(ifconfig eth0 mtu 1300)
- ls -la (以及其他一切)工作正常
不幸的是,我无法调整通过 VPN 连接到的任何其他机器的 MTU(例如谷歌)。
Wireshark
我也使用过 wireshark 来捕获交易,看起来在连接冻结之前做的最后一件事就是从客户端向另一端发送 [TCP 窗口更新](在本例中为... 192.168.11.200)。
平
我已经通过 VPN 登录到远程机器。
这台机器在 ppp0 上的 MTU 是 1400(由网络管理器中的 VPN 链接建立设置)。远程机器在 eth0 上的 MTU 是 1500。
然后我已 ping这台机器从远端如下,发现任何大于1336的ping数据包都会被丢弃:
steve@remote:~$ ping -M do -c 1 -s 1336 192.168.11.105
PING 192.168.11.105 (192.168.11.105) 1336(1364) bytes of data.
1344 bytes from 192.168.11.105: icmp_seq=1 ttl=63 time=72.1 ms
--- 192.168.11.105 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 72.131/72.131/72.131/0.000 ms
steve@remote:~$ ping -M do -c 1 -s 1337 192.168.11.105
PING 192.168.11.105 (192.168.11.105) 1337(1365) bytes of data.
--- 192.168.11.105 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
IP 路由
请注意,它是否有用,但这里是“ip route”的输出,显示连接的默认状态......这里有什么问题吗?
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 1c:4d:70:db:5f:ba brd ff:ff:ff:ff:ff:ff
13: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1400 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 3
帮助 ...
我怀疑这与数据包大小协商有关,因为它不起作用 - 我很确定它不是调制解调器配置的一部分,因为所有这些都可以在 Android 客户端上正常工作,所以一切都指向 Ubuntu 客户端。
问:有人有什么指点或想法吗?
问:有人知道 Ubuntu 中哪个程序/部分负责管理和协商单个 TCP 连接的 TCP 数据包大小吗?
问:有人知道为什么一端的 MTU 为 1400,另一端的 MTU 为 1500,那么允许的最大数据包大小就是 1336 - 1336 有什么特殊之处?
问:我原本以为 ping 响应中会有“需要分片”的消息。有谁知道是什么原因导致此消息无法显示?
pptp 版本:1.9.0 或 1.10.0
史蒂夫
答案1
我在 pppOe 连接上使用 VPN 客户端时也遇到过类似的问题。pppOe 连接具有正确的 MTU 1492 和 VPN 服务器 1500。当 pppOe 上的 MTU 设置不正确时,连接已建立,但无法进行流式传输。如果客户端的 MTU 正确,我便能够通过 VPN 连接流式传输。
您只需在客户端互联网连接上设置正确的 MTU。