如何配置类似CTF网络的OpenVPN,并解决禁用全局流量转发后客户端无法访问互联网的问题
如何配置类似CTF网络的OpenVPN,并解决禁用全局流量转发后客户端无法访问互联网的问题
我来帮你搞定这个问题——你想要的是让OpenVPN只负责私有子网的访问,不接管客户端的全局互联网流量对吧?之前删掉redirect-gateway后客户端没法上网,核心问题出在DNS配置和路由的配合上,咱们一步步调整:
问题根源分析
你之前只移除了push "redirect-gateway def1 bypass-dhcp",但保留了push "block-outside-dns"——这行会强制客户端只能使用VPN推送的DNS服务器。当客户端流量不再走VPN时,这些DNS请求可能无法正常解析(因为DNS服务器的访问路径变了),导致浏览器出现“无网络”错误。
修改后的OpenVPN服务器配置
下面是调整好的完整配置,我标注了修改的地方:
local 172.31.40.170 port 1500 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh.pem auth SHA512 tls-crypt tc.key topology subnet client-to-client server 10.8.0.0 255.255.255.0 # 移除这行:不再强制所有流量走VPN # push "redirect-gateway def1 bypass-dhcp" push "route 172.31.40.0 255.255.240.0" # 保留:仅推送私有子网路由 ifconfig-pool-persist ipp.txt # 保留DNS推送(可选),但要配合移除block-outside-dns push "dhcp-option DNS 1.0.0.1" push "dhcp-option DNS 1.1.1.1" # 移除这行:允许客户端使用本地/系统默认DNS # push "block-outside-dns" keepalive 10 120 cipher AES-256-CBC user nobody group nogroup persist-key persist-tun verb 3 crl-verify crl.pem explicit-exit-notify
关键修改说明
- 移除
push "redirect-gateway def1 bypass-dhcp":这是让客户端全局流量走VPN的核心配置,删掉后客户端的默认路由会保留本地网络的设置,互联网流量直接走自己的运营商网络。 - 移除
push "block-outside-dns":取消对客户端DNS的强制限制,这样客户端可以自由使用本地DNS或系统默认DNS,确保互联网域名能正常解析。 - 保留
push "route 172.31.40.0 255.255.240.0":这行是告诉客户端,访问目标私有子网的流量必须通过OpenVPN隧道传输,保证内网访问正常。
额外检查事项
- 服务器端NAT规则清理:如果你之前为了全局VPN流量转发设置了NAT规则(比如
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE),现在可以删掉这条规则,因为客户端不再需要通过服务器转发互联网流量了:iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE - 客户端路由验证:客户端连接VPN后,用以下命令确认路由是否正常:
- Windows:
route print,查看默认网关是否为本地路由器地址,同时存在172.31.40.0/20指向OpenVPN虚拟网卡的路由。 - Linux/macOS:
ip route,确认默认路由是default via <本地网关>,且172.31.40.0/20 via <VPN虚拟IP>的路由存在。
- Windows:
测试步骤
- 重启OpenVPN服务器:
systemctl restart openvpn-server@your-config-name - 客户端重新连接VPN
- 测试访问私有子网内的设备(比如
ping 172.31.40.170),确认能正常连通 - 测试访问外网(比如打开浏览器访问任意公共网站),确认互联网访问正常
备注:内容来源于stack exchange,提问作者Rumira Daksith
相关产品推荐
相关产品推荐

