apache Python HTML5 开源 Windows 程序员 google shell Firefox java linux 微软 linux命令 Android nginx Ubuntu centos mysql php wordpress

CentOS6.3配置openvpn2.2.2完整手记.

今天蛋疼,发现以前PPTP的VPN不能用了,于是呼自己想OPENVPN来试试!GOOGLE了一翻之后开始动手,大致步骤也挺简单的.

1.kernel 需要支持 tun 设备, 需要加载 iptables 模块.

检查 tun 是否安装:

modinfo tun
filename:       /lib/modules/2.6.32-279.el6.i686/kernel/drivers/net/tun.ko
alias:          char-major-10-200
license:        GPL
author:         (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
description:    Universal TUN/TAP device driver
srcversion:     5A72C0DB4EBDF9E4B1D5016
depends:
vermagic:       2.6.32-279.el6.i686 SMP mod_unload modversions 686

估计是支持了...( 这个第一步抄的网上的。结果输出的是俺VPS上的. )

2.安装一些依赖包

yum install iptables openssl lzo pam openssl-devel lzo-devel pam-devel

如果你是rpm安装,后面的三个开发包可以不用安装,这儿我们编译安装。。。。

3.下载openvpn的源码

从http://openvpn.net/index.PHP/open-source/downloads.html下载。国内打不开,你懂的,我下载了一个tar.gz包在VPS上,2.2.2的,自己有办法从官网下就下载,没有可以暂时用我这个连接,不要外传哟!!

wget http://d.lvtao.net/Linux/lib/openvpn-2.2.2.tar.gz

当前的目录是/root/懒得动....(^_^)

4.安装openvpn

tar zxvf openvpn-2.2.2.tar.gz
cd openvpn-2.2.2
./configure
make && make install

说明一下,有些人这步还提示错误,如果你要是安装的centos6.3 mini版,请记得安装gcc 和 make

yum install gcc make 

至于原因,不解释

4.制作证书

先把easy-rsa拷贝到/etc/openvpn下

mkdir –p /etc/openvpn
cp -R easy-rsa /etc/openvpn
cd /etc/openvpn/easy-rsa/2.0

用自己熟悉的编辑工具打开vars文件,根据实际情况修改以下几个变量:

export KEY_COUNTRY=”CN”
export KEY_PROVINCE=”CA”
export KEY_CITY=”BJ”
export KEY_ORG=”MY_ORG”
export KEY_EMAIL="admin@lvtao.net"

什么意思,我们第二页介绍

配置openssl,根据系统所安装的openssl版本,把对应的openssl-version.cnf文件拷贝一份,目标文件名为openssl.cnf,或建个文件链接

查看版本

rpm -q openssl
openssl-1.0.0-25.el6_3.1.i686
cp openssl-1.0.0.cnf openssl.cnf

然后执行以下命令  . ./vars 前有两个点,且中间有一个空格

. ./vars
./clean-all
./build-ca

 一路按回车就可以

ls keys

看是否生成了一些文件 

ca.crt ca.key index.txt serial

生成server key

./build-key-server ttvps 这里的ttvps是指定的名字标签,如果没指定,执行过程中会提示输入

一路回车到

Sign the certificate? [y/n]:y  [这儿请y]

1 out of 1 certificate requests certified, commit? [y/n]y  [这儿也请y]

生成client端key 

./build-key client1 其中client1是客户端的名字,如果有多个客户端,就需要生成多个key

一路回车到

Sign the certificate? [y/n]:y  [这儿请y]

1 out of 1 certificate requests certified, commit? [y/n]y  [这儿也请y]

生成Diffie Hellman参数 这一步在服务端需要,可能耗时比较长:

#./build-dh

到目前,我们已经建立了完整的密钥和证书文件,在keys目录下

将服务端证书拷到/etc/openvpn/目录下

cd keys
cp ca.crt ca.key ttvps.crt ttvps.key dh1024.pem /etc/openvpn/

将客户端文件打包或直接下载本地

ca.crt ca.key client1.crt client1.csr client1.key 

以便客户端vpn

5.配置服务端

拷贝配置文件

cp /root/openvpn-2.2.2/sample-config-files/server.conf /etc/openvpn/openvpn.conf

第二页介绍参数的大概意思.

port 1194
proto tcp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/ttvps.crt
key /etc/openvpn/ttvps.key
dh /etc/openvpn/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "route 172.16.0.0 255.255.255.0"
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 4
script-security 3

编辑

/etc/sysctl.conf

找到net.ipv4.ip_forward = 0 改成net.ipv4.ip_forward = 1保存

然后执行

sysctl -p 

添加路由规则:172.16.0.65为你的服务器ip 

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source 172.16.0.65

或者

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

这样也可以

#iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

开放openvpn端口:

iptables -A INPUT -m state --state NEW -m udp -p udp --dport 1194 -j accept

保存iptables规则并重启服务

/etc/init.d/iptables save
/etc/init.d/iptables restart

启动openvpn

/usr/local/sbin/openvpn --daemon --config /etc/openvpn/openvpn.conf

使用netstat -ln 查看1194openvpn的端口是否已经起来

6.客户端

将下载的5个文件拷贝到OpenVPNconfig目录下.然后新建一个文件 client1.ovpn  内容如下.其中*.*.*.* 为你的服务器IP

client
dev tun
proto tcp
remote *.*.*.* 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
comp-lzo
verb 4
route-method exe 
route-delay 2

然后连接即可!

我在第一次安装使用的时候,遇到过几个问题,第一个是不能正常连接到openvpn服务端,经核查是因为服务端的iptables 设置问题

然后就是连接上了,不能访问facebook  youtue 等一些GFW屏蔽的网站,这个原因比较多,我所遇到的是 server端没有设置

push "dhcp-option DNS 8.8.8.8"
push "redirect-gateway def1 bypass-dhcp"

vars文件,要修改的各项属性:

export KEY_COUNTRY="CN" #国家
export KEY_PROVINCE="SH" #省份
export KEY_CITY="shanghai" #城市
export KEY_ORG="ttvps.net" #组织
export KEY_EMAIL="admin@lvtao.net" #邮件地址
export KEY_EMAIL=sale@ttvps.net#可以不做修改

openvpn.conf文件配置中
push "redirect-gateway def1 bypass-dhcp" #在客户端添加默认路由到vpn服务器
push "dhcp-option DNS 8.8.8.8"    #为客户端分配dns服务器
proto tcp #将默认的udp改为tcp
user xxx #创建运行openvpn守护进程的用户
group xxx #组
ca /etc/openvpn/xxx.crt #指定ca、cert(服务器证书)、key(服务器私钥)、dh文件的详细路径
最后加上 script-security 3

我在本地客户端使用的是NetVPN绿色版的!

openvpn配置文件


使用的端口,默认1194


使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议


ca:使用build-ca生成的,用于验证客户是证书是否合法
cert:使用build-key-server,Server使用的证书对应的key,注意安全,防止被盗


dh:生成的加密文件


通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用


可以让客户端之间相互访问直接通过openvpn程序转发


如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA #和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN


对数据进行压缩


定义用户


openvpn状态log


每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后

/usr/local/sbin/openvpn --daemon --config /etc/openvpn/openvpn.conf

使用netstat -ln 查看1194openvpn的端口是否已经起来

延伸阅读

评论