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
# Author: jackzang
# mail: jackzang@aishangwei.net
# Date: 2020/2/9
# 如果脚本执行报错,则停止
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 规则保存
2) 在核心交换机上添加路由规则,类似于: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
最后编辑:jackzang 更新时间:2024-05-28 14:08