实践出真知 布署openvpn环境应注意的事

原创
安全
OpenVPN是一个开源的加密隧道构建工具,基于OpenSSL的SSL/TLS协议,可以在Internet中 实现点对点的SSLVPN安全连接。使用OpenVPN的好处是安全、易用和稳定,且认证方式灵活,具备实现SSL VPN解决方案的完整特性。OpenVPN可以应用于Linux、Unix、Mac OS以及Windows等各种操作系统平台。OpenVPN提供两种 类型的虚拟网络接口:TUN和TAP,分别用于建议IP隧道、以太网桥接。在Linux/unix中使用这两种虚拟设备,需要对应的内核模块支持。

 【51CTO.com独家特稿】前言

OpenVPN是一个开源的加密隧道构建工具,基于OpenSSL的SSL/TLS协议,可以在Internet中 实现点对点的SSLVPN安全连接。使用OpenVPN的好处是安全、易用和稳定,且认证方式灵活,具备实现SSL VPN解决方案的完整特性。OpenVPN可以应用于Linux、Unix、Mac OS以及Windows等各种操作系统平台。OpenVPN提供两种 类型的虚拟网络接口:TUN和TAP,分别用于建议IP隧道、以太网桥接。在Linux/unix中使用这两种虚拟设备,需要对应的内核模块支持。 RHEL5/FreeBSD8系统默认已编译好TUN模块,直接使用即可。OpenVPN的官方站点是http://openvpn.net,目前稳定版为OpenVPN-2.0.9。

推荐专题:企业内网开发环境部署与管理全攻略(FreeBSD+PHP)

我替公司设计VPN家庭办公方案时,初期部署的是pptpd方案,稳定性和加密性大家都是还满意的;后期在运作时发现,许多小区或用电信路由器作NAT拨号的同事发现,根本连接不了公司的公网pptpd服务器,拨号时出现了619报错,具体原因为:

这种情况大数多原因为客户机连接Internet的网关(如家庭宽带路由或公司上网网关路由或防火墙)NAT-T功能关闭或对VPN支持性不好,主要是对GRE及PPTP协议的NAT-T不支持。可打开网关路由的NAT-T功能,如果还是出现错误,则需要更换网关设备,现在市面上大多数设备已经支持。由于公司在小区或家里有几台电脑的情况都很普遍,另考虑到以前布署的点对点openvpn穿透能力还是很强的,考虑放弃pptpd,改用openvpn。

值得注意的是:为了消除防火墙及路由器的影响,我直接将openvpn服务器放在防火墙前面(如果置于防火墙后,还要考虑DMZ映射及路由方面的因素,失败率比较高),为了稳定性我用的是64bit的Centos5.5,LAN:192.168.4.222,WAN:220.249.x.x。

这里提前说明一下openvpn的网络部署应该注意的情况,如果你所在小区的局域网是192.168.1.0,而你的openvpn所在局域网也是192.168.4.0的话,会发生杯具性的事情,你是拨不上openvpn服务器的;所以你在规划你的网络时,应该考虑将网段不要设计成192.168.1.0的网段,考虑用192.168.4.0或192.168.10.0这些不常见的网段;你到星巴克咖啡馆唱咖啡时你会惊奇的发现,大多数类似的提供无线服务,基本是将局域网设计成192.168.1.0的,所以我推荐公司的网络尽量不要用192.168.1.0的网段,切记。

完整安装步骤如下(以下过程我重复了上百次,大家可依此实验,Freebsd及Linux均适用)

一、安装前的准备工作

OpenVPN是基于openssl的,所以需要安装openssl,在freebsd8下可采用port安装 cd /usr/ports/security/openssl && make install clean;

RHEL5&Centos5下用 yum -y install openssl openssl-devel

二、 安装服务器端及配置 ,源码包我放在/usr/local/src下。

①首先下载及安装lzo软件包,用于压缩隧道通讯数据以加快传输速度。

wget  http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz  

  1. tar zxvf lzo-2.03.tar.gz  
  2. cd lzo-2.03  
  3. ./configure --prefix=/usr && make && make install  

②下载openvpn及安装

wget http://openvpn.net/release/openvpn-2.0.9.tar.gz

  1. tar zxvf openvpn-2.0.9  
  2. ./configure --with-lzo-lib=/usr && make && make install  

一、OpenVPN服务器端的配置

1)建立CA

在OpenVPN源代码目录下有一个\easy-rsa\2.0目录,进入后修改vars文件最后部分的信息,即

  1. vim /root/openvpn-2.0.9/easy-ras/2.0/vars  
  2. export KEY_COUNTRY="CN" 
  3. export KEY_PROVINCE="BJ" 
  4. export KEY_CITY="Beijing" 
  5. export KEY_ORG="PKU" 
  6. export KEY_EMAIL=" xxxxxx@pku.edu.cn"  

保存退出,再运行:

  1. source vars  
  2. NOTE: If you run ./clean-all, I will be doing a rm -rf on /root/openvpn-2.0.9/easy-rsa/2.0/keys  
  3. ./clean-all  
  4. ./build-ca  

然后就是一段提示,要求输入信息,大部分信息默认就是上述vars文件里的信息,自己只需要填写“Organizational Unit Name”一项,这个随便写一个就是了,也可以不写,我就没有写。

2)为服务器生成证书和密钥

./build-key-server server

还是与上一步类似,自己只需要填写“Organizational Unit Name”一项,也可以不写,即均默认为default值。还会出现:“Sign the certificate? [y/n]”和“1 out of 1 certificate requests certified, commit? [y/n]”,都输入y然后回车,其它可参照如下。

  1. Generating a 1024 bit RSA private key   
  2. ......++++++   
  3. ....................++++++   
  4. writing new private key to 'server.key'   
  5. -----   
  6. You are about to be asked to enter information that will be incorporated   
  7. into your certificate request.   
  8. What you are about to enter is what is called a Distinguished Name or a DN.   
  9. There are quite a few fields but you can leave some blank   
  10. For some fields there will be a default value,   
  11. If you enter '.', the field will be left blank.   
  12. -----   
  13. Country Name (2 letter code) [CN]:   
  14. State or Province Name (full name) [BJ]:   
  15. Locality Name (eg, city) [BJ]:   
  16. Organization Name (eg, company) [buaa]:   
  17. Organizational Unit Name (eg, section) []:gait   
  18. Common Name (eg, your name or your server's hostname) []:server   
  19. Email Address [[email]support@cooldvd.com[/email]]:   
  20.  
  21. Please enter the following 'extra' attributes   
  22. to be sent with your certificate request   
  23. A challenge password []:abcd1234   
  24. An optional company name []:dvdmaster   
  25. Using configuration from /openvpn-2.0.5/easy-rsa/openssl.cnf   
  26. Check that the request matches the signature   
  27. Signature ok   
  28. The Subject's Distinguished Name is as follows   
  29. countryName :PRINTABLE:'CN'   
  30. stateOrProvinceName :PRINTABLE:'GD'   
  31. localityName :PRINTABLE:'SZ'   
  32. organizationName :PRINTABLE:'dvdmaster'   
  33. organizationalUnitName:PRINTABLE:'dvdmaster'   
  34. commonName :PRINTABLE:'server'   
  35. emailAddress :IA5STRING:'[email]support@cooldvd.com[/email]'   
  36. Certificate is to be certified until Mar 19 08:15:31 2016 GMT (3650 days)   
  37. Sign the certificate? [y/n]:y   
  38. 1 out of 1 certificate requests certified, commit? [y/n]y   
  39. Write out database with 1 new entries   
  40.  
  41. Data Base Updated  

 3)在openvpn中,这种配置方法是每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客 户端连接(如果有两个机器安装相同证书,同时拨服务器,都能拨上,但是只有第一个拨上的才能连通网络)。所以需要建立许多份证书。下面建立2份,名称分别 为client1和client2

  1. ./build-key client1   
  2. Generating a 1024 bit RSA private key   
  3. .....++++++   
  4. ......++++++   
  5. writing new private key to 'client1.key'   
  6. -----   
  7. You are about to be asked to enter information that will be incorporated   
  8. into your certificate request.   
  9. What you are about to enter is what is called a Distinguished Name or a DN.   
  10. There are quite a few fields but you can leave some blank   
  11. For some fields there will be a default value,   
  12. If you enter '.', the field will be left blank.   
  13. -----   
  14. Country Name (2 letter code) [CN]:   
  15. State or Province Name (full name) [BJ]:   
  16. Locality Name (eg, city) [BJ]:   
  17. Organization Name (eg, company) [buaa]:   
  18. Organizational Unit Name (eg, section) []:gait   
  19. Common Name (eg, your name or your server's hostname) []:client1 重要: 每个不同的 client 生成的证书, 名字必须不同.   
  20. Email Address [[email]support@cooldvd.com[/email]]:   
  21.  
  22. Please enter the following 'extra' attributes   
  23. to be sent with your certificate request   
  24. A challenge password []:abcd1234   
  25. An optional company name []:gait   
  26. Using configuration from /openvpn-2.0.5/easy-rsa/openssl.cnf   
  27. Check that the request matches the signature   
  28. Signature ok   
  29. The Subject's Distinguished Name is as follows   
  30. countryName :PRINTABLE:'CN'   
  31. stateOrProvinceName :PRINTABLE:'GD'   
  32. localityName :PRINTABLE:'SZ'   
  33. organizationName :PRINTABLE:'dvdmaster'   
  34. organizationalUnitName:PRINTABLE:'dvdmaster'   
  35. commonName :PRINTABLE:'client1'   
  36. emailAddress :IA5STRING:'[email]support@cooldvd.com[/email]'   
  37. Certificate is to be certified until Mar 19 08:22:00 2016 GMT (3650 days)   
  38. Sign the certificate? [y/n]:y   
  39.  
  40. 1 out of 1 certificate requests certified, commit? [y/n]y   
  41. Write out database with 1 new entries   
  42. Data Base Updated  

 依次类推生成其他客户端证书/key:

./build-key client2

4)./build-dh,这步不要看掉了~

生成的证书文件均在/usr/local/src/openvpn-2.0.9/easy-rsa/2.0/keys下

5)配置服务器VPN文件

a) cp -p /usr/local/src/openvpn-2.0.9/sample-config-files/server.conf /usr/local/etc/server.conf

b) vi /usr/local/etc/server.conf

i. proto udp改成proto tcp

ii. ca那四行改成

  1. ca     /usr/local/src/openvpn-2.0.9/easy-rsa/2.0/keys/ca.crt   
  2. cert   /usr/local/src/openvpn-2.0.9/easy-rsa/2.0/keys/server.crt   
  3. key   /usr/local/src/openvpn-2.0.9/easy-rsa/2.0/keys/server.key   
  4. dh    /usr/local/src/openvpn-2.0.9/easy-rsa/2.0/keys/dh1024.pem  

 iii. server那行改成

server 10.0.0.0 255.255.255.0 前期我用是10.0.0.0,后期实际部署用的是10.10.0.0。

v. 改成verb 5可以多查看一些调试信息

6) 启动服务:

a) 关闭服务器、防火墙上所有对SSH(22)、openvpn(1194)的拦截。

b) echo "1" > /proc/sys/net/ipv4/ip_forward

c)

  1.  /usr/local/sbin/openvpn --config /usr/local/etc/server.conf  
  2. Fri Jan 23 23:55:34 2009 OpenVPN 2.0.9 i686-pc-linux [SSL] [EPOLL] built on Jan 23 2009  
  3. Fri Jan 23 23:55:34 2009 Diffie-Hellman initialized with 1024 bit key  
  4. Fri Jan 23 23:55:34 2009 TLS-Auth MTU parms [ L:1543 D:140 EF:40 EB:0 ET:0 EL:0 ]  
  5. Fri Jan 23 23:55:35 2009 TUN/TAP device tun0 opened  
  6. Fri Jan 23 23:55:35 2009 /sbin/ifconfig tun0 10.0.0.1 pointopoint 10.0.0.2 mtu 1500  
  7. Fri Jan 23 23:55:35 2009 /sbin/route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.0.0.2  
  8. Fri Jan 23 23:55:35 2009 Data Channel MTU parms [ L:1543 D:1450 EF:43 EB:4 ET:0 EL:0 ]  
  9. Fri Jan 23 23:55:35 2009 Listening for incoming TCP connection on [undef]:1194  
  10. Fri Jan 23 23:55:35 2009 TCPv4_SERVER link local (bound): [undef]:1194  
  11. Fri Jan 23 23:55:35 2009 TCPv4_SERVER link remote: [undef]  
  12. Fri Jan 23 23:55:35 2009 MULTI: multi_init called, r=256 v=256 
  13. Fri Jan 23 23:55:35 2009 IFCONFIG POOL: base=10.0.0.4 size=62 
  14. Fri Jan 23 23:55:35 2009 IFCONFIG POOL LIST  
  15. Fri Jan 23 23:55:35 2009 MULTI: TCP INIT maxclients=1024 maxevents=1028 
  16. Fri Jan 23 23:55:35 2009 Initialization Sequence Completed 

 #p#

二、安装WidnowsVPN客户端

1、安装客户端

①从http://openvpn.se/files/上下载与openvpn服务器版本一致的Windows客户端“OpenVPN GUI For Windows”

例如, 服务器装的是 OpenVPN 2.09, 那么下载的 OpenVPN GUI fow windows应该是: openvpn-2.0.9-gui-1.0.3-install.exe

②执行openvpn-2.0.9-gui-1.0.3-install.exe。一切采用默认设置。

③将ca.crt、client1.crt、client1.key复制到C:\Program Files\OpenVPN\config。(不同用户使用不同的证书,每个证书包括.crt和.key两个文件,如client2.crt和client2.key)

④在/root/openvpn-2.0.9/sample-config-files/client.conf 的基础上建立客户端配置文件,改名为C:\Program Files\OpenVPN\config\client.ovpn,即先在服务器上建立配置文件,然后再上传改名到客户机上。

a) proto udp改成proto tcp

b) remote那行改成

192.168.1.103   1194

c) ca那3行改为 

  1. ca ca.crt  
  2. cert client1.crt  
  3. key client1.key  

d) 注释掉comp-lzo

⑤连接:在右下角的openvpn图标上右击,选择“Connect”。正常情况下应该能够连接成功,分配正常的IP。(点击看大图)

 

 

2、这些都很顺利,但拨号成功后,如何才能使拨号用户访问局域网内192.168.4.0网段的机器呢,具体做法来:

①在openvpn的配置文件里增加push "route 192.168.4.0 255.255.255.0",目的是为客户端加一条路由,这样客户端才有可能访问到办公网络中出VPN Server之外的其它主机(有很多VPN客户端直接添加默认路由,这样客户端的所有连接请求都被路由到 VPN 通道内,结果是客户端此时不能访问VPN,而此项添加指定地址的路由不会导致这一问题)

②在openvpn上开启ip转发echo “1”>  /proc/sys/net/ipv4/ip_forward

③在公司的网关或路由器上增加一条路由,添加到 10.10.0.0/24 的路由项目,网关为服务器的内部 IP 地址,目的是为了让公司局域网里的主机知道去往VPN Client的包如何路由,记住 ,路由是双向和回环的,既要有来的路由,也应该有回的路由。由于我这种环境下既没有路由器,也没有防火墙,所以我直接在公司重要的服务器及我要远程的机器(xp)上增加一条路由。

route add 10.10.0.0 mask 255.255.255.0 192.168.4.222

三、需要注意的问题

每个人的网络拓补不一样,如何使openvpn的客户端也能访问除openvpn外的公司局域网内的机器呢?这个问题是玩openvpn的朋友们最为关注的,其它情况可以参考以下几点:

1 、可以把openvpn服务器也设成路由器,并使openvpn服务器作为这些需要被访问的内网机器的路由器,这样路由器和openvpn在同一台机器上就 ok了。

2 、如果内网中有多台机器可能需要被访问,针对我这种情况,可以在路由器上设置静态路由表,设置10.10.0.0网段的信息路由到openvpn服务器, 具体设置参看自己的路由器的设置页面吧。如果是计算机作路由器,那就使用route add 10.10.0.0 mask 255.255.255.0 192.168.4.222(openvpn服务器的ip),这样只需要改一个地方就ok了,就不需要修改每台内网的机器了。

3 、如果改不了路由器,或者内网需要修改的机器不多的话,也可以直接在内网要被访问的机器上,执行route add 10.10.0.0 mask 255.255.255.0 192.168.4.222(openvpn服务器的ip)命令(我的情况是操作系统是windows,命令就是那个了),来直接给内网的机器添加路由,这样 当碰到10.10.0.0网段的信息,它就知道直接路由到openvpn服务器,而不会走路由器这条路了。

还有一个细节问题应该注意:一台机器只能用一个证书拨号,如果是二台机器都要用一个证书来拨号的话,第二台机器会发生每5秒就掉线的杯具,这个也是实际使用中发现的;虽然可以在openvpn通过配置来更改,但我建议还是一台机器使用一个证书的好。

另外一个小问题就是:在进行证书制作工作时,仍旧需要进行初始化,

但只需要进入openvpn\easy-rsa目录,运行vars就可以了,不需要./clean-all步骤,它会清掉一切证书文件的(汗) 。

以上就是我玩openvpn以来的一些经验总结和心得,希望能给大家带来一些帮助;每个人的情况不一样,别人的未必适用于你,所以多动手,多尝试,毕竟实践出真知嘛。通过部署整个VPN办公环境,发现openVPN的稳定和穿透能力相当的强悍啊,套用一句流行的话:openVPN相当V5,呵呵。

附录:

在windows机器上永久增加路由的方法:

ROUTE命令可以在XP、2K/2003、WIN7等操作系统下手工增加静态路由,但是重启之后路由便丢失了,还要重新增加,那么怎样能让路由一直保待,重启后仍然存在呢?其实很简单,在增加路由的命令后加上-P开关就可以了。例如

route -p add 10.10.0.0 mask 255.255.0.0 192.168.4.222

-p参数详解

与Add命令共同使用时,指定路由被添加到注册表并在启动TCP/IP协议的时候初始化IP路由表。默认情况下,启动TCP/IP协议时不会保存添加的路 由,与Print命令一起使用时,则显示永久路由列表。所有其他的命令都忽略此参数。永久路由存储在注册表中的位置是,注意最后一副图画红线的部分,它也可以验证我们新增的命令会永久的增加静态路由。

HKEY_LOCAL_MACHSYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes

责任编辑:林琳 来源: 51CTO.com
相关推荐

2021-10-26 11:42:51

系统

2012-08-13 16:48:31

架构师

2013-12-24 07:17:25

虚拟网络网络虚拟化

2013-12-23 10:14:36

虚拟网络

2013-06-28 08:49:46

炎黄盈动BPM

2019-10-18 11:11:52

DynamoDBNoSQL数据库

2015-12-25 10:42:57

爱数云存储

2010-04-19 14:05:28

无线网络故障

2010-11-17 11:29:39

2014-07-04 16:06:45

用友优普

2010-12-22 09:12:27

2012-08-14 16:57:25

开发技术周刊

2015-07-28 11:02:15

androidapp开发

2019-08-20 15:16:26

Reacthooks前端

2022-12-26 15:57:56

2011-08-30 10:03:59

软件工程

2017-12-07 22:08:16

系统架构设计数据服务交易系统

2018-12-24 14:58:02

人工智能AI视觉搜索

2020-03-27 22:18:55

JavaScript编程语言代码

2015-06-18 17:18:56

综合布线环境保护
点赞
收藏

51CTO技术栈公众号