在这个问题的末尾添加了新的细节;我可能正在关注原因。
我有一个基于 UDP OpenVPN 的 VPN 设置tap模式(我需要,tap因为我需要 VPN 来传递多播数据包,这在tun网络中似乎是不可能的)与互联网上的少数客户端。我在 VPN 上经常遇到 TCP 连接冻结的情况。也就是说,我将建立一个 TCP 连接(例如一个 SSH 连接,但其他协议也有类似的问题),并且在会话期间的某个时刻,流量似乎将停止通过该 TCP 会话传输。
这似乎与发生大数据传输的点有关,例如我是否ls在 SSH 会话中执行命令,或者我是否cat是一个长日志文件。一些 Google 搜索在 Server Fault上找到了许多类似上一个这样的答案,表明可能的罪魁祸首是 MTU 问题:在高流量期间,VPN 试图发送数据包,这些数据包在两个管道之间的某处被丢弃VPN 端点。上面链接的答案建议使用以下 OpenVPN 配置设置来缓解问题:
fragment 1400
mssfix
Run Code Online (Sandbox Code Playgroud)
这应该将 VPN 上使用的 MTU 限制为 1400 字节,并修复 TCP 最大段大小以防止生成任何大于该值的数据包。这似乎稍微缓解了这个问题,但我仍然经常看到冻结。我尝试了许多大小作为fragment指令的参数:1200、1000、576,所有结果都相似。我想不出两端之间有什么奇怪的网络拓扑结构会引发这样的问题:VPN 服务器运行在直接连接到 Internet的pfSense机器上,而我的客户端也在另一个位置直接连接到 Internet。
另一个奇怪的难题:如果我运行该tracepath实用程序,那么这似乎可以解决问题。示例运行如下所示:
[~]$ tracepath -n 192.168.100.91
1: 192.168.100.90 0.039ms pmtu 1500
1: 192.168.100.91 40.823ms …Run Code Online (Sandbox Code Playgroud) 当使用client-to-client禁用的 TUN(第 3 层)OpenVPN 服务器时,我的客户端仍然可以相互通信。
根据文档,客户端到客户端的配置应该防止这种情况:
如果您希望连接客户端能够通过 VPN 相互联系,请取消注释客户端到客户端指令。默认情况下,客户端只能访问服务器。
为什么禁用此选项后客户端可以继续相互通信?
这是我的服务器配置:
port 443
proto tcp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh4096.pem
topology subnet
server 10.10.201.0 255.255.255.128
ifconfig-pool-persist ipp.txt
crl-verify /etc/openvpn/keys/crl.pem
push "route [omitted]"
push "dhcp-option DNS [omitted]"
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
cipher AES-256-CBC
tls-auth /etc/openvpn/keys/pfs.key 0
verb 4
Run Code Online (Sandbox Code Playgroud) WatchGuard 正式只有 Windows 和 Mac 的客户端。但我看到它在内部使用 openvpn。我无法从 Linux 连接到 WG。
有没有人真正做到这一点?如何?
我们在客户处安装了数十个嵌入式设备,所有这些设备都可以使用我们的 OpenVPN 服务。一般情况下这很好,但我们的一些客户有严重的路径 MTU 问题。我们对客户修复网络的影响是有限的,因此我们需要 OpenVPN 来处理它。简而言之,我的问题是:
我如何在每个客户端的基础上减轻某些客户端的低路径 MTU,即不使用全局设置来适应所有客户端的最坏情况
请注意,我们的最坏情况非常糟糕:路径 MTU 576,丢弃所有碎片,不对自身进行碎片化,不尊重 DF 位。你明白为什么我不想在全球范围内解决这个问题。
该OpenVPN的联机帮助提供了许多MTU的相关选项,最显着的--link-mtu, --tun-mtu, --fragment and --mssfix。但它也说
--link-mtu [...] 除非您知道自己在做什么,否则最好不要设置此参数。
--tun-mtu [...] 最好使用 --fragment 和/或 --mssfix 选项来处理 MTU 大小问题。
于是我开始尝试用--fragment和--mssfix,但很快就意识到,至少前者必须设置不仅客户端,但也服务器端。然后我查看了服务器端每个客户端的配置,--client-config-dir但它说
以下选项在特定于客户端的上下文中是合法的:--push、--push-reset、--iroute、--ifconfig-push 和 --config。
没有提到 MTU 选项!
所以这里是我更具体的问题:
link-mtu和tun-mtu气馁?这些选项有哪些潜在问题?请注意,我对低级 IP 标头处理非常满意。link-mtu tun-mtu fragment mssfix必须在服务器端镜像才能工作?link-mtu tun-mtu fragment mssfix可以用于client-config-dir?client-config-dir:是否有任何替代方案来对抗每个客户端的低路径 MTU?笔记:
我试图让我的客户端通过运行 OpenVPN 的 VPS 转发所有流量。如您所见,它将允许对域和原始 IP 地址进行 ping,但它不会允许通过 curl 产生的流量,并且 traceroute 不会产生任何结果。未连接到 VPN 时,流量正常工作。
所有信息都在这里:https : //pastebin.com/tGspNefn
谢谢你。
工作配置感谢以下解决方案:
服务器:
port <integer>
proto udp
dev tun
ca ca.crt
cert vpnserver.crt
key vpnserver.key # This file should be kept secret
dh dh4096.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway autolocal"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
Run Code Online (Sandbox Code Playgroud)
客户:
client
dev …Run Code Online (Sandbox Code Playgroud) 如果您redirect-gateway def1在 OpenVPN 配置文件中使用选项,服务器将在您的路由表上添加一个默认网关,我想知道为什么 OpenVPN 没有使用网络0.0.0.0掩码0.0.0.0作为默认网关而不是网络掩码128.0.0.0?
我正在 Windows 2012 服务器上配置 OpenVPN(版本 2.3.10)服务器,但无法使其正常工作。
服务器在路由器后面,我打开了 1194 端口并创建了一个规则来将此端口上的流量转发到服务器。
这是我尝试从客户端连接时在服务器上看到的日志:
Mon Mar 21 11:11:47 2016 XX.XX.XX.XX:57804 TLS: Initial packet from [AF_INET]XX.XX.XX.XX:57804, sid=fdf7a7ac 0264c7f3
Mon Mar 21 11:12:38 2016 XX.XX.XX.XX:55938 TLS: Initial packet from [AF_INET]XX.XX.XX.XX:55938, sid=1f242a3f e454a525
Mon Mar 21 11:12:48 2016 XX.XX.XX.XX:57804 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Mon Mar 21 11:12:48 2016 XX.XX.XX.XX:57804 TLS Error: TLS handshake failed
Mon Mar 21 11:12:48 2016 XX.XX.XX.XX:57804 SIGUSR1[soft,tls-error] received, client-instance restarting
Run Code Online (Sandbox Code Playgroud)
其中 XX.XX.XX.XX …
我有很多密钥要为我的客户端 VPN 服务器生成。每当我使用 easy-rsa 生成这样的密钥时:
./build-key client1
Run Code Online (Sandbox Code Playgroud)
有一些带有一系列问题的输出。这些问题都有在vars文件中定义的默认答案。
Generating a 1024 bit RSA private key
............................................++++++
.......................++++++
writing new private key to 'client1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value, …Run Code Online (Sandbox Code Playgroud) 我遇到了一个我无法处理的问题。当我通过 SSH 登录到 VPS 并尝试在该 VPS 上建立 VPN 连接时,VPS 和我的机器之间的 SSH 连接丢失了。我认为这是因为 VPN 设置更改了路由。如何防止?