Windows Route 管理

引子

==============================================================

还是一个老场景,需要让一台windows 电脑同时访问内网和外网。很多年前win7上折腾过,后来在win10 下几乎没遇到过问题,也就没再深究。
但是近期的场景下,老方案并没有生效,于是做了更深一点的探索。

场景

内网是一台核心交换机下连一个二层交换机,核心给这个下联口的地址是 172.20.1.x,二层交换机并没有直连服务器,要从核心转一圈,并且服务器网段为 172.20.11.x。
电脑直接插二层,会通过DHCP直接获取内网地址 172.20.1.x;可以正常访问服务器。
需要外网提供远程环境,这台电脑做内网跳板。外网的wifi用手机热点,所以外网网段常换。


现象是,wifi热点连接后,外网正常,但内网走不了,连内网自己的172.20.1.1都不可达。

排查问题

首先还是检查路由表

# 显示当前路由
route print -4 

检查的要点是,是否有多条 0.0.0.0 的路由,且最后的网关地址不一样。
如果说网关地址不同,但访问网段都是 0.0.0.0 ,代表所有网段的流量都要分别在这两个网关上走,显然是会影响访问速度,且会导致内网无法访问。

其次,需要检查外网的网关地址,是否和内网地址冲突。因为内网地址通常不可更改,所以如果冲突,需要外网网关做变更。手机热点通常还是192.168.0.0/24, 这次也有见到给 172.20.0.0/24的情况。

所以处理的思路很清晰,解决网段流量 和 网关的对应关系,并且确保外网网关没有和内网冲突.

解决过程

Step 1

首先删除多余的 0.0.0.0 路由。
注意,如果是远程操作,千万不要直接执行

route delete 0.0.0.0 

而是写内网路由的完整route:

route delete 0.0.0.0 mask 0.0.0.0 172.20.1.x

Step 2

  • 先查看路由表,确认删除的冲突条目已经处理完毕
  • 然后添加内网路由
route add 172.20.1.0 mask 255.255.255.0 172.20.1.1 -p

测试内网ping。

新问题

一般情况下,到这里就可以收工了,但我遇到相对复杂点的情况,就是既不能访问服务器,又不能ping通网关。这问题也卡了很久,多方查资料发现,route上还有个参数值叫 metric,中文为跃点数。
这个参数在【网络共享中心/网络适配器设置】 里是可以进行更改的,当然已经在操作route的情况下,直接设置也是有效的。

Step 3

metric值指定的是优先级,顾名思义,值越大优先级越高。再次查看配置好的路由表,发现两个条目的优先级一样。那么处理方式也简单了。
再次重复 step 1 ~ 2, 重建route,但是这次add的路由要增加 metric 参数,并且数值要大于0.0.0.0 条目最后的数值。

route add 172.20.1.0 mask 255.255.255.0 172.20.1.1 metric 50 -p

再次测试路由,172.20.1.1 可达了。

Step 4

但是此时我们仍然无法访问内网服务器,原因是服务器使用的网段并不是172.20.1.x/24。

参考route的各个参数值意义,除了metric值外,其他参数中 0 代表的总是所有值。所以为了让172.20.1.x/24 和 172.20.11.x/24互通,有两种解决思路。

Plan A
  • 通过修改子网掩码,让整个网络自行实现互通。

可以使用ip计算器工具,计算出合适的掩码范围。但是这样事实上需要路由设备(此处是核心交换机)彻底修改路由逻辑来支持,且不能利用它的路由功能实现网段的隔离,显然不符合我们的业务要求。

Plan B
  • 通过给本机的route上增加一条 172.20.11.x/24 ,网卡172.20.1.x 的路由不就好了?

当然这样是会报错的。

Plan C
  • 至少服务器和二层交换机的网段都在 172.20.x.x上,按照路由的编写规则,我只要考虑写成 172.20.0.0 不就ok了?

以上正解。

所以最终执行:

route add 172.20.0.0 mask 255.255.255.0 172.20.1.1 metric 50 -p

【但是!】如果你的热点给的网关也是172.20.x.x开头,这样就一样会冲突,或者导致外网不可达

标签: Windows, 网关, 环境, route, 路由, 网段, Route

相关文章推荐

添加新评论,含*的栏目为必填