OpenVPN:内网无端口映射建立VPN问题

本文介绍的操作均在CentOS 6.0下完成,关于CentOS下如何安装OpenVPN,参考:CentOS6下如何快速安装OpenVPN,本文介绍OpenVPN使用静态密钥建立VPN的方法,关于使用Mode server方式建立OpenVPN,参考本人以前写的文章: OpenVPN在Linux下的安装[CA]OpenVPN使用User/Pass验证登录OpenVPN在Windows下使用User/Pass验证Windows 下使用 CA 验证的 OpenVPN Server 的配置方法。大家慢慢参考。

相信大家都知道,OpenVPN是很灵活的一个OpenVPN程序,可以在各种网络环境下工作,如:NAT、代理等,甚至可以使用OpenVPN over SSH tunnel来建立VPN连接,但是,目前互联网上介绍的大部分文章重点都在介绍,如果搭建VPN服务,如果OpenVPN服务器在防火墙(或NAT)的后面,都必须通过端口映射来实现VPN连接的建立,如果VPN的双方都在NAT后面,那必须通过第三方的一台VPN server建立连接,那是否有例外呢?请继续往下看。

我们知道,公司(企业)的防火墙都是掌握在公司网管手中的,如果要网管帮你做个端口映射,有可能比登天还难(除非网管是你哥们),如果网管不帮你做端口映射,是否就无法建立VPN连接呢,请大家移步至:单IP做NAT支持的最大连接数问题,仔细观察文中提到的2个例子,从例子中不难看出,Linux(其他的路由器是否这样,有待验证)在做NAT的时候,尽量保证源端口(不要用1024以下的端口)不变,利用NAT的这个特性和UDP没有建立连接过程这个特性,就可以实现NAT后面两台机器无需端口映射建立VPN连接。

本文首发:榆树网 http://www.wenzk.com/
作者: 温占考 wzk AT wenzk DOT net
转载请注明出处,谢谢
=======================================
环境:

A服务器:
内网IP:192.168.0.1
公网IP:202.96.1.1
VPN IP:192.168.254.1

B服务器:
内网IP:192.168.1.1
公网IP:202.97.1.1
VPN IP:192.168.254.2
======================================

1、生成共享密钥,在A或B机器均可,生成后两台机器使用同一个密钥。

openvpn --genkey --secret secret.key

2、生成A机器配置文件,文件/etc/openvpn/test.conf文件内容为:

dev tun
proto udp
lport 1194
remote 202.97.1.1 1194
ifconfig 192.168.254.1 192.168.254.2
keepalive 10 60
ping-timer-rem
persist-key
persist-tun
secret secret.key
comp-lzo
verb 3

3、生成B机器配置文件,文件/etc/openvpn/test.conf文件内容为:

dev tun
proto udp
lport 1194
remote 202.96.1.1 1194
ifconfig 192.168.254.2 192.168.254.1
keepalive 10 60
ping-timer-rem
persist-key
persist-tun
secret secret.key
comp-lzo
verb 3

4、分别在A、B机器启动OpenVPN服务

/etc/init.d/openvpn start

5、测试OpenVPN连接,通过ifconfig检查tun设备是否启动,ping VPN对端地址是否可达。

注意:
1、如果公司公网地址为动态地址,可以通过动态域名,只需将配置文件中的对方服务器IP地址换成域名即可。
2、A、B所使用的本地端口最好完全一致,否则必须保证A机器配置的lport与B机器配置的remote后面的端口一致,及B机器配置的lport与A机器配置的remote后面的端口一致。
3、如果公司的NAT修改源IP的同时也修改源端口,此方法可能不work了。
4、欢迎反馈可行的路由器型号,Linux iptables本人已验证。

此条目发表在 经典案例 分类目录,贴了 , , , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>