这两天弄了弄openvpn,也算是在这里记录一下成果。

具体的介绍这里就不多说了,百度就可以搜出一大堆。


首先准备环境需要gcc gcc++ loz

# yum install gcc
# yum install gcc-c++

# cd /aaa/
# wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
# tar -xvzf lzo-2.03.tar.gz
# cd lzo-2.03
# ./configure --prefix=/usr/local/lzo && make && make install
# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64

然后#ldconfig让他生效一下


安装openssl

# cd /aaa/
# wget http://www.openssl.org/source/openssl-0.9.8.tar.gz
# tar -xvzf openssl-0.9.8.tar.gz
# ./config --prefix=/usr/local/openssl && make && make install


yum安装openvpn

由于centos 6 默认的yum 源没有openvpn,所以需要添加外部的源

获取

#wget 
#rpm -Uvh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

之后还需要刷新一下yum库

yum makecache && yum clean all&& yum –rebuilddb && yum update 

#yum -y install openvpn


把模板复制过来

#cp -r /usr/share/doc/openvpn-2.0.9/easy-rsa/  /etc/openvpn/ 
#cp /usr/share/doc/openvpn-2.0.9/sample-config-files/server.conf  /etc/openvpn/


接着需要生成证书,这里可能是因为版本的关系,比网上的路径多了文件夹

# cd /etc/openvpn/easy-rsa/2.0/
# ll
总用量 148
-rwxrwxrwx 1 root root   119  8月  8 11:17 build-ca
-rwxrwxrwx 1 root root   352  8月  8 11:17 build-dh
-rwxrwxrwx 1 root root   188  8月  8 11:17 build-inter
-rwxrwxrwx 1 root root   163  8月  8 11:17 build-key
-rwxrwxrwx 1 root root   157  8月  8 11:17 build-key-pass
-rwxrwxrwx 1 root root   249  8月  8 11:17 build-key-pkcs12
-rwxrwxrwx 1 root root   268  8月  8 11:17 build-key-server
-rwxrwxrwx 1 root root   213  8月  8 11:17 build-req
-rwxrwxrwx 1 root root   158  8月  8 11:17 build-req-pass
-rwxrwxrwx 1 root root   428  8月  8 11:17 clean-all
-rwxrwxrwx 1 root root  1457  8月  8 11:17 inherit-inter
drwxrwxrwx 2 root root  4096  8月  8 13:53 keys
-rwxrwxrwx 1 root root   295  8月  8 11:17 list-crl
-rwxrwxrwx 1 root root   413  8月  8 11:17 Makefile
-rwxrwxrwx 1 root root  7768  8月  8 11:17 openssl-0.9.6.cnf
-rwxrwxrwx 1 root root  8325  8月  8 11:17 openssl-0.9.8.cnf
-rwxrwxrwx 1 root root  8222  8月  8 11:17 openssl-1.0.0.cnf
-rwxr-xr-x 1 root root  8325  8月  8 11:37 openssl.cnf
-rwxrwxrwx 1 root root 12675  8月  8 11:17 pkitool
-rwxrwxrwx 1 root root  9299  8月  8 11:17 README
-rwxrwxrwx 1 root root   918  8月  8 11:17 revoke-full
-rwxrwxrwx 1 root root   178  8月  8 11:17 sign-req
-rwxrwxrwx 1 root root   684  8月  8 11:23 vars
-rwxr-xr-x 1 root root  1841  8月  8 11:20 vars.bak
-rwxrwxrwx 1 root root   714  8月  8 11:17 whichopensslcnf

我这是图省事直接把权限都改了,生产环境***意相应的权限。

设定一下参数

#vi vars
export KEY_COUNTRY=CN        //定义你所在的国家,两个字符
export KEY_PROVINCE=Beijing     //你所在的省份
export KEY_CITY=Beijing          //你所在的城市
export KEY_ORG="HuaYi"       //你所在的组织
export KEY_EMAIL="xxx@xxxxx.cn"  //你的邮件地址
#source ./vars    //或者可以直接用 . ./ 两个点之间有空格
#./clean-all    //会清空keys下的文件

生成密钥

# ./build-c

接下来一路回车就可以了,keys文件夹下会生成ca.crt  ca.key  index.txt  serial这几个文件


生成dh文件

# ./build-dh


接下来就是生成证书

# ./build-key-server aaa    //这个aaa是名字,可以随便改

一直回车到最后点y再回车就可以


最后生成客户端的证书

# ./build-key client-aaa

之后我们就可以在keys文件夹里看到ca.crt ca.key client-aaa.crt client-aaa.csr client-aaa.key


接下来是openvpn的主配

# cat /etc/openvpn/server.conf
local 118.123.7.110    //openvpn的地址
port 1195              //端口,默认是1194,我小改了一下
;proto tcp
proto udp              //使用udp还是tcp根据需求
;dev tap
dev tun                //tap还是tun也是根据需求
;dev-node MyTap
ca ca.crt
cert aaa.crt            //这个是你刚才生成的那个文件,下面也是
key aaa.key  # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0    //客户端连过来的ip,基本不用改
ifconfig-pool-persist ipp.txt
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
;server-bridge
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
;learn-address ./script
;push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"    //客户端的dns,我最开始因为就是没写这个所以上不了网
push "dhcp-option DNS 8.8.8.8"
client-to-client        //各个openvpn可以互联
duplicate-cn            //开启这个就可以多人用同一个号登陆
keepalive 10 120
;tls-auth ta.key 0 # This file is secret
;cipher BF-CBC        # Blowfish (default)
;cipher AES-128-CBC   # AES
;cipher DES-EDE3-CBC  # Triple-DES
comp-lzo
;max-clients 100
user nobody        //定义用户,下同
group nobody
persist-key
persist-tun
status openvpn-status.log
log         openvpn.log        //日志文件,下同
log-append  openvpn.log
verb 3
;mute 20

TUN
可以视为虚拟的点对点装置,就像一般家用的modem,ADSL一样,使用此虚拟装置的模式称为Routed mode。 因为是在连线后才决定×××双方的连线路径,因此可了解TUN装置所处理的是OSI Layer 3 的工作。
TAP
则可被视为虚拟的Ethernet网络卡, 可以透过此装置启动一个Daemon来接收Ethernet讯框,称为Bridge mode,因为此装置时以Bridge的方式来运作,这个是TUN装置所做不到的!所以TAP装置所处理的是OSI Layer 2的工作。


这时候就可以启动openvpn了

# service openvpn restart
正在关闭openvpn:                                          [确定]
正在启动 openvpn:                                         [确定]

如果失败的话,看看是不是权限或者防火墙的问题。

如果想要客户端上网还需要开始路由转发和iptable的nat


最后是客户端的,因为我用的window,所以这里只说window客户端的用法。

把之前考出来的5个文件拷到客户端目录下的config里,把客户端目录sample-config里的client.ovpn也考到config文件下。

然后将里面的文件修改下

dev tun
 proto tcp
 remote 你的vpn地址 1195(端口)
 user nobody
 group nogroup
 ca ca.crt
 cert client-aaa.crt    //就是我们之前考过来的证书
key client-aaa.key 
comp-lzo
 redirect-gateway def1    //路由走网关



全都搞定之后,点连接,等你看到小电脑绿起来,openvpn就连接成功啦



参考:http://www.blogjava.net/dongbule/archive/2010/11/01/336714.html