奇怪的OpenVPN行为 – 一分钟后断开

我使用OpenVPN连接两个私人networking,现在我遇到了一个问题,我无法解决。 服务器通过简单的UDPconfiguration与静态密钥连接。 我已经检查了iptables的限制或什么也没有,也都是直接在公共IP上的服务器 – 没有路由器/ NAT或之间的东西。 服务器A正在监听,服务器B是客户端。 当VPN启动时,客户端互相连接,一切正常,但只有第一分钟。 然后停止工作。 从服务器A到服务器B的隧道连接(从一个端点到另一个端点)仍在工作(可以ping),但是从另一端不起作用。 在下一分钟看守狗意识到之后,服务器B上的连接closures,重新启动隧道。 然后它的工作一分钟,这永远重复…

这两个服务器都是Ubuntu 64bit:

服务器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]build立在Jul 20 2010
最初由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)]build立于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 ovpnconfiguration:

守护进程vpn-conn
 writepid /var/run/openvpn-vpn.pid
 dev tun3
原始udp
港口1859年
 COMP-LZO
保持活力10 30
坚持-TUN
坚持键
 ifconfig 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
 dev tun0
原始udp
港口1859年
 COMP-LZO
保持活力10 60
平定时器雷姆
坚持-TUN
坚持键
 ifconfig 10.9.0.2 10.9.0.1
路由192.168.0.0 255.255.252.0
秘密my-key.key
日志附加vpn.log
 MTU试验
动词5

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

服务器A仍然logging奇怪的东西到日志(我认为,它可以是问题的根源,但我不知道,如何解决它在两个服务器上的时间是相同的):

 Wed Sep 4 10:25:44 2013 us = 125832 Authenticate / Decrypt packet error:bad packet ID(may be a replay):[#100 / time =(1378283056)Wed Sep 4 10:24:16 2013] --no-replay和--replay-window的手册页条目以获取更多信息,或者使用--mute-replay-warnings

在服务器A上的另一个奇怪的是,看来,服务器B从两个sockets连接! 我已经检查了服务器B,只有一个openvpn实例,没有其他人。 当我杀死它时,两个sockets的连接探头都结束了。

服务器日志详细信息:

 Wed Sep 4 09:56:12 2013 us = 544282 Peer Connection Initiated with [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设置可能允许此configuration调用用户定义的脚本
 Wed Sep 4 10:28:18 2013 us = 98871重新使用预共享静态密钥
 Wed Sep 4 10:28:18 2013 us = 98905 LZO压缩初始化
 Wed Sep 4 10:28:18 2013 us = 98981 Socket缓冲区:R = [229376-> 131072] S = [229376-> 131072]
 Wed Sep 4 10:28:18 2013 us = 99043保留以前的TUN / TAP实例:tun0
 Wed Sep 4 10:28:18 2013 us = 99075数据通道MTU parms [L:1545 D:1450 EF:45 EB:135 ET:0 EL:0 AF:3/1]
 Wed Sep 4 10:28:18 2013 us = 99144本地选项string:'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,authenticationSHA1,密钥大小128,秘密'
 Wed Sep 4 10:28:18 2013 us = 99167 Expected Remote Optionsstring:'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,authenticationSHA1,密钥大小128,秘密'
 Wed Sep 4 10:28:18 2013 us = 99215 Local Options hash(VER = V4):'184f07f3'
 Wed Sep 4 10:28:18 2013 us = 99255 Expected Remote Options hash(VER = V4):'de9a476a'
 Wed Sep 4 10:28:18 2013 us = 99291 UDPv4 link local(bound):[undef]
 Wed Sep 4 10:28:18 2013 us = 99321 UDPv4 link remote:[AF_INET] 4.3.2.1:1859
 WrWrWRWed Sep 4 10:28:21 2013 us = 987011对等连接启动与[AF_INET] 4.3.2.1:1859
写完9月4日10:28:22 us = 847036初始化顺序完成
 WrWRwrWRwrWWed Sep 4 10:28:24 2013 us = 931728注意:开始经验性MTUtesting - 结果应在3到4分钟内可用。
 WRwrWRRwrWRwrWrWWrWRwrWRWwrWRRwrWRWwrWRRwrWRwrWRWwrWRwrWRwrWRWwrWRRwrWRwrWRWwrWRwrWRwrWRWwrWRRwrWRwrWRWwrWRwrWRwWrWRRwrWRwrWRwrWRWwrWRwrWRwrWRWwrWRRwrWRWwrWRwrWRwrWRwrWRWwrWRRwrWRwrWRwrWRWwrWRwrWRWwrWRRwrWRwrWRWwrWRwrWRwrWRwrWrWWrWRRwrWR
不活动超时(--ping-restart),重新启动
 Wed Sep 4 10:30:19 2013 us = 505153 TCP / UDP:closures套接字

在服务器B上,日志中没有“1194”string,但是当我尝试在服务器(1.2.3.4 = client,4.3.2.1 = server)之间tcpdump数据包时:

 root @ gw2:/ etc / openvpn#tcpdump -ni eth0 host 4.3.2.1
 tcpdump:详细输出压缩,使用-v或-vv进行完整的协议解码
在eth0上监听,链路types为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)上没有其他configuration,也没有openvpn的实例比我倾倒的更高。

有人可以告诉我,我的configuration有什么问题? 我终于想到了。

谢谢。

J +

PS:对不起,英语不好。

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

尝试从其中一台服务器上删除keepalive选项。 这个选项扩展到这个

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

因为你的configuration持有else分支,因为你没有server模式下的任何服务器。 所以你的服务器可能会玩ping-pong游戏,因为在双方都有ping-restart选项。

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