OpenVPN 服务端安装配置

由于不同环境及软件版本命令使⽤略有差异,特别是 easy-rsa 的使⽤在 2.0 和 3.0 的差别有点 ⼤,所以在此先说明下安装环境及相关软件版本

  • 系统平台: centos7
  • openVpn版本:2.4.8
  • easy-rsa版本:3.0.8

1.yum安装相应软件

yum -y install epel-release

yum -y install openvpn easy-rsa iptables-services

2.生成证书和密钥文件

1 . 将easy-rsa脚本复制到 /etc/openvpn/

  • mkdir /etc/openvpn/easy-rsa/
  • cd /etc/openvpn/easy-rsa/
  • cp -r /usr/share/easy-rsa/3.0.8/* /etc/openvpn/easy-rsa/
  • cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa/vars2

2.编辑vars文件:

vim vars

去掉#注释,编辑以下内容,注意最上面的shell内容,不要直接清空

  • set_var EASYRSA_REQ_COUNTRY “CN”
  • set_var EASYRSA_REQ_PROVINCE “Beijing”
  • set_var EASYRSA_REQ_CITY “Beijing”
  • set_var EASYRSA_REQ_ORG “OpenVPN CA”
  • set_var EASYRSA_REQ_EMAIL “4********[email protected]
  • set_var EASYRSA_REQ_OU “My VPN”

变量生效

source ./vars

3.生成ca根证书

./easyrsa init-pki

./easyrsa build-ca nopass

gN0BC.png

4.生成openVPN服务器证书和密钥

1
2
3
./easyrsa build-server-full Server nopass #第⼀个参数 Server 为证书名称
./easyrsa gen-dh
openvpn --genkey --secret ta.key

5.复制证书及密钥文件

1
2
3
4
cd /etc/openvpn/
cp /etc/openvpn/easy-rsa/{pki/dh.pem,pki/ca.crt,ta.key,pki/issued/Serve
r.crt,pki/private/Server.key} /etc/openvpn/

3.配置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
37
38
39
40
41
42
43
44
45
vim server.conf

#local 123.57.237.225 #指定监听的本机IP(因为有些计算机具备多个IP地址),该命令是可
选的,默认监听所有IP地址
port 1194 #服务端端⼝号
proto udp #通过tcp协议来连接,也可以通过udp
dev tun #路由模式,注意windows下必须使⽤dev tap
# 证书和⽂件相关内容
ca ca.crt #ca证书存放位置
cert Server.crt #服务器证书存放位置
key Server.key # #服务器密钥存放位置
dh dh.pem #dh.pem存放位置
crl-verify crl.pem # 刷新权限
tls-auth ta.key 0 #ta.key存放位置
# 增加⽤户名和密码访问
# 注:如果加上client-cert-not-required则代表只使⽤⽤户名密码⽅式验证登录,
#auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
#username-as-common-name
## client-cert-not-required
#script-security 3
# 分配的ip和dns地址
server 10.19.0.0 255.255.255.0 #虚拟局域⽹⽹段设置
push "dhcp-option DNS 114.114.114.114" # 分配dns地址
push "dhcp-option DNS 8.8.4.4"
ifconfig-pool-persist ipp.txt 定义客户端和虚拟ip地址之间的关系。特别
是在openvpn重启时,再次连接的客户端将依然被分配和断开之前的IP地址。
client-to-client #开启客户端互访
duplicate-cn #⽀持⼀个证书多个客户端登录使⽤,建议
不启⽤
keepalive 10 120
cipher AES-128-CBC

max-clients 100 #最⼤客户端并发连接数量
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log #把openvpn的⼀些状态信息写到⽂件中,
⽐如客户端获得的IP地址。
verb 3 #设置⽇志记录冗⻓级别。
log /var/log/openvpn/openvpn.log #记录⽇志,每次重新启动openvpn后删除
原有的log信息。也可以⾃定义log的位置。默认是在/etc/openvpn/⽬录下
log-append /var/log/openvpn/openvpn.log #记录⽇志,每次重新启动openvpn后追加
原有的log信息。
push "route 172.20.208.0 255.255.255.0" #实际内⽹ip⽹段

4.配置防火墙和SELINUX

1.关闭firewalld防火墙及selinux

1
2
systemctl stop firewalld && systemctl mask firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2.启动iptables防火墙及配置

1
2
systemctl stop firewalld && systemctl mask firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

5.配置地址转发,启动openvpn服务端

1.启动地址转发

1
2
3
4
echo -e "###OpenVPN ADD\nnet.ipv4.conf.default.accept_source_route = 1\n
net.ipv4.conf.default.rp_filter = 0\nnet.ipv4.ip_forward = 1" >> /etc/sy
sctl.conf
sysctl -p

2.启动openvpn-server

systemctl start openvpn@server && systemctl enable openvpn@**server

3.执行以下命令,确认1194端口正在监听,说明openvpn正在运行

netstat -ano | grep 1194

4.重启openvpn-server

1
2
3
4
systemctl start openvpn@server #启动OpenVPN服务
systemctl restart openvpn@server #重启OpenVPN服务
systemctl stop openvpn@server #停⽌OpenVPN服务

或者

service openvpn restart 重启服务

6.创建用户配置文件及生成证书文件

1.创建⼀个客户端配置模板⽂件 sample.ovpn,该⽂件在脚本中会⽤到,放到 /etc/openvpn/client/ ⽬录

vim /etc/openvpn/client/sample.ovpn

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
client
remote OPENVPN服务端公⽹IP 1194 #例:remote 106.12.1.1 1194
dev tun
proto udp
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
# 客户端增加密码验证提示
# auth-user-pass
remote-cert-tls server
resolv-retry infinite
nobind
persist-key
persist-tun
verb 3
mute-replay-warnings

  1. 创建添加⽤户脚本

1 vim ovpn_user.sh

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
# ! /bin/bash
set -e
OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys
EASY_RSA_DIR=/etc/openvpn/easy-rsa/
PKI_DIR=$EASY_RSA_DIR/pki
for user in "$@"
do
if [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then
rm -rf $OVPN_USER_KEYS_DIR/$user
rm -rf $PKI_DIR/reqs/$user.req
sed -i '/'"$user"'/d' $PKI_DIR/index.txt
fi
cd $EASY_RSA_DIR
# ⽣成客户端SSL证书⽂件
./easyrsa build-client-full $user nopass
# 整理下⽣成的⽂件
mkdir -p $OVPN_USER_KEYS_DIR/$user
cp $PKI_DIR/ca.crt $OVPN_USER_KEYS_DIR/$user/ # CA 根证书
cp $PKI_DIR/issued/$user.crt $OVPN_USER_KEYS_DIR/$user/ # 客户端证书
cp $PKI_DIR/private/$user.key $OVPN_USER_KEYS_DIR/$user/ # 客户端证书密

cp /etc/openvpn/client/sample.ovpn $OVPN_USER_KEYS_DIR/$user/$user.ovp
n # 客户端配置⽂件
sed -i 's/client.crt/'"$user".crt'/g' $OVPN_USER_KEYS_DIR/$user/$user.
ovpn
sed -i 's/client.key/'"$user".key'/g' $OVPN_USER_KEYS_DIR/$user/$user.
ovpn
cp $EASY_RSA_DIR/ta.key $OVPN_USER_KEYS_DIR/$user/ta.key # auth-tls ⽂

cd $OVPN_USER_KEYS_DIR
zip -r $user.zip $user
done
exit 0

执⾏上⾯脚本创建⼀个⽤户: sh ovpn_user.sh ,改为你要添加的⽤户名,会在 /etc/openvpn/client/keys ⽬录下⽣成以⽤户名命名的 zip 打包⽂件,将该压缩包下载到本地解 压,即可加载到客户端使⽤。

  1. 删除⼀个 OpenVPN ⽤户 创建删除⽤户的脚本⽂件

vim del_ovpn_user.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# ! /bin/bash
set -e
OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys
EASY_RSA_DIR=/etc/openvpn/easy-rsa/
for user in "$@"
do
cd $EASY_RSA_DIR
echo -e 'yes\n' | ./easyrsa revoke $user
./easyrsa gen-crl
# 吊销掉证书后清理客户端相关⽂件
if [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then
rm -rf $OVPN_USER_KEYS_DIR/${user}*
fi
\cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/
systemctl restart openvpn@server
done
exit 0

执⾏上⾯脚本即可删除⼀个⽤户: sh del_ovpn_user.sh ,改为你要删除的⽤户 名。

如果不使⽤证书,只使⽤ovpn⽂件,参考下⾯内容

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
client
dev tun
proto udp
remote vpn.server.hostname 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ns-cert-type server
verb 3
key-direction 1
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
</tls-auth>

如果要证书和密码都使⽤,参考下⾯内容,服务端和ovpn⾥⾯有相关配置参考

1
2
3
4
5
6
wget http://openvpn.se/files/other/checkpsw.sh -P /etc/openvpn/
chmod +x /etc/openvpn/checkpsw.sh
vim /etc/openvpn/psw-file
admin 123456 (前⾯是⽤户 后⾯是密码)
chmod 400 /etc/openvpn/psw-file
chown nobody.nobody /etc/openvpn/psw-file