背景
同时连接了网线和WIFI。
网线使用内网,WIFI使用外网。
然而网线的网络几乎只提供内网(外网很多地址打不开),在连接网线后,DNS服务器被设为内网的DNS服务器,因此几乎不能访问外网。WIFI成了摆设。(因为WIFI的DNS没生效)
因此我们作出如下操作:
- 访问所有网络时,使用WIFI的路由(DNS)
- 访问内网时,使用网线提供的路由
正文
以下是windows上的命令
route delete 0.0.0.0 mask 0.0.0.0
route add 0.0.0.0 mask 0.0.0.0 172.16.15.1
route add 172.1.0.0 mask 255.255.0.0 172.1.11.254
三行代码的含义如下
-
删除默认路由规则。(0.0.0.0)
-
添加默认路由规则,第一个0.0.0.0在ip中,意味着所有的地址;第二个0.0.0.0跟在mask后面,是子网掩码,0.0.0.0意味着所有的ip都在同一个局域网下。那么很显然,这个意思就是外网(以及内网)。
0.0.0.0可以被认为是ip中的通配符。
172.16.15.1
是WIFI的路由地址,一般来说,这个地址就是路由器的地址,也作为DNS服务器。
第二行一整行的含义就是,访问任意网络时,使用WIFI的路由(DNS)。
-
添加内网路由规则
172.1.0.0
是我们内网的网络号,255.255.0.0
掩码则意味着该网络号中所有ip处于同一个子网。
因此意思就是,对于内网的任意ip,我们都使用172.1.11.254
作为DNS路由。
默认行为
当网络发生变动时,windows会自动调整通配的路由(也就是上面写的0.0.0.0
)。这也就意味着,用命令或者什么方式设置0.0.0.0的路由后,当网络发生变动,0.0.0.0
的路由规则会被覆盖。
因此在上面的三行代码中,前两行在重新连接WIFI后,都应当重新执行。
上面的前两行可以被以下命令替换
route change 0.0.0.0 mask 0.0.0.0 172.16.15.1
powershell
# 使用以下命令查看路由规则
Get-NetRoute
# 添加路由 route add 172.1.0.0 mask 255.255.0.0 172.1.11.254
New-NetRoute -DestinationPrefix "172.1.0.0/16" -NextHop "172.1.11.254"