我有一个 OpenVPN 服务器,带有Debian 8
和OpenVPN 2.3.14 x86_64-pc-linux-gnu
。今天我发现数据包丢失了。我的服务器位于 TCP 端口 443 上。
Ping statistics for 144.76.41.103:
Packets: Sent = 1135, Received = 1121, Lost = 14 (1% loss),
Approximate round trip times in milli-seconds:
Minimum = 29ms, Maximum = 961ms, Average = 51ms
其他数据:
Ping statistics for 144.76.41.103:
Packets: Sent = 1135, Received = 1121, Lost = 70 (5% loss),
Approximate round trip times in milli-seconds:
Minimum = 29ms, Maximum = 961ms, Average = 51ms
服务器配置:
port 443
float
proto tcp
dev tun2
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/1.crt
key /etc/openvpn/keys/1.key
dh /etc/openvpn/keys/dh2048.pem
tls-auth /etc/openvpn/keys/ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
script-security 3
auth-user-pass-verify "/etc/openvpn/auth.sh" via-env
keepalive 20 100
cipher BF-CBC
max-clients 100
persist-key
persist-tun
username-as-common-name
log logs/443tcp.log
log-append logs/443app.log
status status/443tcp_status.log 60
verb 2
mute 15
inactive 1200
comp-lzo
reneg-sec 86400
up /etc/openvpn/up.sh
因此,我的应用程序、SSH 控制台以及在线游戏经常会出现延迟(冻结一秒钟)。
知道是什么原因造成的吗?
答案1
您需要为 VPN 链接设置正确的 MTU。您可以使用ping
命令确定该值。使用以下命令从客户端开始 ping 服务器
ping -M do -s 1500 -c 1 10.8.0.1
它可能会说ping: local error: Message too long, mtu=1500
每次将 1500 的值减少 10,直到 ping 成功。一旦 ping 成功,使用的值就是您应该使用的 MTU。OpenVPN 需要设置一个称为 MSS 的值。MSS 是 MTU 减 40 的值。
例如,如果您的 MTU 为 1460,则您的 MSS 为 1420
MSS = MTU - 40
MSS = 1460 - 40
MSS = 1420
要设置 OpenVPN 的 MSS,请添加以下服务器配置行(用适当的值替换 1420)。
mssfix 1420
您还可以使用以下配置指令来启用 MSS 自动发现:
tun-mtu 1460
mtu-disc yes