首页 > 系统管理 > openvpn 简易配置
2015
02-09

openvpn 简易配置

前言:

为了保证机房服务器的安全性,很多公司的服务器都是没有公网ip的,但是我们需要从公司连接机房的服务器,为了安全最好是有一条专线连接公司与机房,但是 这样成本太高了(有钱不一定能买到),于是就可以搭建vpn建立一条虚拟专用通道(vpn),本文使用的是openvpn,至于openvpn的原理,大 家可以看看百度百科,那里介绍的比较详细,这里不多介绍了。

网络环境说明:

vpn服务器:内网ip:192.168.10.31 公网ip:10.15.89.66

一、安装Openvpn相关依赖软件

1、安装依赖包并建立程序存放目录

yum -y install openssl-devel gcc
 mkdir –p /usr/local/openvpn && cd /usr/local/openvpn/

2、安装lzo-2.02.tar.gz(传输时的压缩模块)

 tar zxvf lzo-2.02.tar.gz  &&  cd lzo-2.02
./configure && make && make install

3、安装openvpn-2.0.9.tar.gz(openvpn 服务软件)

tar zxvf openvpn-2.0.9.tar.gz
 cd openvpn-2.0.9
 ./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib
 make
 make install

二、为openvpn server建立CA认证 并创建服务端证书

1、创建CA

cd /usr/local/openvpn/openvpn-2.0.9/easy-rsa/2.0/

修改CA的默认的配置文件,将vars文件的最后5行修改为你自己的信息,例如我的修改成tshare365:

[root@suzhu-31 2.0]# tail -5 vars
 export KEY_COUNTRY="CN"
 export KEY_PROVINCE="BJ"
 export KEY_CITY="Beijing"
 export KEY_ORG="tshar365"
 export KEY_EMAIL="tshare365@help.org"
 [root@suzhu-31 2.0]# tail -6 vars
 # Don't leave any of these fields blank.
 export KEY_COUNTRY="CN"
 export KEY_PROVINCE="BJ"
 export KEY_CITY="Beijing"
 export KEY_ORG="tshare365"
 export KEY_EMAIL="tshare365@help.org"
 [root@suzhu-31 2.0]# source  vars
 NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/local/openvpn/openvpn-2.0.9/easy-rsa/2.0/keys
 [root@suzhu-31 2.0]# ./clean-all
 [root@suzhu-31 2.0]# ./build-ca
 Generating a 1024 bit RSA private key
 ..++++++
 ....................++++++
 writing new private key to 'ca.key'
 -----
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Country Name (2 letter code) [CN]:
 State or Province Name (full name) [BJ]:
 Locality Name (eg, city) [Beijing]:
 Organization Name (eg, company) [tshare365]:
 Organizational Unit Name (eg, section) []:
 Common Name (eg, your name or your server's hostname) [tshare365CA]:
 Email Address [tshare365@help.org]:
 [root@suzhu-31 2.0]#

至此CA创建完成!

2、创建服务端证书和key文件(一直回撤,最后输入两次y)

[root@suzhu-31 2.0]# ./build-key-server server
 Generating a 1024 bit RSA private key
 .....++++++
 ...............................++++++
 writing new private key to 'server.key'
 -----
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Country Name (2 letter code) [CN]:
 State or Province Name (full name) [BJ]:
 Locality Name (eg, city) [Beijing]:
 Organization Name (eg, company) [tshare365]:
 Organizational Unit Name (eg, section) []:
 Common Name (eg, your name or your server's hostname) [server]:
 Email Address [tshare365@help.org]:
Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:
 An optional company name []:
 Using configuration from /usr/local/openvpn/openvpn-2.0.9/easy-rsa/2.0/openssl.cnf
 Check that the request matches the signature
 Signature ok
 The Subject's Distinguished Name is as follows
 countryName           :PRINTABLE:'CN'
 stateOrProvinceName   :PRINTABLE:'BJ'
 localityName          :PRINTABLE:'Beijing'
 organizationName      :PRINTABLE:'tshare365'
 commonName            :PRINTABLE:'server'
 emailAddress          :IA5STRING:'tshare365@help.org'
 Certificate is to be certified until Jan 12 02:54:19 2025 GMT (3650 days)
 Sign the certificate? [y/n]:y
 1 out of 1 certificate requests certified, commit? [y/n]y
 Write out database with 1 new entries
 Data Base Updated
 [root@suzhu-31 2.0]#

三、创建客户端证书和key文件

1、给zdong用户创建证书

[root@suzhu-31 2.0]# ./build-key-pass zdong
 Generating a 1024 bit RSA private key
 ..++++++
 ...++++++
 writing new private key to 'zdong.key'
 Enter PEM pass phrase:
 Verifying - Enter PEM pass phrase:
 -----
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Country Name (2 letter code) [CN]:
 State or Province Name (full name) [BJ]:
 Locality Name (eg, city) [Beijing]:
 Organization Name (eg, company) [tshare365]:
 Organizational Unit Name (eg, section) []:
 Common Name (eg, your name or your server's hostname) [zdong]:
 Email Address [tshare365@help.org]:

注意:这里使用的是 ./build-key-pass命令而非 ./build-key ,二者区别是前者在登录vpn服务器的时候需要密码认证,后着不需要,所以前者比后者要安全,所以我们使用前者。

2、生成generate diffie hellman parameters传输进行密钥交换时用到的交换密钥协议文件

[root@suzhu-31 2.0]# ./build-dh
 Generating DH parameters, 1024 bit long safe prime, generator 2
 This is going to take a long time
 .......................+.................................................................................................................................+................................................................+....................+.............................+...........................................+....+..+......................++*++*++*
 [root@suzhu-31 2.0]#

注意:此步不能丢,否则会出错!

到此客户端证书生成 完毕!

三、vpn服务器的配置

[root@suzhu-31 2.0]# mkdir -p /etc/openvpn
[root@suzhu-31 2.0]# pwd
 /usr/local/openvpn/openvpn-2.0.9/easy-rsa/2.0
 [root@suzhu-31 2.0]# cp -p ../../sample-config-files/server.conf  /etc/openvpn/
 [root@suzhu-31 2.0]# cp keys/* /etc/openvpn/

提示:注意拷贝的路径(keys目录存放着我们刚才生成的ca还有证书文件)

修改server.conf 配置文件

[root@suzhu-31 2.0]# vim /etc/openvpn/server.conf
local 10.15.89.66
 #port 39870
 dev tun
 ca /etc/openvpn/ca.crt
 cert /etc/openvpn/server.crt
 key /etc/openvpn/server.key
 dh /etc/openvpn/dh1024.pem
 server 192.168.200.0 255.255.255.0
 ifconfig-pool-persist ipp.txt
 push "route 192.168.10.0 255.255.255.0"
 client-config-dir ccd
 client-to-client
 duplicate-cn
 keepalive 10 120
 comp-lzo
 persist-key
 persist-tun
 status openvpn-status.log
 log /var/log/openvpn.log
 verb 3

配置文件中有几个关键点这里提示一下:

server 192.168.200.0 255.255.255.0 这一行表示  如果想让vpn拨号后分配的IP是什么IP段的,这里就写什么,比如想给用户分配192.168.200.*网段的IP,那么这里就这样写。并且不能与 push冲突。

push那一段表示将路由表推送到客户端,意思就是在客户端会自动添加一条路由,通过这个条路由才能成功访问vpn服务器。push 一般情况下都是写VPN服务器的内网网段的IP

启动vpn服务

/usr/local/sbin/openvpn --config /etc/openvpn/server.conf &

四、客户端配置

1、windows下载VPN客户端并安装上(操作比较简单这里…..)

2、加载客户端配置文件

将vpn服务器上的客户端证书以及ca证书和key拷贝到客户端上

[root@suzhu-31 keys]# pwd
 /usr/local/openvpn/openvpn-2.0.9/easy-rsa/2.0/keys
 [root@suzhu-31 keys]# mkdir zdong
 [root@suzhu-31 keys]# cp zdong.
 zdong.crt  zdong.csr  zdong.key
 [root@suzhu-31 keys]# cp zdong.* zdong
 [root@suzhu-31 keys]# cp ca.*
 ca.crt  ca.key
 [root@suzhu-31 keys]# cp ca.* zdong
 [root@suzhu-31 keys]# tar cvzf zdong.tar.gz zdong
 zdong/
 zdong/zdong.crt
 zdong/ca.crt
 zdong/zdong.csr
 zdong/zdong.key
 zdong/ca.key
 [root@suzhu-31 keys]#

将zdong.tar.gz下载到Windows客户端,解压到openvpn的配置文件config中,并建立client.ovpn文件如图:

1.png

在config配置文件中加入刚才我们生成的证书(zdong)

client.ovpn中的内容如下:

方便大家拷贝:

client
dev tun
proto udp
remote 10.15.89.66
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert zdong.crt
key zdong.key
comp-lzo
verb 3
mute 20
#redirect-gateway def1

五、启动客户端测试:(输入我们设置的密码./build-key-pass那步设置的密码)

3.png

2.png

小图标变成绿色表示连接vpn成功了。我们在ping一下vpn服务器

C:\Users\user>ping 192.168.10.31
正在 Ping 192.168.10.31 具有 32 字节的数据:
 来自 192.168.10.31 的回复: 字节=32 时间=221ms TTL=64
 来自 192.168.10.31 的回复: 字节=32 时间=285ms TTL=64
 来自 192.168.10.31 的回复: 字节=32 时间=44ms TTL=64
 来自 192.168.10.31 的回复: 字节=32 时间=29ms TTL=64
 192.168.10.31 的 Ping 统计信息:
 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
 往返行程的估计时间(以毫秒为单位):
 最短 = 29ms,最长 = 285ms,平均 = 144ms

ok是通的。。

我们在ping一下VPN服务器内网中的其他机器

C:\Users\user>ping 192.168.10.32
正在 Ping 192.168.10.32 具有 32 字节的数据:
 来自 192.168.1.102 的回复: 无法访问目标主机。
 请求超时。
 请求超时。
 请求超时。
 192.168.10.32 的 Ping 统计信息:
 数据包: 已发送 = 4,已接收 = 1,丢失 = 3 (75% 丢失),

ok是不通的如何解决这个问题呢,其实很简单,只需要在vpn服务器上设置一条snat并开启路由转发功能就可以了

在vpn服务器上设置:

vi /etc/sysctl.conf
 #-------------------------
 net.ipv4.ip_forward = 1
 #-------------------------
 sysctl -p
添加一条iptables(将192.168.200.0网段的ip转化成192.168.10.31)
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -j SNAT --to-source 192.168.10.31

配置完成以后我们在次测试:

C:\Users\user>ping 192.168.10.32
正在 Ping 192.168.10.32 具有 32 字节的数据:
 来自 192.168.10.32 的回复: 字节=32 时间=29ms TTL=63
 来自 192.168.10.32 的回复: 字节=32 时间=26ms TTL=63
 来自 192.168.10.32 的回复: 字节=32 时间=46ms TTL=63
 来自 192.168.10.32 的回复: 字节=32 时间=27ms TTL=63
 192.168.10.32 的 Ping 统计信息:
 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
 往返行程的估计时间(以毫秒为单位):
 最短 = 26ms,最长 = 46ms,平均 = 32ms

这次通了,说明我们到vpn服务器以及到与vpn服务器同网段的机器都可以相同了。

到此,openvpn服务器搭建完成!




最后编辑:
作者:tshare365
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复