network - 双WAN网络¶
::: tip 双WAN网络 何为双WAN网络呢,比如对于windows电脑可能存在连接以太网网线的同时,也连接着WiFi,或者说同时连接两个WiFi,两个以太网等等,这就是双WAN网络的情况。 :::
对于双WAN网络,分别记作WAN1和WAN2,并且假定WAN1连接的是客户的内网,WAN2可以连接真正互联网,我们存在这种需求,我们想实现对于特定IP,我们想让其走客户的内网WAN1,而其他的外网网络走的是WAN2.
路由器表¶
::: tip 什么是路由表 只要是有操作系统的主机,比如路由器,网关,电脑等,都存在路由器表,路由器表其实就是为了告诉电脑主机如何发送网络包。 :::
我们先用命令route print -4
查看windows电脑的路由表。
C:\Users\Administrator>route print -4
....
IPv4 路由表
===========================================================================
活动路由:
网络目标 网络掩码 网关 接口 跃点数
0.0.0.0 0.0.0.0 192.168.5.1 192.168.5.5 25 # WAN1
0.0.0.0 0.0.0.0 192.168.6.1 192.168.6.160 50 # WAN2
192.168.5.0 255.255.255.0 在链路上 192.168.5.5 281
192.168.6.0 255.255.255.0 在链路上 192.168.6.160 306
..... 还有其他项,在这里省略了
问题点¶
在上述的路由器表中第一项的192.168.5.x就是客户的内网WAN1,第二项中192.168.6.x就是可以访问真正互联网的WAN2。 在上面的路由表下,你会发现如下几个事情:
- 问题1:访问外网时,走的通道是WAN1,而不是WAN2,如果WAN1禁止了访问外网,那么你是访问不了外网的;
- 出现这种情况,是由于WAN1的跃点数(metric)为25,WAN2的是50,当有两个一样可以到达的WAN网口时,电脑主机会优先选择跃点数小的网口。
- 问题2:访问客户内网时,如果目标ip不是192.168.5.x(WAN1)网段的,比如你访问的是192.168.2.x,不在WAN1对应的网段(192.168.5.x)内,那么你就有可能访问不了;
- 出现这种情况,是电脑主机上没有找到该ip的正确访问路径。
问题1(跃点数)¶
对于上述提到的问题1,默认的跃点数是电脑主机自动检测的结果,跃点数低的网卡说明网络时延会比跃点数高的一方低。只要将你想要访问外网网卡(WAN2)的跃点数改成静态的就行。
- 打开网卡面板,找到你要设置的网卡WAN2
- 右键打开属性,跳到高级,去掉自动跃点,填入一个足够小的数。
问题2(路由表)¶
对于问题2,如果你要访问的内网IP地址不在路由表里面,那你需要设置一条静态路由告诉电脑主机,如何发包。
- 如果你忘记了,如何设置,可以执行
route /?
来查看静态路由的设置。
C:\Users\Administrator>route /?
操作网络路由表。
ROUTE [-f] [-p] [-4|-6] command [destination]
[MASK netmask] [gateway] [METRIC metric] [IF interface]
-f 清除所有网关项的路由表。如果与某个
命令结合使用,在运行该命令前,
应清除路由表。
-p 与 ADD 命令结合使用时,将路由设置为
在系统引导期间保持不变。默认情况下,重新启动系统时,
不保存路由。忽略所有其他命令,
这始终会影响相应的永久路由。
-4 强制使用 IPv4。
-6 强制使用 IPv6。
command 其中之一:
PRINT 打印路由
ADD 添加路由
DELETE 删除路由
CHANGE 修改现有路由
destination 指定主机。
MASK 指定下一个参数为“netmask”值。
netmask 指定此路由项的子网掩码值。
如果未指定,其默认设置为 255.255.255.255。
gateway 指定网关。
interface 指定路由的接口号码。
METRIC 指定跃点数,例如目标的成本。
用于目标的所有符号名都可以在网络数据库
文件 NETWORKS 中进行查找。用于网关的符号名称都可以在主机名称
数据库文件 HOSTS 中进行查找。
如果命令为 PRINT 或 DELETE。目标或网关可以为通配符,
(通配符指定为星号“*”),否则可能会忽略网关参数。
如果 Dest 包含一个 * 或 ?,则会将其视为 Shell 模式,并且只
打印匹配目标路由。“*”匹配任意字符串,
而“?”匹配任意一个字符。示例: 157.*.1、157.*、127.*、*224*。
只有在 PRINT 命令中才允许模式匹配。
诊断信息注释:
无效的 MASK 产生错误,即当 (DEST & MASK) != DEST 时。
示例: > route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1
路由添加失败: 指定的掩码参数无效。
(Destination & Mask) != Destination。
示例:
> route PRINT
> route PRINT -4
> route PRINT -6
> route PRINT 157* .... 只打印那些匹配 157* 的项
> route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2
destination^ ^mask ^gateway metric^ ^
Interface^
如果未给出 IF,它将尝试查找给定网关的最佳
接口。
> route ADD 3ffe::/32 3ffe::1
> route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2
CHANGE 只用于修改网关和/或跃点数。
> route DELETE 157.0.0.0
> route DELETE 3ffe::/32
- 设置静态路由的命令语法如下:
> route add 157.0.0.0 mask 255.0.0.0 157.55.80.1 metric 3 if 2
destination^ ^mask ^gateway metric^ ^
Interface^
# metric 后面的部分可以省略
- 比如对于**问题2**,你要访问
192.168.2.x
,其子网掩码为255.255.255.0
,你要添加的静态路由命令如下:
如果你不知道子网掩码,那么可以直接使用255.255.255.255
,这样就只有那个ip可以访问了。