安装 easy-rsa 脚本

1
2
3
mkdir /data/tools -p
wget -P /data/tools http://down.i4t.com/easy-rsa.zip
unzip -d /usr/local /data/tools/easy-rsa.zip

在开始制作 CA 证书之前,我们还需要编辑 vars 文件,修改如下相关选项:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
export KEY_COUNTRY="cn"
export KEY_PROVINCE="HB"
export KEY_CITY="WH"
export KEY_ORG="MIT"
export KEY_EMAIL="axia@alayou.com"
export KEY_EMAIL=aixa@alayou.com
export KEY_CN=cn
export KEY_NAME=cn
export KEY_OU=cn
export PKCS11_MODULE_PATH=alayou
export PKCS11_PIN=axia

生成环境变量:

1
2
source ./vars
./clean-all

制作 CA 证书

1
2
3
4
./build-ca

# 生成根证书ca.crt和根密钥ca.key
#因为在vars中填写了证书的基本信息,所以这里一路回车即可

这时我们可以查看 keys 目录,已经帮我们生成 ca.crt 和 ca.key 两个文件,其中 ca.crt 就是我们的证书文件

1
ls keys

制作服务端证书

1
2
3
4
cd /usr/local/easy-rsa-old-master/easy-rsa/2.0

# 一直回车,2个Y
./build-key-server server

新生成的证书

1
ls keys
1
2
3
01.pem   abc.key  index.txt       serial
server.crt  ca.crt   index.txt.attr  serial.old
server.csr  ca.key   index.txt.old

这里我们已经生成了 server.crt、server.key、server.csr 三个文件,其中 server.crt 和 server.key 两个文件是我们需要使用的

制作 Client 端证书

这里我们创建 2 个用户,分别为 client1 和 client2

1
2
3
4
#每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份
#为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key client1
./build-key client2

现在为服务器生成加密交换时的 Diffie-Hellman 文件

1
2
./build-dh
# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)

证书生成完毕:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
-rw-r--r--. 1 root root 8067 12月  4 11:29 01.pem
-rw-r--r--. 1 root root 7946 12月  4 11:34 02.pem
-rw-r--r--. 1 root root 7946 12月  4 11:34 03.pem
-rw-r--r--. 1 root root 2338 12月  4 11:24 ca.crt
-rw-------. 1 root root 3276 12月  4 11:24 ca.key
-rw-r--r--. 1 root root 7946 12月  4 11:34 client1.crt
-rw-r--r--. 1 root root 1744 12月  4 11:34 client1.csr
-rw-------. 1 root root 3272 12月  4 11:34 client1.key
-rw-r--r--. 1 root root 7946 12月  4 11:34 client2.crt
-rw-r--r--. 1 root root 1744 12月  4 11:34 client2.csr
-rw-------. 1 root root 3272 12月  4 11:34 client2.key
-rw-r--r--. 1 root root  424 12月  4 11:34 dh2048.pem
-rw-r--r--. 1 root root  338 12月  4 11:34 index.txt
-rw-r--r--. 1 root root   21 12月  4 11:34 index.txt.attr
-rw-r--r--. 1 root root   21 12月  4 11:34 index.txt.attr.old
-rw-r--r--. 1 root root  225 12月  4 11:34 index.txt.old
-rw-r--r--. 1 root root    3 12月  4 11:34 serial
-rw-r--r--. 1 root root    3 12月  4 11:34 serial.old
-rw-r--r--. 1 root root 8067 12月  4 11:29 server.crt
-rw-r--r--. 1 root root 1744 12月  4 11:29 server.csr
-rw-------. 1 root root 3272 12月  4 11:29 server.key

安装 Openvpn

两种安装方式: 第一种是源码安装 ,另一种是用yum安装.

编译安装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#安装依赖包
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache
yum install -y lzo lzo-devel openssl openssl-devel pam pam-devel net-tools git lz4-devel


#下载openVPN软件包
wget -P /data/tools http://down.i4t.com/openvpn-2.4.7.tar.gz
cd /data/tools

#安装openVPN
tar zxf openvpn-2.4.7.tar.gz
cd openvpn-2.4.7
./configure --prefix=/usr/local/openvpn-2.4.7
make
make install

# 创建软连接
ln -s /usr/local/openvpn-2.4.7 /usr/local/openvpn

yum 安装

1
2
3
4
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all && yum makecache

yum install -y openvpn

配置 OpenVPN 服务端

我们需要创建 openVPN 文件目录和证书目录

openVPN 配置文件目录,yum 安装默认存在

1
2
3
4
mkdir /etc/openvpn

#openvpn证书目录
mkdir /etc/openvpn/keys

生成 tls-auth key 并将其拷贝到证书目录中(防 DDos 攻击、UDP 淹没等恶意攻击)

1
2
3
4
5
6
7
8
#编译安装执行此句
/usr/local/openvpn/sbin/openvpn --genkey --secret ta.key

# yum安装执行此句
openvpn --genkey --secret ta.key

#将本地的ta.key移动到openVPN证书目录
mv ./ta.key /etc/openvpn/keys/

将我们上面生成的 CA 证书和服务端证书拷贝到证书目录中

1
2
3
cp /usr/local/easy-rsa-old-master/easy-rsa/2.0/keys/{server.crt,server.key,ca.crt,dh2048.pem} /etc/openvpn/keys/

ll /etc/openvpn/keys/
1
2
3
4
5
-rw-r--r--. 1 root root 2338 12月  4 12:15 ca.crt
-rw-r--r--. 1 root root  424 12月  4 12:15 dh2048.pem
-rw-r--r--. 1 root root 8067 12月  4 12:15 server.crt
-rw-------. 1 root root 3272 12月  4 12:15 server.key
-rw-------. 1 root root  636 12月  4 12:14 ta.key

拷贝 OpenVPN 配置文件

1
2
3
4
5
# 编译安装
cp /data/tools/openvpn-2.4.7/sample/sample-config-files/server.conf /etc/openvpn/

# yum安装
cp /usr/share/doc/openvpn-2.4.7/sample/sample-config-files/server.conf /etc/openvpn/

接下来我们来配置服务端的配置文件

1
cat /etc/openvpn/server.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

port 1194       #openVPN端口
proto tcp       #tcp连接
dev tun         #生成tun0虚拟网卡

ca keys/ca.crt      #相关证书配置路径(可以修改为全路径/etc/openvpn/keys)
cert keys/server.crt
key keys/server.key  # This file should be kept secret
dh keys/dh2048.pem

server 192.168.55.0 255.255.255.0   #默认虚拟局域网网段,不要和实际的局域网冲突就可以
ifconfig-pool-persist ipp.txt

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 114.114.114.114"


push "route 192.168.55.0 255.255.255.0"    #可以通过iptables进行路由的转发
client-to-client                 #如果客户端都是用一个证书和密钥连接VPN,需要打开这个选项
duplicate-cn
keepalive 10 120
tls-auth keys/ta.key 0 # This file is secret
comp-lzo

persist-key
persist-tun

status openvpn-status.log   #状态日志路径
log-append  openvpn.log     #运行日志
verb 3                      #调试信息级别



#如果需要接入ldap,需要在server.conf下添加如下2行
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf cn=%u"
client-cert-not-required

开启内核路由转发功能

1
2
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p

如果有 iptables 可以开启 iptables 策略

1
2
3
4
5
6
7
# 注意192.68.55.0/24子网是你的openvpn的虚拟子网
# 如果发现vpn可以连续成功,但是无法访问互联网,尝试清空iptables试试iptables -F ,iptables -X ,iptables -Z
iptables -P FORWARD ACCEPT
iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.68.55.0/24 -j MASQUERADE

iptables -save

启动 openvpn 服务

1
2
cd /etc/openvpn/
usr/local/openvpn/sbin/openvpn --daemon --config /etc/openvpn/server.conf

检查服务

1
netstat -lntup|grep 1194

设置开机启动

1
echo "/usr/local/openvpn/sbin/openvpn --daemon --config /etc/openvpn/server.conf > /dev/null 2>&1 &" >> /etc/rc.local

客户端连接测试

论我们是在 Windows 还是 Linux OS 上 Client 端的配置,都需要将 Client 证书、CA 证书以及 Client 配置文件下载下来

现在我们需要先配置一下 client.conf

1
2
3
4
cp /data/tools/openvpn-2.4.7/sample/sample-config-files/client.conf /root/

#修改如下,并将client.conf修改为client.ovpn
cat /root/client.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
client
dev tun
proto tcp
remote 192.168.55.10 1194   #openvpn服务器的外网IP和端口(可以写多个做到高可用)
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key

tls-auth ta.key 1
cipher AES-256-CBC
comp-lzo
verb 3

cert key,我们这里使用用户的证书,所以证书也应当修改为 client1.crt 和 client1.key tls-auth 因为使用加密协议,所以 ta.key 也需要下载下来

修改后缀并导出

1
2
3
4
5
6
7
#同时还需要导出几个证书
mv client.conf client.ovpn
sz /root/client.ovpn
sz /etc/openvpn/keys/ca.crt
sz /etc/openvpn/keys/ta.key
sz /usr/local/easy-rsa-old-master/easy-rsa/2.0/keys/client1.crt
sz /usr/local/easy-rsa-old-master/easy-rsa/2.0/keys/client1.key

Windows 客户端下载: http://down.i4t.com/openvpn-install-2.4.7-I606-Win10.exe http://down.i4t.com/openvpn-install-2.4.7-I606-Win7.exe

Mac

http://down.i4t.com/Tunnelblick_3.8.1_build_5400.dmg