openvpn
一、
openvpn原理
二、安装
openvpn
三、制作相关证书
3.1 制作
CA证书
3.2 制作
Server端证书
3.3 制作
Client端证书
四、配置
Server端
五、配置
Client端
5.1 在Windows系统上
5.2 在
OpenVPN server上
5.3 配置
client段配置文件
openvpn通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Publice key,另外一个是Private key)对数据进行加密的。这种方式称为TLS加密
openvpn使用TLS加密的工作过程是,首先VPN Sevrver端和VPN Client端要有相同的CA证书,双方通过交换证书验证双方的合法性,用于决定是否建立VPN连接。
然后使用对方的
CA证书,把自己目前使用的数据加密方法加密后发送给对方,由于使用的是对方CA证书加密,所以只有对方CA证书对应的Private key才能解密该数据,这样就保证了此密钥的安全性,并且此密钥是定期改变的,对于窃听者来说,可能还没有破解出此密钥,VPN通信双方可能就已经更换密钥了。
yum方式安装,此处统一使用aliyun中centos和epel源
二、安装
openvpn
yum方式安装,此处统一使用aliyun中centos和epel源
rm /etc/yum.repos.d/* -fr
# vim /etc/yum.repos.d/ali.repo
[centos6]
name=centeros6 base
baseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/
gpgcheck=0
[epel]
name=epel base
baseurl=http://mirrors.aliyun.com/epel/6/x86_64
gpgcheck=0
为避免出现错误,关闭
selinux
# setenforce 0;sed -i 's/SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
开始安装
openvpn server
# yum install -y openvpn
openvpn安装完毕后,我们来查看openvpn的版本,如下:
# openvpn --version
OpenVPN 2.3.10 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jan 4 2016
library versions: OpenSSL 1.0.1e-fips 11 Feb 2013, LZO 2.03
Originally developed by James Yonan
Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
Compile time defines: enable_crypto=yes enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=yes enable_fragment=yes enable_http_proxy=yes enable_iproute2=yes enable_libtool_lock=yes enable_lzo=yes enable_lzo_stub=no enable_management=yes enable_multi=yes enable_multihome=yes enable_pam_dlopen=no enable_password_save=yes enable_pedantic=no enable_pf=yes enable_pkcs11=yes enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_pthread=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_small=no enable_socks=yes enable_ssl=yes enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=no enable_win32_dll=yes enable_x509_alt_username=yes with_crypto_library=openssl with_gnu_ld=yes with_iproute_path=/sbin/ip with_mem_check=no with_plugindir='$(libdir)/openvpn/plugins' with_sysroot=no
openvpn安装完毕后,我们再来安装easy-rsa。
easy-rsa是用来制作openvpn相关证书的。
安装
easy-rsa,使用如下命令:
# yum install -y easy-rsa
查看
easy-rsa安装的文件,如下:
[root@centos6 openvpn]# rpm -ql easy-rsa
/usr/share/doc/easy-rsa-2.2.2
/usr/share/doc/easy-rsa-2.2.2/COPYING
/usr/share/doc/easy-rsa-2.2.2/COPYRIGHT.GPL
/usr/share/doc/easy-rsa-2.2.2/doc
/usr/share/doc/easy-rsa-2.2.2/doc/Makefile.am
/usr/share/doc/easy-rsa-2.2.2/doc/README-2.0
/usr/share/easy-rsa
/usr/share/easy-rsa/2.0/build-ca
/usr/share/easy-rsa/2.0/build-dh
/usr/share/easy-rsa/2.0/build-inter
/usr/share/easy-rsa/2.0/build-key
/usr/share/easy-rsa/2.0/build-key-pass
/usr/share/easy-rsa/2.0/build-key-pkcs12
/usr/share/easy-rsa/2.0/build-key-server
/usr/share/easy-rsa/2.0/build-req
/usr/share/easy-rsa/2.0/build-req-pass
/usr/share/easy-rsa/2.0/clean-all
/usr/share/easy-rsa/2.0/inherit-inter
/usr/share/easy-rsa/2.0/list-crl
/usr/share/easy-rsa/2.0/openssl-0.9.6.cnf
/usr/share/easy-rsa/2.0/openssl-0.9.8.cnf
/usr/share/easy-rsa/2.0/openssl-1.0.0.cnf
/usr/share/easy-rsa/2.0/pkitool
/usr/share/easy-rsa/2.0/revoke-full
/usr/share/easy-rsa/2.0/sign-req
/usr/share/easy-rsa/2.0/vars
/usr/share/easy-rsa/2.0/whichopensslcnf
我们可以看到
easy-rsa已经安装到/usr/share/easy-rsa/目录下。
**三、制作相关证书
****
**
根据第一章节
openvpn的工作原理,我们可以知道openvpn的证书分为三部分:CA证书、Server端证书、Client端证书。 下面我们通过easy-rsa分别对其进行制作。
openvpn与easy-rsa安装完毕后,我们可以直接在/usr/share/easy-rsa/2.0 制作相关的证书,但是为了后续的管理证书的方便,我们需要在/etc/openvpn/目录下创建easy-rsa文件夹, 然后把/usr/share/easy-rsa/目录下的所有文件全部复制到/etc/openvpn/easy-rsa/下:
# mkdir /etc/openvpn/easy-rsa/
# cp -r /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
# ll /etc/openvpn/easy-rsa/
total 116
-rwxr-xr-x. 1 root root 119 Apr 20 15:15 build-ca
-rwxr-xr-x. 1 root root 352 Apr 20 15:15 build-dh
-rwxr-xr-x. 1 root root 188 Apr 20 15:15 build-inter
-rwxr-xr-x. 1 root root 163 Apr 20 15:15 build-key
-rwxr-xr-x. 1 root root 157 Apr 20 15:15 build-key-pass
-rwxr-xr-x. 1 root root 249 Apr 20 15:15 build-key-pkcs12
-rwxr-xr-x. 1 root root 268 Apr 20 15:15 build-key-server
-rwxr-xr-x. 1 root root 213 Apr 20 15:15 build-req
-rwxr-xr-x. 1 root root 158 Apr 20 15:15 build-req-pass
-rwxr-xr-x. 1 root root 449 Apr 20 15:15 clean-all
-rwxr-xr-x. 1 root root 1471 Apr 20 15:15 inherit-inter
drwx------. 2 root root 4096 Apr 26 21:31 keys
-rwxr-xr-x. 1 root root 302 Apr 20 15:15 list-crl
-rw-r--r--. 1 root root 7791 Apr 20 15:15 openssl-0.9.6.cnf
-rw-r--r--. 1 root root 8348 Apr 20 15:15 openssl-0.9.8.cnf
-rw-r--r--. 1 root root 8245 Apr 20 15:15 openssl-1.0.0.cnf
-rwxr-xr-x. 1 root root 12966 Apr 20 15:15 pkitool
-rwxr-xr-x. 1 root root 928 Apr 20 15:15 revoke-full
-rwxr-xr-x. 1 root root 178 Apr 20 15:15 sign-req
-rw-r--r--. 1 root root 2042 Apr 20 17:01 vars
-rwxr-xr-x. 1 root root 740 Apr 20 15:15 whichopensslcnf
在开始制作
CA证书之前,我们还需要编辑vars文件,修改如下相关选项内容即可。如下:
# vim /etc/openvpn/easy-rsa/vars
export KEY_COUNTRY="CN" 国家
export KEY_PROVINCE="BJ" 省份
export KEY_CITY="Changpin" 城市
export KEY_ORG="kaohe" 组织
export [KEY_EMAIL="caizl@msgcopy.com"](mailto:KEY_EMAIL=\"caizl@msgcopy.com\") 邮箱地址
export KEY_OU="kaohe" 单元名
export KEY_NAME="openvpn" 名字
vars文件主要用于设置证书的相关组织信息,引号部分的内容可以根据自己的实际情况自行修改。
然后使用
source vars命令使其生效。
注意:执行
clean-all命令会删除,当前目录下
keys
文件夹里证书等文件。
#cd /etc/openvpn/easy-rsa/
# source vars.
# ./clean-all
现在开始正式制作
CA证书,使用如下命令:
# ./build-ca
Generating a 2048 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) [TZ]:
Organization Name (eg, company) [CTG]:
Organizational Unit Name (eg, section) [openvpn]:
Common Name (eg, your name or your server's hostname) [CTG CA]:
Name [openvpn]:
Email Address [admin@admin.com]:
一路按回车键即可。制作完成后,我们可以查看
keys目录
ll /etc/openvpn/easy-rsa/keys/
total 32
-rw-r--r--. 1 root root 1639 Apr 27 13:06 ca.crt
-rw-------. 1 root root 1704 Apr 27 13:06 ca.key
-rw-r--r--. 1 root root 341 Apr 26 21:31 index.txt
-rw-r--r--. 1 root root 21 Apr 25 23:16 index.txt.attr
-rw-r--r--. 1 root root 21 Apr 25 23:16 index.txt.attr.old
-rw-r--r--. 1 root root 2131 Apr 25 23:16 index.txt.old
-rw-r--r--. 1 root root3 Apr 25 23:16 serial
-rw-r--r--. 1 root root3 Apr 25 23:16 serial.old
vim /etc/openvpn/easy-rsa/vars
85 cd /etc/openvpn/easy-rsa/
86 source vars
87 ./clean-all 清空原有证书
88 ./build-ca 制作
ca证书
89 ./build-key-server server 制作服务器端秘钥
90 ./build-key-pass chenxi1 制作客户端秘钥
chenxi1 拨号
登录用户名;用这个命令回车后会让你输入客户端密码;
./build-key 这个命令不用输入客户端密码也就不给客户端设密码了
91 ./build-dh 制作交换秘钥文件
执行时间可能有点长
cp -ap keys/ /etc/openvpn/
cp /usr/share/doc/openvpn-2.4.3/sample/sample-config-files/server.conf /etc/openvpn/server.conf.bak
cp /usr/share/doc/openvpn-2.4.3/sample/sample-config-files/client.conf /etc/openvpn/client.conf.bak
grep -vE "^#|^;|^$" server.conf.bak > server.conf
vim server.conf
local 172.16.253.50 外网
ip
port 1194 默认端口
proto tcp 协议默认它是
udp
dev tun 采用路由模式可选
tap tun
ca /etc/openvpn/keys/ca.crt ca路径 可以相对路径;相对当前文件所处的路径
cert /etc/openvpn/keys/server.crt 服务器端证书
key /etc/openvpn/keys/server.key 服务器端的私钥
dh /etc/openvpn/keys/dh2048.pem 交换秘钥的文件
server 10.8.0.0 255.255.255.0 客户端拨号后服务器端安照这个地址池给客户端分配地址;这个网不要和任何网段冲突
默认就好
push "route 192.168.75.0 255.255.255.0" 表示把次路由推送客户端;这个路由就是
VPN服务器所在内网的网段
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3 协议版本
duplicate-cn
log /var/log/openvpn.log
iptables -F
/usr/sbin/openvpn --config /etc/openvpn/server.conf
service openvpn start 它会启动失败因为
应该改配置
init.d的
openVPN
的启动文件
162行
for c in `/bin/ls *.conf 2>/dev/null`;
更改为
for c in `/bin/ls server.conf 2>/dev/null`;
service openvpn start 启动
ss -nlt 查一下端口
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 1 172.16.253.50:1194 *:*
启动后服务器端会多一个虚拟网卡
[root@root keys]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:77:c1:89 brd ff:ff:ff:ff:ff:ff
inet 192.168.75.129/24 brd 192.168.75.255 scope global eth0
inet6 fe80::20c:29ff:fe77:c189/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:77:c1:93 brd ff:ff:ff:ff:ff:ff
inet 172.16.253.50/16 brd 172.16.255.255 scope global eth1
inet6 fe80::20c:29ff:fe77:c193/64 scope link
valid_lft forever preferred_lft forever
7: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
link/[65534]
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
客户端的配置文件
grep -vE "^#|^;|^$" client.conf.bak> client.conf
客户端的配置文件应改成下面的文件
vim client.conf
client
dev tun
proto tcp
remote 172.16.253.50 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert chenxi1.crt
key chenxi1.key
ns-cert-type server
comp-lzo
verb 3
传到客户端
客户端下载地址:
https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/vpntech/openvpn-2.1.1-gui-1.0.3-install-cn-64bit.zip
解压安装
、
[root@root ~]# cd /etc/openvpn/keys/
还有客户端的配置文件;当然也可手写注意此文件的后缀必须是ovpn结尾;前缀叫什么没有太大要求
Paste_Image.png服务器端打开路由转发功能
vim/etc/sysctl.conf
sysctl -p 让其生效
内网主机网关指向openVPN服务器端
这样外网主机便可和内网通信了