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

1 networking linux ubuntu vpn openvpn

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

两台服务器都是 Ubuntu 64 位:

服务器A:

root@server:/etc/openvpn# uname -an
Linux 服务器 2.6.38-13-virtual #52~lucid1-Ubuntu SMP Thu Nov 10 19:46:44 UTC 2011 x86_64 GNU/Linux
root@server:/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 Tue Apr 10 20:39:51 UTC 2012 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 有效负载 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}/共享/信息 --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-缓冲区大小=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_LZOSSLNET11PFUSE

服务器 A ovpn 配置:

守护进程 vpn-conn
writepid /var/run/openvpn-vpn.pid
开发 tun3
原始UDP
端口 1859
comp-lzo
保活 10 30
持久化
持久键
如果配置 10.9.0.1 10.9.0.2
路线 10.10.10.0 255.255.255.0
秘密 my-key.key
日志附加 vpn.log
动词 5

服务器 B:

守护进程VPN
writepid /var/run/openvpn-vpn.pid
远程 4.3.2.1
开发 tun0
原始UDP
端口 1859
comp-lzo
保活 10 60
ping-timer-rem
持久化
持久键
如果配置 10.9.0.2 10.9.0.1
路线 192.168.0.0 255.255.252.0
秘密 my-key.key
日志附加 vpn.log
测试
动词 5

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

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

2013 年 9 月 4 日星期三 10:25:44 us=125832 验证/解密数据包错误:坏数据包 ID(可能是重播):[#100 / time = (1378283056) Wed Sep 4 10:24:16 2013 ] -- 见--no-replay 和 --replay-window 的手册页条目以获取更多信息或使用 --mute-replay-warnings 使此警告静音

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

服务器 A 日志详细信息:

Wed Sep 4 09:56:12 2013 us=544282 用 [AF_INET]1.2.3.4:1859 发起的对等连接
Wed Sep 4 09:57:06 2013 us=661505 用 [AF_INET]1.2.3.4:1194 发起的对等连接

服务器 B 详细信息:

Wed Sep 4 10:28:16 2013 us=98524 SIGUSR1[soft,ping-restart] 收到,进程重新启动
Wed Sep 4 10:28:16 2013 us=98562 重启暂停,2 秒
Wed Sep 4 10:28:18 2013 us=98688 注意:当前的 --script-security 设置可能允许此配置调用用户定义的脚本
Wed Sep 4 10:28:18 2013 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 ]
Wed Sep 4 10:28:18 2013 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'
Wed Sep 4 10:28:18 2013 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,密码 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 Sep 4 10:28:21 2013 us=987011 用 [AF_INET]4.3.2.1:1859 发起的对等连接
wrWrWed Sep 4 10:28:22 2013 us=847036 初始化序列完成
WrWRwrWRwrWWed 2013 年 9 月 4 日 10:28:24 us=931728 注意:开始经验 MTU 测试 - 结果应在 3 到 4 分钟内提供。
WRwrWRRwrWRwrWrWWrWRwrWRWwrWRRwrWRWwrWRRwrWRwrWRWwrWRwrWRwrWRWwrWRRwrWRwrWwrWRwrWRWRWwrWRRwrWRwrWRWwrWRwrWRwWrWRRwrWRwrwrwrwrWwrwrwrwrwrwwrwwrwrwrwrwrwrwwrwwrwwrwrwrwrwrwwrwwrwwrwrwrwrwrwrwwrwwrwwrwrwrwrwrwrwwrwr
wrWWRwrWRwrWRwrWrWrWWWwrWRWrWrWWrWWrWWWWWWWWWWWWWrWrWWWrWrWWed 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未初始化且不起作用(并尝试从1194套接字连接在服务器A上生成“解密错误” )。正如我所说 - 除了我在上面转储的那个之外,在客户端(服务器 B)上没有其他配置或 openvpn 实例。

有人能告诉我,我的配置有什么问题吗?我在我的脑海里。

谢谢你。

J+

PS:抱歉英语不好。

小智 6

我的设置与描述的不完全相同,但症状是相同的。我的问题是试图同时在两台不同的计算机上使用相同的证书。它在两台计算机之间来回切换连接。一旦我创建了一个单独的证书,两台计算机就牢固地保持在 VPN 上。