配置OpenVPN客户端使用本地网关同时保留client-to-client互通能力
故障根因
你给部分客户端静态分配了10.0.0.0/24段的IP,但OpenVPN服务端没有配置对应路由规则将该段的流量转发到对应客户端,同时当前ccd配置里的IP设置也存在错误。
修正步骤
- 第一步:修正ccd配置的无效IP
你现在ccd/myclient里的ifconfig-push 10.0.0.0 255.255.255.255配置错误:10.0.0.0是10.0.0.0/24段的网络地址,不能作为客户端主机IP使用,修改为该段内的可用主机IP,比如:
ifconfig-push 10.0.0.2 255.255.255.0
同时在该ccd文件中追加iroute规则,告知OpenVPN服务端10.0.0.0/24段的流量需要转发到该客户端:
iroute 10.0.0.0 255.255.255.0
如果多个客户端分配了10.0.0.0/24段的静态IP,就在每个对应客户端的ccd文件中添加对应主机的iroute规则,比如另一个客户端分配了10.0.0.3,就在它的ccd里加iroute 10.0.0.3 255.255.255.255。
- 第二步:调整服务端配置
确认server.conf中保留以下配置即可,原有其他配置无需改动:
# 已经注释掉redirect-gateway,不会把所有流量导到VPN # push "redirect-gateway def1 bypass-dhcp" # 推送两个VPN网段的路由,保证两个段的客户端都能找到对方 push "route 10.0.0.0 255.255.255.0 vpn_gateway 1" push "route 10.8.0.0 255.255.255.0 vpn_gateway 1" client-to-client route 10.0.0.0 255.255.255.0
- 第三步:配置服务端系统路由与防火墙
打开服务端的IP转发:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p
添加iptables规则放行tun接口的流量,避免跨段访问被拦截:
iptables -A INPUT -i tun0 -j ACCEPT iptables -A FORWARD -i tun0 -j ACCEPT iptables -A OUTPUT -o tun0 -j ACCEPT
- 第四步:重启服务验证
重启OpenVPN服务端,所有客户端重新连接后,测试跨段客户端互访即可正常生效,且普通公网流量仍走本地网关。
内容的提问来源于stack exchange,提问作者Jespertheend
相关产品推荐
相关产品推荐

