目录
Windows维护路由表,利用route命令,VPN完美异地组网
参考:https://itdog.one/747
视频:https://www.bilibili.com/video/BV1hS4y1i7oC/?spm_id_from=333.337.search-card.all.click&vd_source=cc0e43b449de7e8663ca1f89dd5fea7d
说到很多问题都能用route命令解决说明它很重要,但观众一定在想为什么这么重要的东西似乎完全没听过,这不应该啊。因为只有PC处于多网络的背景下,route命令才有可能会用到。它的作用是规划多网络下的数据传输,俗称路由表,因此route命令的本质是围绕windows路由表做增删改查的命令。
什么是多网络环境
比如我家庭PC有2张网卡,1张千兆1张万兆。
千兆的接入互联网,万兆的和家庭服务器直连,因为直连数据是本端ip直达对端ip的,数据不过路由器,所以是完全独立于家庭路由器之外的网络,虽然是个微型局域网但同样属于PC接入了2个网络。现实极少有人多插一张网卡, 但有线+无线一样能做到分别加入2个局域网。不少运维到现场都是笔记本插甲方内网网线,然后WIFI连手机热点实现同时上内外网。
再比如我公司办公室PC虽然只有1张网卡,但是通过PPTP、L2TP等方式让windows生成一个虚拟网卡,也等同接入了2个网络。
以上两个例子为了表明一个道理,多网络环境并不一定是物理网卡组建的,甚至很多第三方加速器软件,连虚拟网卡都不生成的。只要PC在链路上拥有访问多个局域网的权限,那么route命令就有用武之地,因为多网络下windows自己生成的路由表经常很蠢。比如前面举例的笔记本网线插内网,wifi连手机热点,时常出现只能上外网或只能上内网的情况。
这里我做个情景演示
录屏这台PC是我公司办公室电脑,目前WIFI没连,唯一工作的网络连接就是插了公司网线的物理网口。一般来说大公司网络都是内外网隔离的,要么只能上内网要么只能上外网,但我是管理员所以我这台106网段的电脑可以同时上内外网。比如我现在就能访问内网107网段下的海康监控平台。
接着通过互联网进行PPTP拨号,当连上家里的PPTP Server后就实现了远程异地组网,此时PPTP的网络连接就会让这台PC加入我的家庭局域网。
比如现在可以直接用内网IP打开家里的路由器页面,也可以用内网ip打开家里的NAS,可以看到我家是99网段。
虽然讲道理PC有两个网络连接,就理所应当该拥有同时访问这2个网络的能力。但现实是如果不维护路由表大概率只有糟心,稍后我会初始化路由表做案例演示,为方便对比先看看我维护好的路由表。
打开cmd 输入命令
route print -4
可以看到ipv4下的路由表规则还是比较多的。
重置ipv4网络
打开cmd执行
netsh int ipv4 reset
我非常建议当路由表彻底搞坏后选择重置网络,而不是用-f命令去清空路由表。
route -f
如果路由表彻底清空是任何网络能力都没有的,而重置网络路由表会保留基本的上内外网规则。
重置后需要重启电脑,开机后再次查看路由表 route print -4 可以看到规则简化了很多。
再次确认一下网络背景
办公室PC的物理网口ip没有变还是106网段,并且访问公司107网段的海康威视监控平台毫无问题。然后连接PPTP让这台PC加入我家的局域网,用家里内网ip访问NAS也毫无问题。至此看上去毫无破绽,但回过头你会发现公司内网的访问权限没有了!
如果现在放弃家庭局域网,断开PPTP连接,公司内网秒恢复。这局面就是前文所述的情况,表面看2个网络都连接通常,但实际不能同时使用只能二选一。那为什么维护路由表能解决这问题呢,因为路由表核心参数是网关。
网关是什么
可以理解成流量代理人,流量代理人又意味着啥,意味着网关设置成106.1客户端流量的下一跳地址必然是106.1。因为客户端的网络请求可以有无数个目标,客户端自己也不知道怎么抵达目的地,有了网关的概念,客户端就不需要想那么长远只要无脑把请求甩给下一跳网关即可。
比如本机ip是192.168.106.118 同事可能是106.117 但相同点在于大家网关都是106.1 这就意味着我和同事电脑上的所有网络指令最终都由106.1这个设备处理,至于106.1怎么处理那是它的事客户端无权干事。
可能有疑问从公司墙里出来的网线插电脑上,墙后边这跟网线可能跳了好几个交换机,那这些交换机是什么角色。告诉大家一个很简单的理解方式,你就把交换机当导线,无论过多少交换机你都当没有这会事,因为交换机不受理你的流量请求,三层交换机除外。用这个知识点带入一下,那我公司的106.1是个什么设备?要么是路由器要么是三层交换机。当然跳出本阶段的知识点,其实也有可能是防火墙之类的其他网络设备。
回归主题捋一下逻辑,这台PC任何网络请求都会交给106.1来处理。所以什么网站能上什么网站不能上由106.1这个设备决定。这条逻辑怎么体现出来呢,打开路由表。
0.0.0.0 代表全体网络目标,意思也就是所有默认的网络请求都会交给106.1处理。这条命令也碰巧解释了为什么路由表这么重要的东西似乎不维护也不影响使用,因为当电脑只有一个网络连接的时候,windows本机的路由表几乎没有意义因为这台电脑所有网络请求只能交给106.1处理。
但现在连接上PPTP后,能不能访问家里局域网由谁决定,由PPTP的网关决定。
上图不显示网关因为是虚拟连接,有点超纲,但这个连接的实质网关和ip相同。本机IP和网关相同的场景非常少见,一般只有在路由器上会出现,所以这个PPTP的连接你可以理解为接入了一个虚拟路由器,所有流量交给虚拟路由器PPTP处理了。
当PC拥有2个网络连接后,流量请求到底是交给106.1处理还是交给 PPTP 处理就成了Windows的难题。在路由表中的体现就是有2条0.0.0.0的全局网络规则,解决办法是告诉电脑XXXX网段是公司内网,这些流量应该由106.1处理。XXXX网段是家庭局域网,这些流量应该交给 PPTP 处理。而这个分配操作就叫维护路由表。
所以现在视线移回路由表,网络目标和子网掩码 指的是你流量访问的目的地。
网关指访问目标的流量由那个网关处理
可以看到接口就刚好代表了本机在这个网关下的ip地址
跃点数越小优先级越高,所以相同规则实际执行的是跃点数小的哪个,目前PPTP的跃点数小,说明我连上PPTP后,流量默认是由PPTP处理而非106.1处理。
这顺带就解答了,为什么连上PPTP后公司内网上不了。因为默认流量全由PPTP处理,而PPTP走的家庭局域网,在家庭局域网里访问公司内网地址自然是无法抵达的。
所以现在需要把公司内网的路由维护上。
route add -p 192.168.107.0 mask 255.255.255.0 192.168.106.1
route add 是添加路由的命令
-p 代表这条路由永久有效
-p后面跟上要访问的目标地址107.0代表107网段下的全部地址
接着输入掩码
最后用核心参数网关结尾
执行成功后,客户但所有访问107网段的流量就都会由106.1这个网关处理。
多网络规划思路
聪明的小伙伴至此可能会发现一个问题,凭什么连上PPTP后所有流量默认走PPTP。既然在公司正确路子就应该是默认流量从公司走,特殊的家庭局域网流量才走PPTP。
这样理解确实没错,因为这样网络效率最高,并且家里网段少用route add维护一两个网段就齐活。
但我这么做有2个原因:
①互联网请求走家里网络虽然流量绕圈子了,效率低,但绕回家后我的流量就能上谷歌了。
②走PPTP顺带流量就做了加密,可以保护自己的浏览记录不被公司的网络审计软件扒光。
最后拓展内容
如果你就是要默认流量走公司,最简单的办法直接改跃点数。
对于虚拟连接改跃点数是可能没用,因为还有一个强制优先级的设置。勾上这个选项意味着强制本机默认流量走PPTP,如果不勾则默认流量走本地连接。
实测一下网关切换选项
首先删掉刚添加的107网段路由将路由表恢复成默认状态。
route delete 192.168.107.0
应用设置并重启PPTP连接,然后测试连接公司内网无问题,连接家里NAS出现无法访问。
现象表明目前默认路由全指向了106.1导致访问家庭局域网的流量没指对网关,所以在路由表中把家庭局域网流量甩给PPTP的网关即可。
route add -p 192.168.99.0 mask 255.255.255.0 192.168.98.1
至此成功将默认流量从PPTP切换到106.1处理,并且实现同时上公司内网与家庭局域网。
网关的网关
本期内容理解后就对基础网络结构有了认知,简单概述客户端流量的下一跳永远都是网关设备,而网关设备接收到客户端的流量请求后又会在自己的路由表中查询数据包下一跳该传给谁,比如内网跨网段的数据应该甩给那个网关,而通向互联网的数据又该甩给那个网关。而下一个网关接收到数据后也依靠路由表执行着相同的操作,直到数据包抵达目的地则访问成功或彻底找不到下一跳网关访问失败。
命令整理
查看全部路由表:route print
查看IPV4路由表:route print -4
重置IPV4网络:netsh int ipv4 reset
清空路由表:route -f
添加路由:route add -p [目标网络地址] mask [子网掩码] [指定的网关]
添加路由示例①:route add -p 0.0.0.0 mask 0.0.0.0 192.168.1.1
添加路由示例②:route add -p 192.168.107.0 mask 255.255.255.0 192.168.106.1
删除路由:route delete [目标网络地址]
删除路由示例:route delete 192.168.107.0
Linux route路由表
什么是交换?什么是路由?什么是路由表?
1、交换是指同网络访问(两台机器连在同一交换机上,配置同网段的不同IP就可以直接通讯)
2、路由就是跨网络访问(路径选择)
3、路由表是记录路由信息的表,在Linux中首先是一张可见的,可更改的表,它的作用就是当数据包发到Linux的时候,系统(或者说内核)就根据这张表中定义好的信息来决定这个数据包接下来该怎么走
route 命令
选项:
-v : 显示详细信息。
-n : 不执行 DNS 反向查找(即不解析名称),直接显示数字形式的 IP 地址。
-e : netstat 格式显示路由表。
-C : 打印 Linux 内核的路由缓存。
add : 增加路由记录 / del :删除路由记录
-net : 目的地址是一个网络。
-host : 目的地址是一台主机。
netmask : 目的地址的网络掩码。
gw : 路由数据包通过的网关。
metric : 设置路由跃点。
dev: 为路由指定的网络接口
字段分析
使用 route or route -n 命令查看内核路由表:
route
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 100 0 0 ens33
default _gateway 0.0.0.0 UG 1000 0 0 br0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
192.168.29.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
_gateway 0.0.0.0 255.255.255.255 UH 100 0 0 ens33
route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.29.2 0.0.0.0 UG 100 0 0 ens33
0.0.0.0 192.168.10.1 0.0.0.0 UG 1000 0 0 br0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
192.168.29.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
192.168.29.2 0.0.0.0 255.255.255.255 UH 100 0 0 ens33
字段分类说明:
字段 | 说明 |
---|---|
Destination | 目标网络或目标主机。Destination 为 default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关(这里是 10.139.128.1)。 |
Gateway | 网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关(同一个局域网内2台主机通信不需要经过网关)。 |
Genmask | Destination 字段的网络掩码,Destination 是主机时需要设置为 255.255.255.255 ,是默认路由时会设置为 0.0.0.0 。 |
Flags | 见下文说明。 |
Metric | 跃点,指到达指定网络所需的中转数,是大型局域网和广域网设置所必需的 (不在 Linux 内核中使用)。 |
Ref | 路由项引用次数 (不在 Linux 内核中使用)。 |
Use | 此路由项被路由软件查找的次数。 |
Iface | 网卡名字,例如 eth0 ;要去往这个网段需要使用哪一个网络接口。也就是 eth0 这张网卡。 |
可以看到 Flags 下面有许多字母组合,他们分别的含义是:
U (route is up) :该路由处于活跃;
H (target is a host) :目标是一部主机 (IP) 而非网域(子网掩码是 255.255.255.255);
G (use gateway) :需要透过外部的主机 (gateway) 来转递封包(一般指向默认网关);
R (reinstate route for dynamic routing) :使用动态路由时,恢复路由资讯的旗标;
D (dynamically installed by daemon or redirect) :已经由服务或转 port 功能设定为动态路由
M (modified from routing daemon or redirect) :路由已经被修改了;
! (reject route) :这个路由将不会被接受(用来抵挡不安全的网域)。
路由种类
路由类型 | 子网掩码 | Flag字段 | 描述 |
---|---|---|---|
主机路由(单个) | 255.255.255.255 | UH | 指向单个 IP 地址或主机名的路由记录 |
网络路由(网段) | 255.255.255.0 | U | 代表主机可以到达的网络,比如说目的地址是 192.168.10.xxx |
默认路由(所有) | 0.0.0.0 | UG | 当主机不能在路由表中查找到目标主机的 IP 时,数据包就发到默认路由上 |
例子
1、主机路由:
主机路由是路由选择表中指向单个IP地址或主机名的路由记录。主机路由的Flags字段为H。
在下面示例中,本地主机通过IP地址192.168.1.1的路由器到达IP地址为10.89.0.10的主机。
添加主机路由时,需要指定网络 ID 和主机 ID,此时需要设置 netmask 255.255.255.255。
Destination Gateway Genmask Flags Metric Ref Use Iface
10.89.0.10 192.168.1.1 255.255.255.255 UH 0 0 0 eth0
2、网络路由:
网络路由是代表主机可以到达的网络。网络路由的Flags字段为N。例如,在下面的示例中,本地主机将发送到网络192.19.12的数据包转发到IP地址为192.168.1.1的路由器。
添加网络路由时,只需指定网络 ID,通过 netmask 设置掩码长度。
Destination Gateway Genmask Flags Metric Ref Use Iface
192.19.12 192.168.1.1 255.255.255.0 UN 0 0 0 eth0
3、默认路由:
当主机不能在路由表中查找到目标主机的IP地址或网络路由时,数据包就被发送到默认路由(默认网关)上。默认路由的Flags字段为G。
例如,在下面的示例中,默认路由是IP地址为192.168.1.1的路由器。
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
添加路由
1、添加主机路由
route add -net 10.0.0.10 netmask 255.255.255.255 gw 10.139.128.1 dev eth0
route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.10 10.139.128.1 255.255.255.255 UGH 0 0 0 eth0
...
2、添加网络路由
route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.139.128.1 dev eth0
route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 10.139.128.1 255.255.255.0 UG 0 0 0 eth0
...
3、添加设置默认网关跃点为 80
route add default gw 192.168.1.1 metric 80
route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
...
4、删除路由
route del default gw 192.168.1.1 metric 80
添加到主机的路由
# route add -host 192.168.1.2 dev eth0:0
# route add -host 10.20.30.148 gw 10.20.30.40
添加到网络的路由
# route add -net 10.20.30.40 netmask 255.255.255.248 eth0
# route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
# route add -net 192.168.1.0/24 eth1
添加默认路由
# route add default gw 192.168.1.1
删除路由
# route del -host 192.168.1.2 dev eth0:0
# route del -host 10.20.30.148 gw 10.20.30.40
# route del -net 10.20.30.40 netmask 255.255.255.248 eth0
# route del -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
# route del -net 192.168.1.0/24 eth1
# route del default gw 192.168.1.1 //route del default 删除所有的默认路由
添加一条默认路由
# route add default gw 10.0.0.1 //默认只在内存中生效
开机自启动可以追加到/etc/rc.local文件里
# echo "route add default gw 10.0.0.1" >>/etc/rc.local
添加一条静态路由
# route add -net 192.168.2.0/24 gw 192.168.2.254
要永久生效的话要这样做:
# echo "any net 192.168.2.0/24 gw 192.168.2.254" >>/etc/sysconfig/static-routes
添加到一台主机的静态路由
# route add -host 192.168.2.2 gw 192.168.2.254
要永久生效的话要这样做:
# echo "any host 192.168.2.2 gw 192.168.2.254 " >>/etc/sysconfig/static-routes
注:Linux 默认没有这个文件 ,得手动创建一个
linux环境下使用route指令设置多个网络连接的优先级(修改metric跃点数)
https://blog.csdn.net/doujingwei0825/article/details/128418671?spm=1001.2014.3001.5502
4g/wifi/以太网多网卡路由配置实例
ubuntu双网卡实现内网和外网访问实例
https://blog.csdn.net/qqcc0000/article/details/101436663?spm=1001.2014.3001.5502