奇怪的 OpenVPN 行为 - 一分钟后断开连接

奇怪的 OpenVPN 行为 - 一分钟后断开连接

我正在使用 OpenVPN 连接两个私有网络,现在我遇到了一个无法解决的问题。服务器使用简单的 UDP 配置和静态密钥进行连接。我已经检查了 iptables 的限制或其他内容,但没有任何内容,而且两个服务器都直接在公共 IP 上 - 中间没有路由器/NAT 或其他东西。服务器 A 正在监听,服务器 B 是客户端。当 VPN 启动时,客户端相互连接,一切都运行正常,但仅限于第一分钟。然后它停止工作。从服务器 A 到服务器 B 的隧道连接(从一个端点 ping 到另一个端点)仍然有效(可以 ping),但从另一端,它不起作用。一分钟后,看门狗意识到,服务器 B 上的连接已断开并重新启动隧道。然后它工作了一分钟,并永远重复这种情况......

两台服务器都是 Ubuntu 64位:

服务器 A:

root@server:/etc/openvpn# uname -an
Linux 服务器 2.6.38-13-virtual #52~lucid1-Ubuntu SMP 星期四 11 月 10 日 19:46:44 UTC 2011 x86_64 GNU/Linux
root @服务器:/etc/openvpn# openvpn --version
OpenVPN 2.1.0 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] 于 2010 年 7 月 20 日构建
最初由 James Yonan 开发
版权所有 (C) 2002-2009 OpenVPN Technologies, Inc.

服务器B:

root@gw2:~# uname -an
Linux gw2 3.2.0-23-generic #36-Ubuntu SMP 2012 年 4 月 10 日星期二 20:39:51 UTC x86_64 x86_64 x86_64 GNU/Linux
root@gw2:~# openvpn --version
OpenVPN 2.2.1 x86_64-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] [MH] [PF_INET6] [IPv6 payload 20110424-2 (2.2RC2)] 构建于 2013 年 2 月 27 日
最初由 James Yonan 开发
版权所有 (C) 2002-2010 OpenVPN Technologies, Inc.

  $ ./configure --build=x86_64-linux-gnu --prefix=/usr --includedir=${prefix}/include --mandir=${prefix}/share/man --infodir=${prefix}/share/info --sysconfdir=/etc --localstatedir=/var --libexecdir=${prefix}/lib/openvpn --disable-maintainer-mode --disable-dependency-tracking CFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security CPPFLAGS=-D_FORTIFY_SOURCE=2 CXXFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security FFLAGS=-g -O2 LDFLAGS=-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now --enable-password-save --host=x86_64-linux-gnu --build=x86_64-linux-gnu --prefix=/usr --mandir=${prefix}/share/man --with-ifconfig-path=/sbin/ifconfig --with-route-path=/sbin/route

编译时定义:ENABLE_CLIENT_SERVER ENABLE_DEBUG ENABLE_EUREPHIA ENABLE_FRAGMENT ENABLE_HTTP_PROXY ENABLE_MANAGEMENT ENABLE_MULTIHOME ENABLE_PASSWORD_SAVE ENABLE_PORT_SHARE ENABLE_SOCKS USE_CRYPTO USE_LIBDL USE_LZO USE_PF_INET6 USE_PKCS11 USE_SSL

服务器 A ovpn 配置:

守护进程 vpn-conn
写入 pid /var/run/openvpn-vpn.pid
开发tun3
原始 UDP
端口 1859
康普
保持活动 10 30
坚持-tun
持久密钥
如果配置 10.9.0.1 10.9.0.2
路由 10.10.10.0 255.255.255.0
秘密 my-key.key
日志附加vpn.log
动词 5

服务器B:

守护进程 VPN
写入 pid /var/run/openvpn-vpn.pid
远程 4.3.2.1
开发tun0
原始 UDP
端口 1859
康普
保持活动 10 60
ping 定时器 rem
坚持-tun
持久密钥
如果配置 10.9.0.2 10.9.0.1
路由 192.168.0.0 255.255.252.0
秘密 my-key.key
日志附加vpn.log
mtu 测试
动词 5

我做了一些研究,在客户端和服务器配置中添加/删除“ping-timer-rem”、“mtu-test”和“float”,但问题仍然存在。

服务器 A 仍然将奇怪的事情记录到日志中(我认为,这可能是问题的根源,但我不知道如何解决它。两台服务器上的时间相同):

2013 年 9 月 4 日星期三 10:25:44 us=125832 身份验证/解密数据包错误:数据包 ID 错误(可能是重放):[#100 / 时间 = (1378283056) 2013 年 9 月 4 日星期三 10:24:16] - 请参阅手册页中 --no-replay 和 --replay-window 条目以获取更多信息,或者使用 --mute-replay-warnings 消除此警告

服务器 A 上的另一个奇怪之处是,服​​务器 B 似乎从两个套接字进行连接!我检查了服务器 B,只有一个 openvpn 实例,没有其他实例。当我终止它时,来自两个套接字的连接探测都结束了。

服务器A日志详细信息:

2013 年 9 月 4 日星期三 09:56:12 us=544282 与 [AF_INET]1.2.3.4:1859 发起对等连接
2013 年 9 月 4 日星期三 09:57:06 us=661505 与 [AF_INET]1.2.3.4:1194 发起对等连接

服务器 B 详细信息:

2013 年 9 月 4 日星期三 10:28:16 us=98524 SIGUSR1[soft,ping-restart] 已接收,进程正在重新启动
2013 年 9 月 4 日星期三 10:28:16 us=98562 重新启动暂停,2 秒
2013 年 9 月 4 日星期三 10:28:18 us=98688 注意:当前 --script-security 设置可能允许此配置调用用户定义的脚本
2013 年 9 月 4 日星期三 10:28:18 us=98871 重新使用预共享静态密钥
2013 年 9 月 4 日星期三 10:28:18 us=98905 LZO 压缩已初始化
2013 年 9 月 4 日星期三 10:28:18 us=98981 套接字缓冲区:R=[229376->131072] S=[229376->131072]
2013 年 9 月 4 日星期三 10:28:18 us=99043 保留先前的 TUN/TAP 实例:tun0
2013 年 9 月 4 日星期三 10:28:18 us=99075 数据通道 MTU 参数 [ L:1545 D:1450 EF:45 EB:135 ET:0 EL:0 AF:3/1 ]
2013 年 9 月 4 日,星期三 10:28:18 us=99144 本地选项字符串:'V4、dev-type tun、link-mtu 1545、tun-mtu 1500、proto UDPv4、ifconfig 10.9.0.1 10.9.0.2、comp-lzo、cipher BF-CBC、auth SHA1、keysize 128、secret'
2013 年 9 月 4 日,星期三 10:28:18 us=99167 预期远程选项字符串:'V4、dev-type tun、link-mtu 1545、tun-mtu 1500、proto UDPv4、ifconfig 10.9.0.2 10.9.0.1、comp-lzo、cipher BF-CBC、auth SHA1、keysize 128、secret'
2013 年 9 月 4 日星期三 10:28:18 us=99215 本地选项哈希(VER=V4):'184f07f3'
2013 年 9 月 4 日星期三 10:28:18 us=99255 预期远程选项哈希 (VER=V4):“de9a476a”
2013 年 9 月 4 日星期三 10:28:18 us=99291 UDPv4 本地链接(绑定):[undef]
2013 年 9 月 4 日星期三 10:28:18 us=99321 UDPv4 链接远程:[AF_INET]4.3.2.1:1859
WrWrWRWed 2013 年 9 月 4 日 10:28:21 us=987011 与 [AF_INET]4.3.2.1:1859 发起对等连接
wrWrWed 2013 年 9 月 4 日 10:28:22 us=847036 初始化序列已完成
WrWRwrWRwrWWed 2013 年 9 月 4 日 10:28:24 us=931728 注意:开始经验 MTU 测试 - 结果应在 3 到 4 分钟内可用。
WRwrWRRwrWRwrWrWWrWRwrWRRwrWRRwrWRRwrWRwrWRwrWRwrWRRwrWRwrWRwrWRRwrWRwrWRwrWRRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWRwrWrWWrWRRwrWR
wrWWRwrWRwrWRwrWrWrWRWrWrWrWWrWWrWWWWWWWWWWWWWWWWWWrWrWWWWrWWed Sep 4 10:30:19 2013 us=505037 不活动超时 (--ping-restart),正在重新启动
2013 年 9 月 4 日星期三 10:30:19 us=505153 TCP/UDP:关闭套接字

在服务器 B 上,日志中没有“1194”字符串,但是当我尝试在服务器之间 tcpdump 数据包时(1.2.3.4 = 客户端,4.3.2.1 = 服务器):

root@gw2:/etc/openvpn# tcpdump -ni eth0 主机 4.3.2.1
tcpdump:抑制详细输出,使用 -v 或 -vv 进行完整协议解码
监听 eth0,链路类型 EN10MB(以太网),捕获大小 65535 字节
10:34:43.534596 IP 4.3.2.1.1859 > 1.2.3.4.1859: UDP,长度 100
10:34:43.535359 IP 1.2.3.4.1859 > 4.3.2.1.1859: UDP,长度 100
10:34:44.468608 IP 4.3.2.1.1859 > 1.2.3.4.1859: UDP,长度 100
10:34:44.481441 IP 1.2.3.4.1859 > 4.3.2.1.1859: UDP,长度 100
10:34:45.476109 IP 4.3.2.1.1859 > 1.2.3.4.1859: UDP,长度 100
10:34:45.476510 IP 1.2.3.4.1859 > 4.3.2.1.1859: UDP,长度 60
10:34:45.477085 IP 1.2.3.4.1859 > 4.3.2.1.1859: UDP,长度 100
这里 -->10:34:45.496917 IP 1.2.3.4.1194 > 4.3.2.1.1859: UDP,长度 60
10:34:45.537356 IP 4.3.2.1.1859 > 1.2.3.4.1859: UDP,长度 540
10:34:46.540260 IP 4.3.2.1.1859 > 1.2.3.4.1859: UDP,长度 100
10:34:46.540955 IP 1.2.3.4.1859 > 4.3.2.1.1859: UDP,长度 100
10:34:47.526090 IP 4.3.2.1.1859 > 1.2.3.4.1859: UDP,长度 100
10:34:47.526793 IP 1.2.3.4.1859 > 4.3.2.1.1859: UDP,长度 100

似乎客户端有时想要从 udp 1194(而不是正确的 1859)重新连接,而另一个已经在 1859 上的连接保持打开状态。因此,服务器 A 正在向 1859 连接发送数据包(并且可以 ping 通),但客户端将路由更改为 1194,该路由未初始化且无法正常工作(并尝试从 1194 套接字连接,在服务器 A 上生成“解密错误”)。正如我所说 - 除了我转储到上面的那个之外,客户端(服务器 B)上没有其他配置或 openvpn 实例。

有人能告诉我,我的配置哪里出了问题吗?我都快疯了。

谢谢。

J+

附言:抱歉我的英语不好。

答案1

我的设置与描述的不完全相同,但症状相同。我遇到的问题是尝试同时在两台不同的计算机上使用同一个证书。它在两台计算机之间来回切换连接。一旦我创建了单独的证书,两台计算机都可以稳定地连接到 VPN。

答案2

尝试keepalive从其中一个服务器中删除选项。此选项扩展为

           if mode server:
             ping 10
             ping-restart 120
             push "ping 10"
             push "ping-restart 60"
           else
             ping 10
             ping-restart 60

由于您的配置中没有任何服务器处于server模式,因此保留 else 分支。因此您的服务器可能会玩乒乓球游戏,因为ping-restart两侧都定义了选项。

答案3

我有类似的症状。通过将本地子网从 192.168.1.x 更改为 10.0.0.x,我的问题得到了解决。我连接的办公室 VPN 也有后者子网,并且存在冲突。

相关内容