背景

背景

背景

我有一个在 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 上的 SSH 连接使用 Wireshark 捕获“ls -la”

我已经通过 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。

相关内容