2016年11月22日星期二

CentOS安装OpenVPN

天使羊波波闪耀光芒软件及互联网爱好者

通过RSS订阅

首页存档关于

161月/1233

CentOS安装OpenVPN

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

分类: LINUX发表评论

评论 (33)引用 (3)(订阅这个帖子上的评论)

巴拉克
2012年06月21日 12:36

好文……赞

(回复)

PS
2012年07月30日 15:47

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
返回
iptables: Unknown error 4294967295
应该是不支持才对喔

(回复)

csj555
2012年07月30日 20:40

我测试了OpenVZ VPS没有MASQUERADE模块应该提示:iptables: No chain/target/match by that name. 可能这样判断不准确,最好使用cat /proc/net/ip_tables_targets查看是否有MASQUERADE模块。有的主机商提供这个模块有的没有提供~

(回复)

张某
2012年08月15日 23:44

我是看着这篇文章来配置的,真的很感谢。
但我遇到了问题,配置好以后,打开服务端openvpn,再打开客户端开始连接,一直停着……
看log也看不出什么事,用wireshark试下抓包,结果什么都没有……
求教

(回复)

csj555
2012年08月16日 20:29

额 连接一直停着…? 会不会是windows系统或防火墙阻止了客户端连接? 看看权限或防火墙设置

(回复)

张某
2012年08月21日 15:34

windows和防火墙我想没问题的,之前用这个客户端,用别人的VPN能连上。
自己搭的就杯具了……

(回复)

张某
2012年08月21日 20:12

原来是我客户端的配置里IP写错了……感谢csj555
突然为我的前途感到担忧了……

(回复)

csj555
2012年08月22日 21:18

呵呵,没事的啦。以后仔细点就行了~ O(∩_∩)O

林某某
2012年11月02日 19:47

开着Openvpn我浏览网页,不想用了,就关了。然后发现就打不开。ping一下,返回一般故障。这咋回事啊?就我刚才开着openvpn浏览的网站打不开出现一般性故障,其他网站都行的啊!
难道没其他在配置方法可以不让这种情况发生?

(回复)

csj555
2012年11月03日 08:42

查了下应该是openvpn在断开后,默认网关没有恢复成原来的地址,目前没有找到好的办法,可以先把宽带连接断开重连一下,有没有配置的方法我再找找看

(回复)

林某某
2012年11月03日 08:48

麻烦你了,非常感谢哦

(回复)

林某某
2012年11月03日 08:55

顺便问下,要是以后openvpn处新版本了,想升级的话要怎么弄?要全部重新安装?

(回复)

csj555
2012年11月03日 20:43

我觉得如果没有重大BUG,用一年左右再升级,升级时先备份配置文件、公钥私钥证书,停止服务。然后下载新版编译安装,它会覆盖原来安装的文件的,原来的证书还可以用的

(回复)

林某某
2012年11月03日 21:13

这样啊。目前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 这里看的

(回复)

csj555
2012年11月03日 21:49

这是添加静态路由,到server.conf里找找看有没有这句,把注释去掉,IP换成10.8.0.0 255.255.255.0 试试

(回复)

csj555
2012年11月04日 09:02

有效果不?

(回复)

林某某
2012年11月04日 17:57

不行啊,所有网页都打不开啊。算了。就那样凑合着用吧,非常感谢你的帮忙! 

林某某
2012年11月03日 13:43

使用的使用返回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] 这个咋回事啊?

(回复)

csj555
2012年11月03日 20:55

这个信息看上去好像是请求失败,ping外网 google 或 baidu 能ping通吗?

(回复)

林某某
2012年11月03日 21:11

可以上网的啊

(回复)

csj555
2012年11月04日 09:01

是这样的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.

(回复)

Ansen
2012年11月14日 12:22

 感谢博主,已经搭建成功,已经转载到我自己的博客了附上了原文链接,地址是:http://www.ansen.org/in-centos-6-2-build-on-OpenVPN-Server.html

(回复)

csj555
2012年11月15日 09:32

不客气

(回复)

Manfred
2012年12月04日 21:06

感谢楼主,我转载到我的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

怎么回事呢,能否帮忙看一下。
谢谢!

(回复)

csj555
2012年12月05日 15:17

我觉得这个错和iptables的端口转发有关,iptables重启时具体错误是什么?或把iptables规则清空,重新设置下看看。

(回复)

Manfred
2012年12月04日 21:16

哦对了,我的openvpn2.1 这个会不会也产生问题???

(回复)

csj555
2012年12月05日 15:18

应该是兼容的

(回复)

Manfred
2012年12月04日 21:25

openvpn2.1 requires ‘–script-security 2’ or higher to call user-defined scripts or executables.

连接中还有这个问题,这个怎么处理呢??

(回复)

csj555
2012年12月05日 15:09

这是要你设置这个参数,到配置文件里找找看有没有相关的设置

(回复)

杜。。。
2013年09月10日 12:25

非常感谢您的分享,但是我遇到个问题,按照这个步骤安装没有什么问题。就是安装完以后能够连接,ping 我的vps 外网ip地址能够ping通,服务器vps安装了openvpn以后自动建立了一个tun内网,这个内网我也在windows连接以后能够ping通,但是windows连接vpn以后就无法上网,不知道是什么情况。能给个什么建议吗??
非常感谢!

(回复)

csj555
2013年09月11日 07:28

你好,ping其它外网IP能ping通吗,检查下DNS设置看看。

(回复)

win
2013年11月22日 07:28

我的也是一样,vpn连上去了,但是自己的(win)掉网了。在win上ping百度啥的都ping不通了。

(回复)

csj555
2013年11月23日 13:23

你好,系统是win7还是xp,会不会是权限问题。

(回复)

Leave a comment 

姓名 (required)

电子邮件 (required)

站点

                     

mysql主从同步 »« USB接口

 

日历

2016年十一月一二三四五六日« 10月   123456789101112131415161718192021222324252627282930 

存档

存档  选择月份   2016年十月    2016年九月    2016年八月    2016年七月    2016年五月    2016年四月    2016年三月    2016年二月    2016年一月    2015年十二月    2015年十一月    2015年十月    2015年九月    2015年七月    2015年六月    2015年五月    2015年四月    2015年三月    2015年二月    2015年一月    2014年十二月    2014年十一月    2014年十月    2014年九月    2014年八月    2014年七月    2014年六月    2014年五月    2014年四月    2014年三月    2014年二月    2014年一月    2013年十二月    2013年十一月    2013年十月    2013年九月    2013年八月    2013年七月    2013年六月    2013年五月    2013年四月    2013年三月    2013年二月    2013年一月    2012年十二月    2012年十一月    2012年十月    2012年九月    2012年八月    2012年七月    2012年六月    2012年五月    2012年四月    2012年三月    2012年二月    2012年一月    2011年十二月    2011年十一月    2011年十月    2011年九月    2011年八月    2011年七月    2011年六月    2011年五月    2011年四月    2011年三月    2011年二月    2011年一月    2010年十二月    2010年十一月    2010年十月    2010年九月    2010年八月    2010年七月    2010年六月    2010年五月    2010年四月    2010年三月    2010年二月  

分类

C/C++LINUXORACLEWP日剧未分类生活电子书

功能

登录文章RSS评论RSSWordPress.org

友情链接

伍小虎的博客山里来了攻城狮老牛博客

AD

Copyright © 2016 天使羊波波闪耀光芒 · Powered by WordPress 
Lightword Theme translated by Der Tee Blog and Businessangels返回页首 ↑

没有评论:

发表评论