在 windows 操作系统中,同时启动有线和无线网卡后,有线网卡所连内网的跨网段站点无法正常访问的原因和解决方案

同时启用有线网卡和无线网卡时,有线网卡所练级内网环境无法正常访问

Windows 主机同时启用有线网卡和无线网卡:

  • 有线网卡:接入内网环境,确保能访问内网环境
  • 无线网卡:连接手机热点,确保能连接到互联网

使用这种方案,经常会出现这样的问题:

  • 访问同网段内网设备:正常
  • 访问跨网段内网设备:失败

这是因为虽然有线网卡配置了网关,但系统并未把跨网段流量从有线网卡发出。根本原因在于 Windows 多网卡环境下的默认路由竞争机制。


Windows 上的路由信息

在 Windows 上可以通过 route print -4 可以查看本地的路由信息:


这里显示的路由条目中,网关就是下一跳的地址,根据路由的"网关",可以将路由分为两类

  • on-link:直连路由,网关为 on-link 表示目标就在链路上,可以直接到达。
  • gateway:网关路由,不能直接到达目标网络,需要经过下一跳,所以网关为一个具体 IP地址。

Windows 上的直连和默认路由是这样生成的

  • 直连路由:给网卡配置 IP 地址和子网掩码后,会自动在本地路由表中生成一条到达该该网卡所在网段的直连路由。
  • 默认路由:给网卡配置网关地址后,会自动再本地生成一条出接口是该网卡的默认路由:0.0.0.0/0

Windows 查找路由的规则

本地主机 和 目标主机 在同一网段时:直接使用该网卡生成的直连路由(on-link)发送数据包。

将 目标 IP 与网卡配置的IP地址的 子网掩码 进行 AND操作后得到网络号,若两者前缀一致就说明是位于同一网络。

本地主机 和 目标主机 在不同网段时:Windows 会按照以下流程找到最终的路由:

找出所有目的网络能覆盖目标 IP 的路由,然后从中筛选出 掩码最长 的那一批(这就是最长掩码匹配原则)

  • 网络前缀最长的路由唯一:若能找到一条网络前缀最长的路由,那么就使用这条路由来转发IP分组。
  • 网络前缀最长的路由有多条:存在多条网络前缀一样长的路由,就会选择 路由的 metric(跃点数)+ 网卡的 metric(网卡优先级) 值最小的路由。

这也就解释了为什么内网站点有时同网段能访问,跨网段不行:

  • 同网段:直接通过直连路由(on-link )发送数据包,肯定能成功;
  • 跨网段:跨网段访问内网站点时,数据包流量从无线网卡发送出去了。

在内网网卡 和 外网网卡 都配置网关的情况下,会生成两条默认路由,在进行路由匹配时,因网络前缀长度一致,所以会比较 (route metric + interface metric)的值,Windows 默认无线网卡的metric更低,所以流量从无线网卡发出,自然无法访问内网另一网段。

Windows 多网卡配置的解决方案

方法一内网不配置网关地址,确保不生成两条默认路由(0.0.0.0/0),配置静态路由,强制让去往目标网络的流量通过该网卡所在网络的网关地址,保证流量能正常从内网的有线网卡出去。


方法二:正常配置双网关,使有线网卡的 interface metric 更小,但是这种方式存在访问外网的流量从内网网卡出去,如内网是没有配置NAT地址转换,和互联网完全隔绝的,是不能访问到互联网的。

为什么配置静态路由就行了?因为在跨网段访问进行最长掩码匹配选路由时,静态路由的网络前缀就是最长的,自然也就能选择到它。


Windows 中管理路由的相关命令:

添加静态路由
route add <目标网络>  mask  <子网掩码>   <网关地址>   [metric <跃点数>]  [if <接口编号>]

# 这条路由临时生效,重启后就失效了,通过 -p 选项可以持久生效
# 指定了网关地址,就不用指定出接口了,Windows 会根据“网关 IP 地址属于哪个网卡的网段”来自动推导出接口

删除静态路由
route delete 目标网络  目标网络的子网掩码

查看静态路由
route print -4

例如:添加一条到主机90.46.137.33 的路由,因为这个主机和我本地不在同一网段,所以要指定下一跳为本电脑所在网段的网关地址。

route add 90.46.137.33 mask 255.255.255.255 90.46.4.94

posted on 2025-11-20 16:59  一直小爪子  阅读(60)  评论(0)    收藏  举报