环境与目标
VPN服务器:云服务器,公网IP 111.111.11.1,操作系统Rocky Linux。
主要客户端:路由器下的主机,内网IP 192.168.40.20,操作系统Rocky Linux。该客户端将作为访问路由器下其他虚拟机(如 10.10.0.20和 10.10.0.21)的网关。
网络目标:使你(远程用户)可以通过连接云服务器的OpenVPN服务,安全地访问路由器下整个 10.10.0.0/24和 192.168.40.0/24网段的设备。
网络拓扑图
下图清晰地展示了我们最终要实现的网络架构和数据流向:

目标:配置完成后,你可以在自己的个人电脑上连接到云服务器的OpenVPN服务,然后像在本地网络一样,直接访问路由器下的主机(192.168.40.20)及其下方的虚拟机(10.10.0.20, 10.10.0.21)。
为什么要使用OpenVPN,是因为它拥有一系列突出的优点。为了让你能快速抓住核心,我先用一个表格来梳理它的主要优势。
| 优点 | 核心说明 | 带给你的价值 |
|---|---|---|
| ? 安全性高 | 基于成熟的 OpenSSL 库,支持多种强加密算法和证书认证,并可在用户空间运行以减少内核攻击面。 | 数据传输如同在公网上建立了一条加密隧道,有效防止窃听和篡改,保护敏感信息。 |
| ? 跨平台兼容 | 原生支持 Linux、Windows、macOS、Android、iOS 等主流操作系统。 | 一套方案即可满足不同设备(电脑、手机)的接入需求,管理统一,非常灵活。 |
| ? 网络适应性强 | 能出色地穿透 NAT 设备和大多数防火墙,通常只需一个 UDP 或 TCP 端口(如默认的1194)即可建立连接。 | 在复杂的网络环境(如公司网络、酒店Wi-Fi)下也能保持稳定连接,避免因网络限制而无法使用。 |
| ?️ 配置灵活 | 支持路由(tun)和桥接(tap)两种模式,可根据需要选择;能向客户端推送路由等网络配置。 | 可以灵活适配各种网络拓扑,无论是简单的远程访问还是复杂的站点互连,都能找到合适的配置方式。 |
| ? 开源经济 | 采用 GPL 许可,可免费用于商业和个人用途。 | 无需支付昂贵的授权费用,同时可以借助活跃的社区获得支持和持续的功能更新。 |
下面就按照我这边的方案开始实现vpn。
第一阶段:云服务器(OpenVPN Server)配置
1. 安装OpenVPN与Easy-RSA
首先,在你的云服务器(111.111.11.1)上安装必要的软件包。
dnf install epel-release -y dnf install openvpn easy-rsa -y
2. 搭建证书颁发机构(CA)并生成证书
证书是建立安全连接的基石,用于验证服务器和客户端的身份。
# 1. 创建并进入工作目录
mkdir-p ~/easy-rsa
cd ~/easy-rsa
# 2. 初始化PKI(公钥基础设施)目录
/usr/share/easy-rsa/easyrsa init-pki
# 3. 构建CA(证书颁发机构),Common Name可自定义
/usr/share/easy-rsa/easyrsa build-ca nopass
# 4. 生成服务器证书和密钥
/usr/share/easy-rsa/easyrsa build-server-full server nopass
# 5. 生成Diffie-Hellman参数,这需要一些时间
/usr/share/easy-rsa/easyrsa gen-dh
# 6. 生成TLS-auth密钥,用于增强安全性,防御DDoS攻击
openvpn --genkey--secret ta.key
# 7. 将生成的关键文件复制到OpenVPN配置目录
cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem ta.key /etc/openvpn/server/
关键文件说明表
| 文件路径 | 作用 | 保密要求 |
|---|---|---|
/etc/openvpn/server/ca.crt | 根证书,用于验证其他证书 | 可公开 |
/etc/openvpn/server/server.crt | 服务器证书,表明身份 | 可公开 |
/etc/openvpn/server/server.key | 服务器私钥,是安全核心 | 必须保密 |
/etc/openvpn/server/dh.pem | 密钥交换参数 | 可公开 |
/etc/openvpn/server/ta.key | 额外TLS认证密钥 | 必须保密 |
3. 配置OpenVPN服务器
创建并编辑服务器配置文件 /etc/openvpn/server/server.conf。以下是关键配置的说明和示例。
vi /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
# 定义VPN内部使用的虚拟IP段
server 10.8.0.0 255.255.255.0
# 核心配置:推送路由到客户端,告诉客户端如何访问你的内网
push "route 10.10.0.0 255.255.255.0"
push "route 192.168.40.0 255.255.255.0"
# 允许客户端之间互相访问(按需启用)
; client-to-client
# 保持连接
keepalive 10120
# 安全与性能设置
tls-auth /etc/openvpn/server/ta.key 0# 服务器端参数为0
cipher AES-256-CBC
auth SHA256
user nobody
group nobody
persist-key
persist-tun
comp-lzo
status /var/log/openvpn-status.log
verb 3
4. 配置系统网络与防火墙
需要开启系统的IP转发功能,并设置防火墙规则允许VPN流量。
# 1. 启用内核IP转发
echo 'net.ipv4.ip_forward=1' | tee -a /etc/sysctl.conf
sysctl -p
# 2. 配置防火墙(假设云服务器公网网卡为eth0)
# 开放OpenVPN服务端口(1194/UDP)
firewall-cmd --permanent --add-port=1194/udp
# 设置NAT伪装,使客户端流量能通过服务器转发出去
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.8.0.0/24 masquerade'
firewall-cmd --reload
5. 启动OpenVPN服务器
systemctl enable --now openvpn-server@server.service systemctl status openvpn-server@server.service
检查服务状态,确认其正常运行。可以通过 tail -f /var/log/messages查看日志。
第二阶段:客户端(路由器下的主机)配置
1. 安装OpenVPN客户端
在你的内网主机(192.168.40.20)上安装OpenVPN客户端软件。
dnf install openvpn -y
2. 生成客户端配置文件
在云服务器上操作,为你的客户端主机生成证书和配置文件。
# 1. 生成客户端证书(例如命名为client-host)
cd ~/easy-rsa
/usr/share/easy-rsa/easyrsa build-client-full client-host nopass
# 2. 创建客户端配置文件 (.ovpn文件)
tee /etc/openvpn/client-configs/client-host.ovpn << EOF
client
dev tun
proto udp
remote 111.111.11.1 1194 # 你的云服务器公网IP和端口
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
key-direction 1
verb 3
<ca>
$(cat /etc/openvpn/server/ca.crt)
</ca>
<cert>
$(cat pki/issued/client-host.crt)
</cert>
<key>
$(cat pki/private/client-host.key)
</key>
<tls-auth>
$(cat /etc/openvpn/server/ta.key)
</tls-auth>
EOF
配置说明:此文件将所有证书信息内嵌其中,客户端只需导入这一个文件即可连接,非常方便。
3. 将配置文件安全拷贝到客户端主机并连接
将生成的 client-host.ovpn文件从云服务器安全地拷贝到客户端主机(192.168.40.20)的 /etc/openvpn/client/目录下。
然后在客户端主机上启动连接:
openvpn --config /etc/openvpn/client/client-host.ovpn
连接成功后,此主机将获得一个VPN IP(例如 10.8.0.2)。保持此终端运行,或将其设置为系统服务开机自启:
systemctl enable --now openvpn-client@client-host.service
第三阶段:关键路由配置(实现全网互通)
这是实现你从外部访问路由器下虚拟机的最关键一步。你需要登录到你的路由器(网关IP应为 10.10.0.1)的管理界面。
配置目的:告诉路由器“所有要发送到VPN网段(
10.8.0.0/24)的流量,请转发给已连接VPN的客户端主机(192.168.40.20)”。操作步骤(因路由器型号而异,以下是通用概念):
目标网络:
10.8.0.0子网掩码:
255.255.255.0网关 / 下一跳:
192.168.40.20(这是你的OpenVPN客户端主机)登录路由器管理后台(通常通过浏览器访问
http://10.10.0.1,具体看你路由器的后台地址界面路径以及端口)。找到“静态路由”或“路由设置”选项。
添加一条新的静态路由规则:
保存并应用设置。
路由表示意图
| 目标网络 | 子网掩码 | 下一跳网关 | 说明 |
|---|---|---|---|
10.8.0.0 | 255.255.255.0 | 192.168.40.20 | 将发往VPN网络的流量交给客户端主机 |
第四阶段:测试与验证
完成所有配置后,请按以下顺序测试连通性,确保一切正常。
在客户端主机(
192.168.40.20)上:ping 10.8.0.1(ping通VPN服务器虚拟IP,验证基础隧道)ping 10.10.0.20(ping通虚拟机A,验证客户端到内网)ping 10.10.0.21(ping通虚拟机B)在你的个人电脑上(远程用户):
按照类似“客户端配置”的步骤,为你自己的电脑生成一份独立的证书和配置文件(例如命名为
client-user.ovpn)。使用OpenVPN客户端(如OpenVPN Connect)导入该配置文件并连接到云服务器。
连接成功后,你的电脑会获得一个VPN IP(如
10.8.0.3)。现在,你应该可以
ping通所有内网设备:10.8.0.1(服务器),10.8.0.2(客户端主机),10.10.0.20(虚拟机A),10.10.0.21(虚拟机B)。
如果无法ping通,请按以下顺序排查:
检查VPN连接:确认客户端是否成功获取到
10.8.0.0/24网段的IP。检查服务器路由表:在云服务器上执行
ip route show,查看是否有到10.10.0.0/24网段的路由。检查客户端路由表:在成功连接VPN的客户端上执行
ip route show,查看是否有通过VPN隧道访问目标网络的路由。确认静态路由:再次确认是否在路由器(
10.10.0.1)上正确配置了指向192.168.40.20的静态路由。查看日志:OpenVPN服务器和客户端的日志通常能提供详细的错误信息。
希望这些补充说明能帮助更好地理解和完成配置。如果在具体操作中遇到问题,欢迎随时私信或者文章留言!
额外补充(快速回顾核心配置要点,并说明哪些地方可以根据你的实际情况进行简化或需要特别注意):
快速回顾核心配置要点
| 配置环节 | 核心项目/指令 | 作用说明 | 你的网络需关注的点 |
|---|---|---|---|
| 服务器网络 | server 10.8.0.0 255.255.255.0 | 定义VPN虚拟局域网网段,不能与你的物理网络(如10.10.0.0/24)冲突。 | 确保此网段是唯一的。 |
| 推送路由 | push "route 10.10.0.0 255.255.255.0" | 关键:告知所有客户端,目标为10.10.0.0/24的流量应通过VPN隧道发送。 | 必须正确填写你的虚拟机所在网段。 |
| 证书认证 | ca, cert, key, dh, tls-auth | 建立安全连接的基础,服务器和客户端都需要对应的证书文件。 | 为每个客户端生成独立证书更安全。测试时可暂用duplicate-cn,但生产环境不建议。 |
| 客户端互通 | client-to-client | 允许VPN客户端之间直接通信。 | 根据你的需求决定是否开启。 |
| 静态路由 | 在路由器(10.10.0.1)上设置 | 关键:告知路由器,目标为VPN网段(10.8.0.0/24)的流量应转发给内网主机(192.168.40.20)。 | 此步骤必须在路由器管理界面中完成,否则虚拟机无法回程响应。 |
| 防火墙与转发 | iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE | 在云服务器上设置NAT,允许VPN客户端的流量通过服务器转发出去。 | 确保云服务器的防火墙也放行了OpenVPN端口(默认1194/UDP)。 |
务必注意的细节
路由器的静态路由:这是实现双向互通的关键,也是最容易遗漏的一步。必须在你的路由器(网关
10.10.0.1)上添加一条静态路由,告诉它“所有发给10.8.0.0/24网段的数据包,请转发给192.168.40.20(你的OpenVPN客户端)”。防火墙规则:
云服务器:确保防火墙开放了OpenVPN的监听端口(如UDP 1194)。
内网主机(客户端):如果它开启了防火墙,需确保允许来自
10.8.0.0/24网段的流量,或者开放相应服务端口。虚拟机:同样需检查其防火墙设置,确保不会被阻止访问。
时间同步:服务器和所有客户端之间的时间应大致同步,否则SSL证书认证可能会失败,导致无法连接。
服务端配置:在
server.conf中,user nobody和group nobody指令让OpenVPN以低权限用户运行,增强安全性。keepalive 10 120指令用于保持连接,服务器会每10秒ping一次客户端,如果120秒内没有收到响应,则认为连接已断开。
本文链接:https://kinber.cn/post/5766.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
