安装 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
2
3
4
|
cd /usr/local/easy-rsa-old-master/easy-rsa/2.0
# 一直回车,2个Y
./build-key-server server
|
新生成的证书
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