OpenVPN是不同于PPTP、L2TP的另一种VPN软件包,基于SSL的VPN。OpenVPN使用需要客户端支持。这里系统为CentOS6.2。
一、检查OpenVPN所需环境
OpenVPN需要TUN设备支持,还需要iptables的nat模块支持。
1、检查TUN模块:
modinfo tun
显示如下:
如果报错则不支持TUN设备。
2、在OpenVZ虚拟化的VPS上,需要管理员在母鸡上打开TUN/TAP设备。
cat /dev/net/tun
如果返回:
cat: /dev/net/tun: File descriptor in bad state
VPS的TUN/TAP已经可以使用。
如果返回:
cat: /dev/net/tun: No such device
或者其它,说明TUN/TAP设备没有被正确配置,需要与客服沟通开通TUN/TAP。
3、检查OpenVZ的VPS上iptables是否支持:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE
如果返回:
iptables: Unknown error 4294967295
说明支持。
二、编译安装OpenVPN
1、安装LZO
LZO是一种数据压缩算法。
cd /tmp
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
tar -zxvf lzo-2.06.tar.gz
cd lzo-2.06
./configure
make
make install
2、安装OpenVPN
cd /tmp
wget http://swupdate.openvpn.org/community/releases/openvpn-2.2.2.tar.gz
tar -zxvf openvpn-2.2.2.tar.gz
cd openvpn-2.2.2
./configure
此时提示:
configure: error: OpenSSL Crypto headers not found.
原来是openssl的开发包没有安装:
yum install openssl-devel
继续安装:
./configure
make
make install
mkdir /etc/openvpn
cp -R /tmp/openvpn-2.2.2/easy-rsa/ /etc/openvpn/ #复制生成证书的脚本
三、生成密钥和证书
1、初始化PIK
cd /etc/openvpn/easy-rsa/2.0/
vim vars
设置最后的证书字段值:
export KEY_COUNTRY="CN"
export KEY_PROVINCE="SH"
export KEY_CITY="shanghai"
export KEY_ORG="xxxx"
export KEY_EMAIL="xxx@xxx.com"
export KEY_EMAIL=xxx@xxx.com
export KEY_CN=tom
export KEY_NAME=tom
export KEY_OU=tom
export PKCS11_MODULE_PATH=tom
export PKCS11_PIN=1234
使vars设置生效:
source ./vars
报错:
No /etc/openvpn/easy-rsa/2.0/openssl.cnf file could be found
Further invocations will fail
将/etc/openvpn/easy-rsa/2.0目录下的openssl-1.0.0.cnf改名为openssl.cnf可解决:
cp openssl-1.0.0.cnf openssl-1.0.0.cnf.bak
mv openssl-1.0.0.cnf openssl.cnf
继续运行脚本设置变量,并清理:
source ./vars
./clean-all
建立私钥:
./build-ca
build-ca脚本用于生成一个1024位的RSA私钥,由于前面已经设置过vars文件,直接按回车。
2、建立server key
./build-key-server server
前面几个按回车,中间有extra属性要填,最后按两个y。
3、建立client key
./build-key client1
和建立server key基本相同,生成的每个客户端证书名字要不同。一份客户端证书对应一个客户端。
4、生成Diffie Hellman参数
./build-dh
5、将keys下的所有文件下载到本地
可以用winscp等工具。
6、创建服务端配置文件
将源代码解压后目录下的规范配置文件复制过来。
mkdir /etc/openvpn/easy-rsa/2.0/conf/
cp /tmp/openvpn-2.2.2/sample-config-files/server.conf /etc/openvpn/easy-rsa/2.0/conf/
编辑配置文件:
vim /etc/openvpn/easy-rsa/2.0/conf/server.conf
找到:
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
修改为:
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
并将以下几句前的分号去掉:
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
client-to-client
user nobody
group nobody
7、设置IP包转发
vim /etc/sysctl.conf
将“net.ipv4.ip_forward”的值改为1。
使sysctl.conf配置生效:
sysctl -p
8、添加iptables转发
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
/etc/init.d/iptables save
/etc/init.d/iptables restart
PS:如果iptables save报错
iptables: Saving firewall rules to /etc/sysconfig/iptables: /etc/init.d/iptables: line 268: restorecon: command not found
要安装一个软件包:
yum install policycoreutils
9、设置OpenVPN开机自启动
echo "/usr/local/sbin/openvpn --config /etc/openvpn/easy-rsa/2.0/conf/server.conf &" >> /etc/rc.local
10、启动OpenVPN
/usr/local/sbin/openvpn --config /etc/openvpn/easy-rsa/2.0/conf/server.conf
四、安装Windows客户端OpenVPN GUI For Windows
1、下载客户端软件并安装
http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe
2、配置客户端
将下载下来的keys文件夹内的:
ca.crt
ca.key
client1.crt
client1.csr
client1.key
复制到客户端安装路径config文件夹下。
例如:
C:\Program Files\OpenVPN\config
将安装路径sample-config文件夹下的client.ovpn也复制到config文件夹内。
打开client.ovpn,找到:
remote my-server-1 1194
将my-server-1修改为OpenVPN服务端的ip地址。
找到:
cert client.crt
key client.key
修改为客户端证书的名字。
cert client1.crt
key client1.key
在最后加上:
redirect-gateway def1
使客户端把OpenVPN服务器IP设为默认网关。
双击client.ovpn即可启动openvpn,或者通过OpenVPN GUI的控制启动VPN。
随后到ip查询的网站上查看自己的ip是否为OpenVPN服务器ip。
备注:
客户端连接时报错:
There are no TAP-Win32 adapters on this system. You should be able to create a TAP-Win32 adapter by going to Start -> All Programs -> OpenVPN -> Add a new TAP-Win32 virtual ethernet adapter.
需要安装TAP-Win32 virtual ethernet adapter。
参考资料:
http://rashost.com/blog/centos-openvpn-install
http://www.cnblogs.com/fangbo/archive/2011/08/04/2127710.html
http://www.fallday.org/archives/230
http://openvpn.net/index.php/open-source/documentation/howto.html
好文……赞
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
返回
iptables: Unknown error 4294967295
应该是不支持才对喔
我测试了OpenVZ VPS没有MASQUERADE模块应该提示:iptables: No chain/target/match by that name. 可能这样判断不准确,最好使用cat /proc/net/ip_tables_targets查看是否有MASQUERADE模块。有的主机商提供这个模块有的没有提供~
我是看着这篇文章来配置的,真的很感谢。
但我遇到了问题,配置好以后,打开服务端openvpn,再打开客户端开始连接,一直停着……
看log也看不出什么事,用wireshark试下抓包,结果什么都没有……
求教
额 连接一直停着…? 会不会是windows系统或防火墙阻止了客户端连接? 看看权限或防火墙设置
windows和防火墙我想没问题的,之前用这个客户端,用别人的VPN能连上。
自己搭的就杯具了……
原来是我客户端的配置里IP写错了……感谢csj555
突然为我的前途感到担忧了……
呵呵,没事的啦。以后仔细点就行了~ O(∩_∩)O
开着Openvpn我浏览网页,不想用了,就关了。然后发现就打不开。ping一下,返回一般故障。这咋回事啊?就我刚才开着openvpn浏览的网站打不开出现一般性故障,其他网站都行的啊!
难道没其他在配置方法可以不让这种情况发生?
查了下应该是openvpn在断开后,默认网关没有恢复成原来的地址,目前没有找到好的办法,可以先把宽带连接断开重连一下,有没有配置的方法我再找找看
麻烦你了,非常感谢哦
顺便问下,要是以后openvpn处新版本了,想升级的话要怎么弄?要全部重新安装?
我觉得如果没有重大BUG,用一年左右再升级,升级时先备份配置文件、公钥私钥证书,停止服务。然后下载新版编译安装,它会覆盖原来安装的文件的,原来的证书还可以用的
这样啊。目前2.2.2这个版本没有大的bug吧?对了那个关于我用openvpn后断开。网页就打不开这是咋回事啊?貌似有些人说没有这种情况,是不是配置什么的有问题?我查了下是不是要添加这个?
#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除
;route 10.9.0.0 255.255.255.252
我在http://www.chinaunix.net/old_jh/50/503434.html 这里看的
这是添加静态路由,到server.conf里找找看有没有这句,把注释去掉,IP换成10.8.0.0 255.255.255.0 试试
有效果不?
不行啊,所有网页都打不开啊。算了。就那样凑合着用吧,非常感谢你的帮忙!
使用的使用返回Sat Nov 03 14:13:20 2012 Replay-window backtrack occurred [1]
Sat Nov 03 14:15:03 2012 Replay-window backtrack occurred [2]
Sat Nov 03 14:40:37 2012 Replay-window backtrack occurred [3] 这个咋回事啊?
这个信息看上去好像是请求失败,ping外网 google 或 baidu 能ping通吗?
可以上网的啊
是这样的http://personalvpn.org/troubleshoot_openvpn.htm
“Replay-window backtrack occurred”
Sometimes network congestion and latency cause the UDP protocol, most commonly used with OpenVPN, to drop packets and even lose the connection. You will see a ‘Replay window backtrack occurred’ error in the log if this is occurring. One solution is to switch to the TCP protocol, assuming your server is configured to support a TCP connection.
不客气
感谢楼主,我转载到我的bolg上了。
顺便请教一个问题,我严格按照你的设置方法的,
但是在设置中出现一个问题
执行/etc/init.d/iptables restart 后,有个过滤fliter是[failed]结果,其他都[OK]
最后,在链接中报错,无法链接:
Tue Dec 04 22:10:29 2012 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Tue Dec 04 22:10:29 2012 TLS Error: TLS handshake failed
怎么回事呢,能否帮忙看一下。
谢谢!
我觉得这个错和iptables的端口转发有关,iptables重启时具体错误是什么?或把iptables规则清空,重新设置下看看。
哦对了,我的openvpn2.1 这个会不会也产生问题???
应该是兼容的
openvpn2.1 requires ‘–script-security 2’ or higher to call user-defined scripts or executables.
连接中还有这个问题,这个怎么处理呢??
这是要你设置这个参数,到配置文件里找找看有没有相关的设置
非常感谢您的分享,但是我遇到个问题,按照这个步骤安装没有什么问题。就是安装完以后能够连接,ping 我的vps 外网ip地址能够ping通,服务器vps安装了openvpn以后自动建立了一个tun内网,这个内网我也在windows连接以后能够ping通,但是windows连接vpn以后就无法上网,不知道是什么情况。能给个什么建议吗??
非常感谢!
你好,ping其它外网IP能ping通吗,检查下DNS设置看看。
我的也是一样,vpn连上去了,但是自己的(win)掉网了。在win上ping百度啥的都ping不通了。
你好,系统是win7还是xp,会不会是权限问题。