目 录CONTENT

文章目录

在 CentOS7 上搭建 OpenVPN

管理员
2024-08-03 / 0 评论 / 1 点赞 / 19 阅读 / 0 字

在 CentOS7 上搭建 OpenVPN 服务端并添加用户

OpenVPN 服务端安装配置

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

①、YUM 安装相应软件

yum -y install epel-release
yum -y install openvpn easy-rsa iptables-services

②、生成证书和密钥文件

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

cp -r /usr/share/easy-rsa/3.0/ /etc/openvpn/easy-rsa/
2. 编辑 vars 文件,应用 vars 变量

cd /etc/openvpn/easy-rsa/
vim vars
export KEY_COUNTRY="" # 国家
export KEY_PROVINCE="
" # 省份
export KEY_CITY="" # 城市
export KEY_ORG="
" # 公司
export KEY_EMAIL="***" # 邮箱

source ./vars # 使变量生效
3. 生成 CA 根证书

./easyrsa init-pki
./easyrsa build-ca nopass
  1. 生成 OpenVPN 服务器证书和密钥
./easyrsa build-server-full server nopass     #第一个参数 server 为证书名称
./easyrsa gen-dh
openvpn --genkey --secret ta.key
  1. 复制证书及密钥文件
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 server.conf

;local 0.0.0.0  #指定监听的本机IP(因为有些计算机具备多个IP地址),该命令是可选的,默认监听所有IP地址。
port 194      #服务端端口号
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-128-CBC
comp-lzo
max-clients 100                          #最大客户端并发连接数量
user nobody
group nobody
persist-key
persist-tun
status /tmp/openvpn-status.log           #定期把openvpn的一些状态信息写到文件中
verb 3
mute 20

④、配置防火墙和 SELINUX

  1. 关闭 Firewalld 防火墙及 SELINUX
systemctl stop firewalld && systemctl mask firewalld
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
  1. 启动 iptables 防火墙并配置
systemctl enable iptables && systemctl start iptables
iptables -F   # 清理所有防火墙规则
iptables -t nat -A POSTROUTING -s 10.188.0.0/16 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables   # iptables 规则持久化保存

⑤、配置地址转发,启动 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
  1. 启动 openvpn-server
systemctl start openvpn@server  && systemctl enable openvpn@server

⑥、创建用户端配置文件及生成证书文件

  1. 创建一个客户端配置模板文件 sample.ovpn,该文件在脚本中会用到,放到 /etc/openvpn/client/ 目录:
  2. 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
  1. 创建添加用户脚本: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/pkifor user in "$@"
do
if [ -d "​OVPN_USER_KEYS_DIR/OVPNU​SERK​EYSD​IR/​user" ]; then
rm -rf ​OVPN_USER_KEYS_DIR/OVPNU​SERK​EYSD​IR/​user
rm -rf  ​PKI_DIR/reqs/PKID​IR/reqs/​user.req
sed -i '/'"​user"'/d' user"′/d′​PKI_DIR/index.txt
fi
cd $EASY_RSA_DIR

生成客户端SSL证书文件

./easyrsa build-client-full $user nopass

整理下生成的文件

mkdir -p  ​OVPN_USER_KEYS_DIR/OVPNU​SERK​EYSD​IR/​user
cp ​PKI_DIR/ca.crt PKID​IR/ca.crt​OVPN_USER_KEYS_DIR/$user/   # CA 根证书
cp ​PKI_DIR/issued/PKID​IR/issued/​user.crt ​OVPN_USER_KEYS_DIR/OVPNU​SERK​EYSD​IR/​user/   # 客户端证书
cp ​PKI_DIR/private/PKID​IR/private/​user.key ​OVPN_USER_KEYS_DIR/OVPNU​SERK​EYSD​IR/​user/  # 客户端证书密钥
cp /etc/openvpn/client/sample.ovpn ​OVPN_USER_KEYS_DIR/OVPNU​SERK​EYSD​IR/​user/$user.ovpn # 客户端配置文件
sed -i 's/client.crt/'"​user".crt'/g' user".crt′/g′​OVPN_USER_KEYS_DIR/​user/user/​user.ovpn
sed -i 's/client.key/'"​user".key'/g' user".key′/g′​OVPN_USER_KEYS_DIR/​user/user/​user.ovpn
cp ​EASY_RSA_DIR/ta.key EASYR​SAD​IR/ta.key​OVPN_USER_KEYS_DIR/$user/ta.key  # auth-tls 文件
cd $OVPN_USER_KEYS_DIR
zip -r ​user.zip user.zip​user
done
exit 0

执行上面脚本创建一个用户:sh ovpn_user.sh ,改为你要添加的用户名,会在 /etc/openvpn/client/keys 目录下生成以用户名命名的 zip 打包文件,将该压缩包下载到本地解压,即可加载到客户端使用。

篇外:
删除一个 OpenVPN 用户
创建删除用户的脚本文件:vim del_ovpn_user.sh

! /bin/bashset -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/OVPNU​SERK​EYSD​IR/​user" ]; then
rm -rf ​OVPN_USER_KEYS_DIR/OVPNU​SERK​EYSD​IR/​{user}*
fi
systemctl restart openvpn@server
done
exit 0
1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区