当尝试将 Ubuntu Linux 服务器设置为 l2tp/IPSEC 服务器的客户端时,我注意到在尝试发送数据时存在不一致的情况。
隧道/VPN 正确建立连接/握手,并且从客户端我可以按预期 ping/ssh 到所有机器。
当我尝试使用 scp 将数据从客户端发送到远程机器时,我注意到了这个问题。
我可以毫无问题地复制/获取任何东西:
scp user@vpn:/tmp/test.file
但如果我尝试发送数据,并且要发送的文件大小> vpn最大传输单元(1280):
scp /tmp/test.file user@vpn:/tmp
我收到一个“数据包损坏“ 信息。
我没有成功,我尝试了这个:ethtool -K eth0 tx off
使用 tcpdump 我注意到所有传出的包无论大小都包含 DF 标志,由于某种原因,通过 ppp0 接口的包不会被碎片化。
我使用的配置是:
ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-mschap-v2
noccp
noauth
idle 1800
mtu 1280
mru 1280
defaultroute
usepeerdns
debug
lock
connect-delay 5000
我收到的一些日志:
pppd[26423]: sent [LCP EchoReq id=0x1 magic=0x4501dc87]
pppd[26423]: rcvd [LCP EchoRep id=0x1 magic=0xd6736575]
如果我发送的文件块大于 MTU:
pppd[12603]: Protocol-Reject for unsupported protocol 0xb8af
pppd[12603]: rcvd [LCP ProtRej id=0x8 ...]
解决此问题的方法是使用 rsync 并限制传出带宽:
rsync -vvv --bwlimit=16 -P -e "ssh -i ssh_key.pem" /tmp.test.file user@vpn:/tmp
在同一网络下运行 iOS / OS X 的其他客户端没有任何问题,都可以毫无问题地发送/获取数据,因此我并不怀疑 VPN 服务器存在问题。
有什么想法或可能的补丁可以解决这个问题吗?