openvpn

2017-08-13  本文已影响195人  尘曦的雨

一、
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服务器端
这样外网主机便可和内网通信了

上一篇下一篇

猜你喜欢

热点阅读