CentOS7搭建OpenVPN

CentOS7搭建OpenVPN

参考文档

  • https://cloud.tencent.com/developer/article/2315269
  • https://blog.csdn.net/m0_49027804/article/details/130991215

1、证书

1.1、安装easy-rsa

# 安装easy-rsa
yum -y install easy-rsa
# 创建并进入证书目录
mkdir /opt/easy-rsa && cd /opt/easy-rsa
# 拷贝easy-rsa目录下所有文件
cp -a /usr/share/easy-rsa/3.0.8/* .
# 配置文件vars
tee ./vars <<-'EOF'
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 "Shanghai"
set_var EASYRSA_REQ_CITY "Shanghai"
set_var EASYRSA_REQ_ORG "xumeng03"
set_var EASYRSA_REQ_EMAIL "xumeng03@qq.comm"
set_var EASYRSA_NS_SUPPORT "yes"
EOF

1.2、生成证书

# 初始化,创建PKI目录存储证书
./easyrsa init-pki
# 创建根证书,需设置密码,用于对服务端和客户端证书签名
./easyrsa build-ca
# 生成服务端证书和私钥
./easyrsa gen-req server nopass
# 给服务端端证书签名(需确认并输入根证书密码)
./easyrsa sign server server
# 生成客户端证书和私钥
./easyrsa gen-req client nopass
# 给客户端端证书签名(需确认并输入根证书密码)
./easyrsa sign client client
# 生成Diffie-Hellman文件,用于安全交换密钥
./easyrsa gen-dh

2、服务端

2.1、安装openvpn

yum -y install openvpn

2.2、生成TLS认证密钥

openvpn --genkey --secret /etc/openvpn/ta.key

2.3、配置文件

tee /etc/openvpn/server.conf <<-'EOF'
# 端口
port 1194
# 协议
proto udp
# 采用路由隧道模式
dev tun
# ca证书的位置
ca ca.crt
# 服务端公钥的位置
cert server.crt
# 服务端私钥的位置
key server.key
# 证书校验算法
dh dh.pem
# 给客户端分配的地址池
server 10.8.0.0 255.255.255.0
# 允许客户端访问的内网网段(我这里服务器内网ip是10.0.16.17)
push "route 10.0.0.0 255.255.255.0"
# 地址池记录文件位置,让openvpn客户端固定ip地址使用的
ifconfig-pool-persist ipp.txt
# 存活时间,10秒ping一次,120秒如果未收到响应则视为断线
keepalive 10 120
# 最多允许10个客户端连接
max-clients 10
# openvpn-status日志位置
status openvpn-status.log
# openvpn日志记录位置
log /var/log/openvpn.log
# 日志级别
verb 3
# 允许客户端与客户端之间通信
client-to-client
# 通过keepalive检测超时后,重新启动VPN,不重新读取
persist-key
# 检测超时后,重新启动VPN
persist-tun
# 开启TLS-auth,使用ta.key防御攻击.服务器端的第二个参数值为0,客户端的为1
tls-auth ta.key 0
# 客户端密钥(证书和私钥)是否可以重复
duplicate-cn
# 允许使用自定义脚本
script-security 3
# 认证脚本路径
auth-user-pass-verify check.sh via-env
# 用户密码登陆方式验证
username-as-common-name
EOF

2.4、认证脚本

tee /etc/openvpn/check.sh <<-'EOF'
#!/bin/bash
# 用户列表
PASSFILE="/etc/openvpn/openvpnfile"
# 用户登录情况的日志
LOG_FILE="/var/log/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
if [ ! -r "${PASSFILE}" ]; then
    echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
    exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}'    ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then
    echo "${TIME_STAMP}: User does not exist: username=\"${username}\",password=\"${password}\"." >> ${LOG_FILE}
    exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
    echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
    exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
EOF

# 给脚本添加执行权限
chmod +x /etc/openvpn/check.sh

2.5、用户列表

tee /etc/openvpn/openvpnfile <<-'EOF'
username password
EOF

2.6、拷贝证书

cp /opt/easy-rsa/pki/ca.crt /etc/openvpn
cp /opt/easy-rsa/pki/issued/server.crt /etc/openvpn
cp /opt/easy-rsa/pki/private/server.key /etc/openvpn
cp /opt/easy-rsa/pki/dh.pem /etc/openvpn

2.7、启动

systemctl start openvpn@server
systemctl status openvpn@server

3、客户端

3.1、Windows

1、下载安装

https://openvpn.net/community-downloads/

2、证书

需要下载下列证书

  • /opt/easy-rsa/pki/ca.crt
  • /opt/easy-rsa/pki/issued/client.crt
  • /opt/easy-rsa/pki/private/client.key
  • /etc/openvpn/ta.key
3、配置文件

新建client.ovpn文件放置在C:\user\xumeng03\OpenVPN\config或者C:\Program Files\OpenVPN\config下(注意与证书文件放置在一起,如不放置在一起需自行修改配置文件中的路径)

# 指定为客户端
client
# 协议
proto udp
# 采用路由隧道模式
dev tun
# openvpn服务器IP、端口号
remote 150.158.105.127 1194
# 断线自动重新连接
resolv-retry infinite
# 不绑定本地特定的端口号
nobind
# 指定CA证书的文件路径(需在/opt/easy-rsa处下载)
ca ca.crt
# 指定当前客户端的证书文件路径(需在/opt/easy-rsa处下载)
cert client.crt
# 指定当前客户端的私钥文件路径(需在/opt/easy-rsa处下载)
key client.key
# 日志级别
verb 3
# 通过keepalive检测超时后,重新启动VPN
persist-key
# 开启TLS-auth,使用ta.key防御攻击.服务器端的第二个参数值为0,客户端的为1
tls-auth ta.key 1
# 账号密码认证
auth-user-pass
4、使用

点击连接后输入/etc/openvpn/openvpnfile中的用户名密码即可

3.2、Mac

1、下载安装
brew install openvpn
2、证书

需要下载下列证书

  • /opt/easy-rsa/pki/ca.crt
  • /opt/easy-rsa/pki/issued/client.crt
  • /opt/easy-rsa/pki/private/client.key
  • /etc/openvpn/ta.key
3、配置文件
# 指定为客户端
client
# 协议
proto udp
# 采用路由隧道模式
dev tun
# openvpn服务器IP、端口号
remote 150.158.105.127 1194
# 断线自动重新连接
resolv-retry infinite
# 不绑定本地特定的端口号
nobind
# 指定CA证书的文件路径(需在/opt/easy-rsa处下载)
ca ca.crt
# 指定当前客户端的证书文件路径(需在/opt/easy-rsa处下载)
cert client.crt
# 指定当前客户端的私钥文件路径(需在/opt/easy-rsa处下载)
key client.key
# 日志级别
verb 3
# 通过keepalive检测超时后,重新启动VPN
persist-key
# 开启TLS-auth,使用ta.key防御攻击.服务器端的第二个参数值为0,客户端的为1
tls-auth ta.key 1
# 账号密码认证
auth-user-pass
4、使用
sudo /usr/local/opt/openvpn/sbin/openvpn --config /usr/local/etc/openvpn/client.opvn

4、配置内网转发

4.1、开启内核转发

# 开启内核转发/IP包转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# 重载配置/etc/sysctl.conf配置
sysctl -p

4.2、防火墙配置

# 启动防火墙
systemctl start firewalld
# 添加masquerade规则到防火墙配置(常用于NAT网络地址转换)
firewall-cmd --add-masquerade --permanent
# 允许openvpn服务通过防火墙
firewall-cmd --add-service=openvpn --permanent
# 允许TCP协议的数据通过1194端口(我这里使用了mysql:3306、kubernetes:6443)
firewall-cmd --add-port=1194/tcp --permanent
# 重新加载防火墙配置
firewall-cmd --reload
  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是在Debian 11上安装和配置OpenVPN的步骤: 1. 更新软件包列表: ``` sudo apt update ``` 2. 安装OpenVPN软件包和EasyRSA工具: ``` sudo apt install openvpn easy-rsa ``` 3. 创建OpenVPN的配置目录: ``` sudo mkdir /etc/openvpn/server ``` 4. 复制OpenVPN的示例配置文件: ``` sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/ ``` 5. 解压缩配置文件: ``` sudo gzip -d /etc/openvpn/server/server.conf.gz ``` 6. 生成证书和密钥: ``` cd /usr/share/easy-rsa/ sudo ./easyrsa init-pki sudo ./easyrsa build-ca sudo ./easyrsa build-server-full server nopass ``` 7. 复制证书和密钥到OpenVPN的配置目录: ``` sudo cp /usr/share/easy-rsa/pki/ca.crt /etc/openvpn/server/ sudo cp /usr/share/easy-rsa/pki/issued/server.crt /etc/openvpn/server/ sudo cp /usr/share/easy-rsa/pki/private/server.key /etc/openvpn/server/ ``` 8. 生成Diffie-Hellman参数: ``` sudo openssl dhparam -out /etc/openvpn/server/dh.pem 2048 ``` 9. 配置OpenVPN服务器: 编辑OpenVPN配置文件: ``` sudo nano /etc/openvpn/server/server.conf ``` 确保以下配置项与下面的示例配置文件相同: ``` port 1194 proto udp dev tun ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.crt key /etc/openvpn/server/server.key dh /etc/openvpn/server/dh.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" keepalive 10 120 cipher AES-256-CBC user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 ``` 10. 启动OpenVPN服务: ``` sudo systemctl start openvpn-server@server ``` 11. 确认服务已经启动: ``` sudo systemctl status openvpn-server@server ``` 12. 配置防火墙: 如果您的服务器上有防火墙,请允许OpenVPN的UDP端口(默认为1194)通过防火墙。 完成以上步骤后,您的OpenVPN服务器就已经搭建完成了。您可以使用OpenVPN客户端连接到该服务器,以便安全地访问您的服务器或局域网中的资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

眼眸流转

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值