openvpn server can't use udp port

这个问题非常古怪,我们有两个机房。分别在两边假设了openvpn服务器,一个机房就完全正常。另一个机房的openvpn如果是tcp就没问题,如果是udp就报错,无法连接。把正常机房的openvpn完全复制一份拿过去,也是一样报错,太郁闷了!

错误提示是:

TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)  

非常古怪啊: 在内网用nc来试验udp是否正常:

nc -ul 1194  

在内网随便找一台机器测试:

nc -u xxxx 1194  

然后两边随便输入字符测试,没问题。

然后从公网测试,就出问题了。nc连接上以后,只能发送一次数据,然后管道就断裂了,无法再传数据。

nc -u 公网ip 1194  
aaa  
nc: Write error: Connection refused  

百思不得其解啊,试了若干次,才发现问题的症结所在。

错误的那台服务器,有两个网络地址: 172.16.8.4和172.16.8.1
其中8.4的地址是缺省的,8.1的地址是用ifconfig手动添加的。 而前端防火墙做得公网映射是映射到了8.1的1194端口

tcp由于双方是要校验来往src地址的,所以没问题,到了udp,只管发不管收,所以udp包就从8.4的缺省地址发出去,导致双方不一致,无法正常接收了。

解决方法也很简单,在openvpn服务器端的配置文件中强行指定local端的ip即可:

local 172.16.8.1  
comments powered by Disqus