OpenVPN 服务端安装配置

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

  • 系统平台:openEuler 22.03 LTS
  • OpenVPN版本:2.5.5
  • easy-rsa 版本:3.1.8

①、YUM安装相应软件
yum -y install openvpn wget
②、生成证书和密钥文件

1.下载easy-rsa 脚本到 /etc/openvpn/

wget -O /etc/openvpn/easy-rsa/easyrsa  https://raw.githubusercontent.com/OpenVPN/easy-rsa/v3.1.8/easyrsa3/easyrsa
chmod +x /etc/openvpn/easy-rsa/easyrsa

2.编辑vars文件

cd /etc/openvpn/easy-rsa/
vim vars

if [ -z "$EASYRSA_CALLER" ]; then
        echo "You appear to be sourcing an Easy-RSA 
'vars' file." >&2
        echo "This is no longer necessary and is 
disallowed. See the section called" >&2
        echo "'How to use this file' near the top 
comments for more details." >&2
       return 1
fi
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "CN"     # 国家代码
set_var EASYRSA_REQ_PROVINCE "GD"     # 州/省
set_var EASYRSA_REQ_CITY "Guangzhou"     # 城市/地区
set_var EASYRSA_REQ_ORG "ITCA"     # 组织
set_var EASYRSA_REQ_EMAIL "888888@qq.comm"     # 邮箱
set_var EASYRSA_NS_SUPPORT "yes"

3.生成CA根证书

./easyrsa init-pki
./easyrsa build-ca nopass

输入 Common Name,名字随便起,建议server

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

./easyrsa build-server-full server nopass     #第一个参数 server 为证书名称,需要输入yes
./easyrsa gen-dh
openvpn --genkey secret ta.key

5.复制证书及密钥文件

cd /etc/openvpn/
cp /etc/openvpn/easy-rsa/{pki/dh.pem,pki/ca.crt,ta.key,pki/issued/server.crt,pki/private/server.key} /etc/openvpn/
③、配置 OpenVPN服务端配置

创建server.conf文件:vim /etc/openvpn/server/server.conf

;local 0.0.0.0  #指定监听的本机IP(因为有些计算机具备多个IP地址),该命令是可选的,默认监听所有IP地址。
port 1194      #服务端端口号
proto tcp       #通过tcp协议来连接,也可以通过udp
;dev tap
dev tun         #路由模式,注意windows下必须使用dev tap
ca ca.crt       #ca证书存放位置
cert server.crt #服务器证书存放位置
key server.key  #服务器密钥存放位置
dh dh.pem   #dh.pem存放位置
tls-auth ta.key 0  #ta.key存放位置
server 10.188.0.0 255.255.0.0   #虚拟局域网网段设置
ifconfig-pool-persist ipp.txt
push "route 0.0.0.0 0.0.0.0"     #全网走openvpn
push "redirect-gateway def1 bypass-dhcp" 
push "dhcp-option DNS 223.5.5.5"           #指定客户端使用的主DNS
push "dhcp-option DNS 114.114.114.114"           #指定客户端使用的备DNS
client-to-client                         #开启客户端互访
duplicate-cn                             #支持一个证书多个客户端登录使用,建议不启用
keepalive 5 30
cipher AES-256-CBC
comp-lzo
max-clients 100                          #最大客户端并发连接数量
user nobody
group nobody
persist-key
persist-tun
status /tmp/openvpn-status.log           #定期把openvpn的一些状态信息写到文件中
#log-append /var/log/openvpn/openvpn.log
verb 3
mute 20
④、关闭SELINUX
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
⑤、配置地址转发,启动OPENVPN服务端

1.启用地址转发

echo -e "###OpenVPN ADD\nnet.ipv4.conf.default.accept_source_route = 1\nnet.ipv4.conf.default.rp_filter = 0\nnet.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

2.启动openvpn-server

systemctl start openvpn-server@server  && systemctl enable openvpn-server@server
⑥、创建用户端配置文件及生成证书文件

1.创建一个客户端配置模板文件 sample.ovpn,该文件在脚本中会用到,放到 /etc/openvpn/client/ 目录:vim /etc/openvpn/client/sample.ovpn

client
remote OPENVPN服务端公网IP 1194    #例:remote 106.12.1.1 1194
dev tun
proto tcp
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
remote-cert-tls server
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
mute-replay-warnings

2.创建添加用户脚本:vim ovpn_user.sh

# ! /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.ovpn # 客户端配置文件
  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 <username>改为你要添加的用户名,会在 /etc/openvpn/client/keys 目录下生成以用户名命名的 zip 打包文件,将该压缩包下载到本地解压,即可加载到客户端使用。

客户端下载: https://www.itca.cc/file/OpenVPN-2.6.12-I001-amd64.7z


篇外:

删除一个 OpenVPN 用户

创建删除用户的脚本文件:vim del_ovpn_user.sh

# ! /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
  systemctl restart openvpn@server
done
exit 0

执行上面脚本即可删除一个用户:sh del_ovpn_user.sh <username>改为你要删除的用户名。


此命令启动openvpn-server可以看到报错信息:/usr/sbin/openvpn --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server/server.conf --writepid /run/openvpn/server.pid