OpenVPN无法将客户端流量路由至Azure对等网络内CentOS主机的问题求助
OpenVPN无法将客户端流量路由至Azure对等网络内CentOS主机的问题求助
看起来你的Azure VNet peering已经正常工作了,OpenVPN服务器和CentOS能互ping,但客户端没法跨网段访问CentOS,核心问题确实是路由和转发配置没到位。我给你一步步梳理需要检查和配置的点:
1. 开启OpenVPN服务器的内核IP转发
Linux默认关闭IP转发功能,这是实现路由转发的基础,必须先开启:
- 先查看当前状态:
sysctl net.ipv4.ip_forward,如果输出是net.ipv4.ip_forward = 0,说明未开启 - 临时开启:
sysctl -w net.ipv4.ip_forward=1 - 永久生效(重启后不失效):编辑
/etc/sysctl.conf,找到net.ipv4.ip_forward行,修改为net.ipv4.ip_forward=1,然后执行sysctl -p让配置立即生效
2. 配置OpenVPN服务器向客户端推送目标网段路由
客户端需要明确知道访问CentOS所在的10.5.0.0/24网段(如果你的实际网段不同,替换成对应值)的流量要走OpenVPN隧道:
- 编辑OpenVPN服务器的配置文件(通常是
/etc/openvpn/server.conf) - 添加一行路由推送规则:
push "route 10.5.0.0 255.255.255.0" - 重启OpenVPN服务:
systemctl restart openvpn@server(如果你的服务名不同,替换为实际名称) - 客户端重新连接后,检查本地路由表:Windows用
route print,Linux/macOS用netstat -rn,确认是否存在10.5.0.0/24的路由指向OpenVPN虚拟网卡
3. 配置OpenVPN服务器的NAT转发规则
客户端的源IP是OpenVPN内网段的10.6.0.2,CentOS主机收到请求后,回程流量可能找不到返回客户端的路径,因此需要在OpenVPN服务器上做NAT转发:
如果你用firewalld防火墙:
- 执行命令开启伪装转发:
firewall-cmd --add-masquerade --permanent - 重载防火墙配置:
firewall-cmd --reload
如果你用iptables防火墙:
- 添加NAT规则:
iptables -t nat -A POSTROUTING -s 10.6.0.0/24 -d 10.5.0.0/24 -j MASQUERADE - 保存规则:CentOS7执行
iptables-save > /etc/sysconfig/iptables,CentOS8+执行iptables-save > /etc/iptables/rules.v4
4. 检查Azure网络安全组(NSG)和路由表
- OpenVPN服务器所在NSG:需要允许来自
10.6.0.0/24的流量(包括ICMP)转发到10.5.0.0/24网段 - CentOS主机所在NSG:需要允许来自
10.6.0.0/24的ICMP(ping)流量入站 - VNet路由表:虽然peering已生效,但要确认CentOS所在VNet的路由表中,
10.6.0.0/24的下一跳指向对等VNet(Azure peering默认会自动添加这条路由,可登录Azure Portal验证)
5. 排查验证
- 在OpenVPN服务器上抓包:
tcpdump -i any host 10.6.0.2 and host 10.5.0.4,查看是否有客户端发送的ping请求,以及服务器是否将流量转发出去 - 在CentOS主机上抓包:
tcpdump -i any host 10.6.0.2,查看是否收到ping请求,是否有回复包 - 如果CentOS能收到请求但无回复,大概率是本地防火墙(firewalld/iptables)阻止了来自
10.6.0.0/24的流量,需要添加允许规则
按照这些步骤配置后,应该就能解决客户端无法ping通CentOS的问题了。
备注:内容来源于stack exchange,提问作者Swiftniscate
相关产品推荐
相关产品推荐

