VPN 路由和策略是怎么生效的?为什么连上 VPN 还是访问不了内网?
简化版
连上 VPN 只代表隧道或控制面建立成功,不代表业务流量一定能通。真正访问内网还要满足:客户端路由把目标网段送进 VPN、VPN 网关有到目标的路由、防火墙策略放行、目标服务器有回程路由、NAT 和 ACL 不冲突、DNS 能解析到正确地址。排查要从客户端路由表、网关路由、抓包和双向回包逐层看。
详细版
VPN 访问失败常见链路:
Client -> VPN 虚拟网卡 -> VPN 网关 -> 内网路由/防火墙 -> 目标服务
^ |
|------------------------ 回程路由 -----------------------|
任意一段不通都会表现为“VPN 已连接但访问不了”。比如客户端没有 10.0.0.0/8 的 VPN 路由,请求根本没进隧道;网关能收到请求但防火墙没放行;目标服务器回包走了默认网关而不是 VPN 回程;或者内网网段和本地家庭网段冲突。
面试回答要把路由、策略、DNS、NAT、回程、MTU 分开。不要只说“检查防火墙”,因为 VPN 问题经常是多层配置共同造成的。
完整版教学
一、VPN 连接成功不等于数据面成功
VPN 通常有控制面和数据面。控制面负责认证、密钥协商、隧道建立;数据面负责真正转发业务包。客户端显示 connected,说明控制面大概率成功,但数据面还要看路由、策略和回包。
控制面: 登录、证书、密钥协商、隧道建立
数据面: IP 包进隧道、网关转发、目标响应、回包回来
很多排障误区是看到客户端连接成功就认为 VPN 没问题。实际可能只是隧道建立了,业务网段没有下发,或者网关没有允许该用户组访问目标资源。
VPN 排障先分控制面和数据面:能连上只是第一步,能双向转发才算业务可用。
二、客户端路由决定流量是否进隧道
客户端访问一个 IP 时,会查本机路由表。分流 VPN 通常只下发内网网段路由;全隧道会下发默认路由。如果目标网段没有匹配到 VPN 虚拟网卡,流量就会走本地网关,VPN 当然看不到。
目标 10.20.1.5
路由表:
10.20.0.0/16 -> VPN
0.0.0.0/0 -> 家庭路由器
结果: 进 VPN
如果公司只下发了 10.10.0.0/16,而你访问 10.20.1.5,请求不会进隧道。排查第一步就是看客户端路由表,而不是直接改服务端。
三、网关路由决定包能否到目标网段
VPN 网关收到客户端包后,还要知道如何到达目标内网。如果目标在另一个 VLAN、云 VPC 或分支网络,网关路由表必须有下一跳。否则包到网关就停住了,或者被发到错误出口。
VPN Client 10.250.0.10 -> 目标 10.30.1.20
VPN Gateway 路由:
10.30.0.0/16 -> Core Router
站点到站点 VPN 中,路由型 VPN 还可能通过 BGP 学习远端网段。BGP 没起来、路由被过滤、优先级不对,都会导致隧道在但流量不通。
四、防火墙策略和用户组授权也会拦截
现代 VPN 不一定是“连上就全网通”。网关可能按用户组、源地址池、目标网段、端口协议做访问控制。研发组可以访问 Git,财务组可以访问 ERP,外包组只能访问堡垒机。路由正确但策略拒绝,会表现为超时或连接被拒绝。
| 检查项 | 示例 |
|---|---|
| 源地址池 | 10.250.0.0/24 |
| 用户组 | dev, finance |
| 目标网段 | 10.30.0.0/16 |
| 端口协议 | TCP 443、22、3306 |
排查时要确认命中的安全策略是哪条。很多防火墙有策略命中日志,这是定位“路由通但被拦”的关键证据。
五、回程路由是最容易漏的一半
请求包能到目标服务器,不代表响应能回来。目标服务器或它的默认网关必须知道客户端 VPN 地址池如何返回。如果回包走了普通公网出口或其他内网路径,客户端就收不到。
请求: 10.250.0.10 -> 10.30.1.20 走 VPN 网关
响应: 10.30.1.20 -> 10.250.0.10 若不知道回 VPN,就丢失
解决方式有两类:给内网核心路由添加到 VPN 地址池的回程路由,或者在 VPN 网关做源 NAT,把客户端地址转换成内网已知地址。源 NAT 简单,但会丢失真实客户端 IP,审计和细粒度控制会受影响。
六、DNS 错误会让你访问错目标
很多人以为访问不了是路由问题,实际是域名解析到公网地址、旧地址或本地 DNS 解析失败。VPN 场景里要确认内网域名走企业 DNS,公网域名走本地或可信 DNS,避免 split DNS 配置错误。
git.company.local -> 应解析为 10.30.1.20
如果解析为公网旧 IP 或 NXDOMAIN,路由再正确也没用
排查方法是同时查域名和 IP。先直接访问目标 IP 判断网络路径,再用 nslookup 或 dig 判断 DNS 是否正确。这样能把 DNS 和网络转发分开。
七、NAT 和网段冲突会制造隐蔽问题
如果用户本地网段和企业内网重叠,例如都是 192.168.1.0/24,客户端路由可能优先认为目标在本地局域网,根本不会送进 VPN。Site-to-Site 两端网段重叠时,路由也无法区分远端和本地。
常见解决方案:
| 问题 | 方案 |
|---|---|
| 远程用户本地网段冲突 | 企业使用不常见网段、下发更具体路由 |
| 两站点网段重叠 | 双向 NAT、重新规划网段 |
| 需要隐藏真实网段 | VPN 网关做 NAT 映射 |
网段规划越早做好,VPN 后期问题越少。
八、常见误区与追问
- 误区:VPN 显示 connected 就说明网络一定通。 connected 多数只代表控制面成功,数据面还要看路由和策略。
- 误区:访问不了一定是防火墙。 也可能是客户端路由、网关路由、回程路由、DNS、NAT 或 MTU。
- 误区:只抓客户端包就够了。 需要在客户端、VPN 网关、目标侧分别确认请求和响应是否经过。
- 误区:源 NAT 总是最佳方案。 它能解决回程,但会隐藏真实客户端 IP,影响审计和权限控制。
- 追问:如何快速判断是否是回程问题? 在目标侧抓包看是否收到请求并发出响应,再看响应是否回到 VPN 网关。
- 追问:为什么 IP 能访问但域名不能? 多半是 DNS 或 split DNS 配置问题,域名未走内网 DNS 或解析结果错误。
- 追问:策略路由在 VPN 中有什么用? 可以按源用户、目标网段、应用或出口选择不同路径,而不只依赖普通目的路由。
九、加强记忆
VPN 路由排障按“客户端路由进不进、网关路由到不到、策略放不放、目标回不回、DNS 对不对、NAT 冲不冲”来记。连接成功只是控制面,业务访问要看双向数据面。能把请求路径和回程路径都画出来,VPN 问题就不再玄学。