问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

CentOS 7下OpenVPN 2.4.8安装配置详解

创作时间:
作者:
@小白创作中心

CentOS 7下OpenVPN 2.4.8安装配置详解

引用
1
来源
1.
https://book.aishangwei.net/docs/openvpn/openvpn-1e7t8pp5oggud

本文将详细介绍如何在CentOS 7系统上安装和配置OpenVPN 2.4.8。文章内容包括环境准备、服务器配置、用户管理以及客户端配置等步骤。

1. 安装环境

注意:公司网络必须有公网IP,尽量是静态公网IP,动态公网IP慎用(由于的动态IP会随时发生改变,客户端也要跟着进行修改)。

名称
版本
说明
系统
Centos 7.7.1908
centos7各个版本差别不大
OpenVPN
2.4.8
easy-rsa
3.0.3

2. OpenVPN 服务器安装配置

(1)环境配置

关闭防火墙:

$ systemctl disable firewalld
$ systemctl stop firewalld

禁用 SElinux:

$ sed -i "/^SELINUX/s/enforcing/disabled/" /etc/selinux/config
$ setenforce 0

开启转发:

$ echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
$ sysctl -p   # 配置生效,如果还是出现IP无法转发的情况,请重启电脑

(2)安装软件

$ yum -y install epel-release
$ yum -y install openvpn easy-rsa

(3)生成 OpenVPN 所需证书以及文件

生成 CA 根证书:

$ cp -r /usr/share/easy-rsa/ /etc/openvpn/
$ cd /etc/openvpn/easy-rsa/3/
$ vim vars               # 该文件不存在的话,新建
export KEY_COUNTRY="China"
export KEY_PROVINCE="HeNan"
export KEY_CITY="ZhenZhou"
export KEY_ORG="xiodi"
export KEY_EMAIL="ca@aishangwei.net"
$ source ./vars            # 导入变量
$ ./easyrsa init-pki        # 初始化 pki相关目录
$ ./easyrsa build-ca nopass    # 不需要密码,生成 CA 根证书

生成 OpenVPN 服务器证书和密钥:

./easyrsa build-server-full server nopass          # server 为证书名称,可随意写

生成 Diffie-Hellman 算法需要的密钥文件:

./easyrsa gen-dh          # 耐心等待一会

生成 tls-auth Key,主要用来防止 Dos 和 TLS 攻击(可选):

$ openvpn --genkey --secret ta.key

日志目录配置:

$ mkdir -p /var/log/openvpn
$ chown openvpn:openvpn /var/log/openvpn

相关文件整理(为了维护方便):

$ mkdir /etc/openvpn/server/certs && cd /etc/openvpn/server/certs/
$ cp /etc/openvpn/easy-rsa/3/pki/{dh.pem,ca.crt} ./
$ cp /etc/openvpn/easy-rsa/3/pki/issued/server.crt ./
$ cp /etc/openvpn/easy-rsa/3/pki/private/server.key ./
$ cp /etc/openvpn/easy-rsa/3/ta.key ./

(4)配置 OpenVPN

openvpn 启动配置文件:

$ vim /etc/openvpn/server.conf
port 1194
proto udp
dev tun
ca /etc/openvpn/server/certs/ca.crt
cert /etc/openvpn/server/certs/server.crt
key /etc/openvpn/server/certs/server.key
dh /etc/openvpn/server/certs/dh.pem
tls-auth /etc/openvpn/server/certs/ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.10.0 255.255.255.0"
push "route 192.168.20.0 255.255.255.0"
push "route 192.168.30.0 255.255.255.0"
push "route 192.168.40.0 255.255.255.0"
push "route 172.31.115.0 255.255.255.0"
push "dhcp-option DNS 192.168.20.250"
push "dhcp-option DNS 114.114.114.114"
compress lzo
duplicate-cn
keepalive 10 120
comp-lzo
persist-key
persist-tun
user openvpn
group openvpn
log /var/log/openvpn/server.log
log-append /var/log/openvpn/server.log
status /var/log/openvpn/status.log
verb 3
explicit-exit-notify 1

server.conf文件也可以通过拷贝 /usr/share/doc/openvpn-2.4.8/sample/sample-config-files/server.conf 进行修改

开机自启:

$ systemctl start openvpn@server
$ systemctl enable openvpn@serve

(5)添加一个 Openvpn 用户

创建一个 openvpn 用户配置文件模板:

$ vim /etc/openvpn/client/agent_template.ovpn
client
proto udp
dev tun
remote <公网IP> 1194
ca ca.crt
cert user.crt
key user.key
tls-auth ta.key 1
remote-cert-tls server
persist-tun
persist-key
comp-lzo
verb 3
mute-replay-warnings

创建一个生成用户的脚本:

$ vim /etc/openvpn/client/create_user.sh
#!/usr/bin/env bash
# 如果脚本执行报错,则停止
set -e
# 配置目录
USER_KEYS_DIR=/etc/openvpn/client/keys
EASY_RSA_VER=3
EASY_RSA_DIR=/etc/openvpn/easy-rsa
PKI_DIR=${EASY_RSA_DIR}/${EASY_RSA_VER}/pki
# 安装 zip
rpm -qa|grep ^zip || yum -y install zip
# 循环创建多个用户
for user in "$@"
do
  # 如果用户已存在,跳出本次循环
  if -d ${USER_KEYS_DIR}/${user} ; then
    echo "[Warning] $user already exists!"
    break
  fi
  # 创建用户
  cd ${EASY_RSA_DIR}/${EASY_RSA_VER}
  ./easyrsa build-client-full ${user} nopass
  mkdir -p ${USER_KEYS_DIR}/${user}
  cp ${PKI_DIR}/ca.crt ${USER_KEYS_DIR}/${user}
  cp ${PKI_DIR}/issued/${user}.crt ${USER_KEYS_DIR}/${user}
  cp ${PKI_DIR}/private/${user}.key ${USER_KEYS_DIR}/${user}
  cp /etc/openvpn/client/agent_template.ovpn ${USER_KEYS_DIR}/${user}/${user}.ovpn
  sed -i 's/user/"${user}"/g' ${USER_KEYS_DIR}/${user}/${user}.ovpn
  cp /etc/openvpn/server/certs/ta.key ${USER_KEYS_DIR}/${user}/ta.key
  # 打包用户文件
  cd ${USER_KEYS_DIR}
  zip -r ${user}.zip ${user}
done
exit 0

执行脚本创建用户:

$ chmod +x /etc/openvpn/client/create_user.sh
$ /etc/openvpn/client/create_user.sh jackzang
$ tree /etc/openvpn/client/keys/*
/etc/openvpn/client/keys/jackzang
├── ca.crt
├── jackzang.crt
├── jackzang.key
├── jackzang.ovpn
└── ta.key
/etc/openvpn/client/keys/jackzang.zip [error opening dir]

(6)删除一个用户

吊销用户的证书:

$ cd /etc/openvpn/easy-rsa/3/
$ ./easyrsa revoke <username>
$ ./easyrsa gen-crl
$ rm -rf /etc/openvpn/client/keys/<username>

重启服务:

$ systemctl restart openvpn@server

3. SSG5 防火墙配置

一般情况下,公司内部都会有防火墙或路由器充当企业网络入口,因此,我们需要在此设备上放行外网对 OpenVPN 服务器端口的访问。

由于我们这次 OpenVPN 采用的是 UDP 协议,所以需要在防火墙上放行 UDP 协议,设备的不同有可能造成配置方法的不同,如果不会或无权限的用户,建议咨询本公司的 IT 人员。

创建自定义服务
自定义服务端口的映射,把公网的端口映射到虚拟机(OpenVPN的监听端口)的端口
防火墙放行策略

4. 客户端配置

下载地址:https://swupdate.openvpn.org/community/releases/openvpn-install-2.4.8-I602-Win10.exe
百度网盘:链接:https://pan.baidu.com/s/1rzxHf-HQJ_N_1VaI_MH81A提取码:m8bk

安装步骤,一路下一步

进入到安装目录:C:\Program Files\OpenVPN ,把从 OpenVPN 服务器下载的 jackzang.zip 文件解压到当前文件夹。

删除原有的 config 目录,把解压后的文件夹 jackzang 重命名为 config,启动 openvpn客户端即可

所有安装脚本可参考:https://gitee.com/hanfeng_edu/script.git

5. 扩展知识

(1)如果配置完成后,出现能通过公网内网IP连接 OpenVPN 服务器,但是无法连接其他内网服务器IP

解决方法:

1)使用 snat 规则:这种需要停止firewall,安装iptables

$ yum -y install iptables
$ systemctl enable iptables
$ systemctl start iptables
$ iptables -f     # 清除所有防火墙规则
$ iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
$ iptables-save > /etc/sysconfig/iptables   # iptables 规则保存
  1. 在核心交换机上添加路由规则,类似于:10.8.0.0/24 192.168.20.241

思科3560:

switch3560-1# config terminal
switch3560-1(config)# ip route 10.8.0.0 255.255.255.0 192.168.20.241
switch3560-1(config)# exit
switch3560-1# exit

(2) 为 openvpn 客户端固定静态IP

定义客户端使用的配置:

$ vi /etc/openvpn/server.conf
...
client-config-dir /etc/openvpn/ipconfig

定义客户端的配置,

$ mkdir /etc/openvpn/ipconfig
$ echo "ifconfig-push 10.8.0.200 10.8.0.201" > /etc/openvpn/ipconfig/jackzang         #200为客户端IP,201为服务器端IP
$ systemctl restart openvpn@server
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号