作者:君临天下

现在笔记本很多又有无线网卡,又有有线网卡。如何达到利用这两个网卡不用切换,能访问到内网,和外网?其实很简单,利用路由可以搞定,看看以下分享的案例。分步骤的说明了这个问题。

一、背景

某企业用户使用的运行 Windows XP 的计算机装有两块网卡,网卡 1 通过 PPPoE 连接到 Internet,网卡 2 通过局域网连接到企业内部网络,企业内部网络为 172.16.0.0/16,内部网络网关为 172.16.0.1,网卡 2 的 IP 地址为 172.16.0.17。

二、症状

在没有连接到 Internet 的情况下,该用户可以访问整个企业内部网络。当该用户连接到 Internet 后,便会失去企业内部网络 172.16.0.0 的连通性。该用户在网络连接属性中正确设置了 IP 地址,子网掩码和默认网关。

三、分析
在该用户不连接到 Internet 时,我们在命令行中输入:route print 显示路由表,显示所示,目前的默认网关是 172.16.0.1。ping 内部网络 172.16.0.0 均显示正常。
接下来该用户接入 Internet,然后我们再次输入 route print 显示路由表,发现路由表默认路由发生了变化,默认网关从 172.16.0.1 变为 61.30.30.61,这个是网卡 1 连接的网关地址。这时我们再 ping 172.16.0.0 这个网络,显示超时。 
由此我们确认是由于 Windows 在 PPPoE 协商后 “擅自” 更改了默认路由造成的路由错误,将发往内网的数据错误的发送到了 Internet。

四、解决方案

对于 Internet,我们必须使用缺省路由。在内网网关不能提供 RIP 信息的情况下,我们只能通过设置静态路由将属于内网的数据发往 172.16.0.17。) 
在 cmd 下输入:

route -p add 172.16.0.0 mask 255.255.0.0 172.16.0.17 metric 1 if []

这里的 [] 代表出口 interface 的 index,这个值你可以使用 route print 命令看到。注意这个值是 16 进制,所以你必须在前边加上 0x。比如出口 interface 是 Local Area Connection 2,对应的 index 是 0x10003,则这两条命令应写为:

route -p add 172.16.0.0 mask 255.255.0.0 172.16.0.17 metric 1 if 0x100034 b8 X9 V, o5 w. f9 B

现在我们再来使用 route print 查看路由表。在路由表中出现了条新的路由:
network destination=172.16.0.0 netmask=255.255.0.0 gateway=172.16.0.17

这条路由表示,对去往 172.16.0.0/16 的数据选用 172.16.0.17 作为网关。这样就可以确保去往内部网络的数据通过正确的网关进行路由。

五、FAQ

Q:上边例子中的 0x10003 是怎么得来的?
A:使用 route print 命令得到的显示。在最开始的几行显示的 Interface List 中。

Q:如果我不写 if 参数会怎样?
A:Windows 会自动选择一个最合适的 interface。但是 Windows 不保证这个选择就是你想要的。

Q:route print 命令显示的 metric 是什么意思?
A:metric 是十进制的。它代表当出现多条针对同一个 prefix 的不同路由时,Windows 优先使用哪一个路由。Metric 值约小优先值越高。例如,对于 172.16.0.0/16 这个网络,如果有一个路由的 metric 是 40,另一个是 39,那么 Windows 将优先使用 metric 是 39 的路由。如果在某个时刻,这个路由无效了 (例如网络中断),那么将使用 metric 是 40 的路由。如果 metric 39 的路由后来恢复了,将 Windows 将跳回使用这个路由。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注