Total Pageviews

Thursday 30 July 2015

谈谈路由表和VPN



VPN 是虚拟专用网的简称,即一套在公用网络上建立专用网络的技术,比如A、B两个公司要共享些文件,但是呢又不给上外网,这两个公司之间又没钱铺条专线,所以呢就在A公司服务器上搭建个VPN,B公司的人连上A公司的VPN后,就成功在AB之间建了条虚拟的专用网络,两家公司的计算机就如同在同一个局域网内,他们之间的通信第三者是不知道的,所以VPN是非常正常,非常合法滴。

路由 (Wiki) ,简单说就是定义上面两家公司之间通信要走哪条路线(相当于公交路线)。路由表指记录着很多条路线的表格(相当于地图)。路由器指可以自动帮你寻找路线的机器(相当于导航仪)
一、问:怎样查看电脑上路由表?

是滴,电脑默认就有一张地图。在windows开始菜单->运行->cmd,然后在弹出的命令行中输入 route print 即可看到本机的路由表。

二、问:目标、掩码、网关、接口、跃点数是神马东西?

1)网络目标,是指你想去的地方
2)掩码,是用来辅助找路的,用来分辨你要找的目标是一个城市还是一个具体地址。
3)网关,是你要找的那家人的大门口,你要从网关这门口才能进去。
4)接口,是你自己家门口,你得从这里才能出去。
5)跃点数,从你家到目的地要花的成本,电脑优先选择低成本的路线。
三、问:第一条路线是什么意思?(默认路由)

只要你要去的地方,在地图(路由表)中没有标明路线(路由),那么就通通走这条默认线路。

具体过程是:首先从自家大门口即接口(本机网卡IP:192.168.0.101)出去,然后从目的地的大门口即网关(路由器的IP地址:192.168.0.1)进去,剩下的事交给路由器这个导航仪了。

结论:默认路由很重要,如果你的地图(路由表)不够详细,没了默认路由,那你就很容易迷路。
四、问:已经有默认路线了,为什么还有定义其他线路?

首先,走默认线路效率低,那是不得已才走的。在电脑眼中默认线路优先级最低。
其次,都走默认线路,如果人又很多,又经常串门,那路由器可就累坏了,一般会反映变慢了,甚至会进错门。嗯,路由器的性价比也就在这时体现出来了。
五、问:连接VPN后,路由表会变吗?

当然会变,原来从中国去youtube的直道被堵死了,那么连接VPN后,就同美国建立了专用网络,于是就绕道美国再去你想去的地方。地图中的路线自然就变了.
--------------------
理解Windws中的路由表

一、名词理解
1.1、路由表:

指路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。

在命令提示符下输入“route print”,显示如下图所示的本地路由表:

本地路由表
1.2、Network Destination(网络目标地址):

1) 网络目标地址和网络掩码相与的结果,用于定义本地计算机可以到达的范围。

2) 在添加路由时,Windows要求输入的网络目标地址和网络掩码相与后的结果必须等于网络目标地址,否则路由添加会失败。

故:网络目标地址包有四种可能;

    某个特定主机的地址,如:192.168.1.101,网络掩码为255.255.255.255
    某个特定子网的地址,如:192.168.1.240,网络掩码为255.255.255.240
    某个特定网络的地址,如:192.168.1.0, 网络掩码为255.255.255.0
    默认路由,所有未在路由表中指定的网络地址,如:0.0.0.0,网络掩码为0.0.00

1.3、Gateway(网关):

1)网关又称为下一跳服务器,指发送IP数据包时,如果目标主机非同一个网络,则数据包会发送到网关。

2)如果是本地计算机直接连接到网络,网关通常是本地计算机对应的网络接口。(接口必须同网关一致)

3)如果是远程网络,网关通常是本地计算机所连接到的网络上的某个服务器或路由器。 (网关同路由器IP一致)
1.4、Interface(接口):

1)本地计算机用于发送数据包的网络接口。

2)网关必须位于和接口相同的子网(默认网关除外)。
1.5、Metric(跃点数):

用于指出路由的成本,是路由算法用以确定到达网络目标地址的最佳路径的计量标准,如:路径长度(一个跃点代表经过一个路由器)、可靠性、延迟、带宽、负载、通信代价。当具有多条到达相同目的网络的路由项时,TCP/IP会选择具有更低跃点数的路由项。
二、工作流程

当TCP/IP需要向某个IP地址发起通信时,它会对路由表进行评估,以确定如何发送数据包。过程如下:

2.1、TCP/IP将该IP地址和路由表中每个路由项的网络掩码进行相与计算,如果结果匹配对应路由项的网络目标地址,则记录下此路由项。如果有多个匹配项,则会根据相关规则选择最佳路由项,然后通过接口和网关发送数据。

2.2、如果相与后的结果不匹配任何路由项,那么TCP/IP就会选择默认路由项,默认路由的网络地址为0.0.0.0,网络掩码为0.0.0.0,它匹配任何网络通信。设置默认路由后,数据包的路由责任移交到了路由器,这可以大大简化本地路由表和配置,但会占用了额外的网络流量。
三、路由命令

route命令主要用于手动配置静态路由表 ,语法如下:

    route [-f] [-p] [-4:-6] Command [Destination] [mask Netmask] [Gateway] [metric Metric] [if Interface]]

3.1. 参数解释:

-f
清除所有网关项路由表(掩码为255.255.255.255的路由、目标为127.0.0.0,掩码为255.255.255.0的路由、目标为224.0.0.0,掩码为240.0.0.0的路由)。如果它与命令之一(例如 add、change 或 delete)结合使用,表会在运行命令之前清除。

-p
与 ADD 命令结合使用时,将路由设置为在系统引导期间保持不变。默认情况下,重新启不保存路由。

-4
强制使用IPv4

-6
强制使用IPv6

Command
指定要运行的命令。

1) add 添加路由
2) change 更改现存路由
3) delete 删除路由
4) print 打印路由

Destination
指定路由的网络目标地址。

mask subnetmask
指定与网络目标地址相关联的网掩码。子网掩码对于 IP 网络地址可以是一适当的子网掩码,对于主机路由是 255.255.255.255 ,对于默认路由是 0.0.0.0。如果忽略,则使用子网掩码 255.255.255.255。

Gateway
指定网关

metric Metric
指定跃点数

if Interface
指定路由接口号码,忽略 if 参数时,接口由网关地址确定。
3.2. 使用范例

route print
显示本地路由表的完整内容

route print 10.*
显示本地路由表中以10. 开始的路由

route add 0.0.0.0 mask 0.0.0.0 192.168.0.1
要添加默认网关地址为 192.168.0.1 的默认路由

route add 192.168.0.100 mask 255.255.255.255 192.168.0.1
要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,网关为 192.168.0.1 的路由

route -p add 192.168.0.100 mask 255.255.255.255 192.168.0.1
要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,网关为 192.168.0.1 的永久路由

route add 192.168.0.100 mask 255.255.255.255 192.168.0.1 metric 7
要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,网关为 192.168.0.1设置 ,跃点数为 7 的路由

......
---------------------------

浅谈路由表


用比较通俗的语言来介绍一下路由表知识。
只要通信就涉及到数据的交换,比如传统的信件,都是通过邮局来进行邮递运输的,那么同样,ip设备之间的通信,也一样需要数据交换,也需要通过“邮递员”来进行投递。
邮递员怎么投递呢?这个时候就需要一种规则,这个规则就是路由表。
下面我们来看看本机的路由表,在windows开始菜单->运行->cmd,然后在弹出的命令行中输入route print即可看到本机的路由表。

Network Destination Netmask Gateway Interface Metric
1 0.0.0.0 0.0.0.0 192.168.111.5 192.168.111.6 1
2 211.96.0.0 255.248.0.0 192.168.1.1 192.168.1.110 5
3 211.136.0.0 255.248.0.0 192.168.1.1 192.168.1.110 5
4 211.144.0.0 255.240.0.0 192.168.1.1 192.168.1.110 5
5 218.192.0.0 255.240.0.0 192.168.1.1 192.168.1.110 5
上面列表中是我的计算机中的路由表,和你的肯定不一样,其中192.168.1.110 是我本地网络的IP地址,192.168.111.6是我vpn所对应的IP地址(相当于第二块网卡,您的计算机上一般来说只有一块生效的网卡)。
Network Destination 和Netmask一起决定了目标网络,就相当于您信件上的 “成都市锦江区”一样,我们拿第2条路由规则来举例,这条路由规则告诉我们,凡是属于网络 211.96.0.0 子网掩码是255.248.0.0的IP包,请通过网卡192.1681.1.10(本机的无线网卡)扔给192.168.1.1(我公司无线路由器的IP地址),至于下一步怎么投递,那是其他路由器(邮局)干的事情了,我只负责礽过去即可,当然其他路由器也一样的会按照路由规则投递下去,直到达到目标,或者失败。
所以,同样的方法,您可以试着解释一下第3条,第4条路由规则了。
这个时候您可能要问,第一条路由规则是什么意思?第一条,0.0.0.0 MASK 0.0.0.0 这个网络的意思是任何网络,也就是说,不管目标网络是谁,都通过192.168.111.6(我vpn所对应的本机网卡地址)扔给192.168.111.5(我vpn服务器的IP地址)。
问题出来了,有了第一条不就全部搞定了,后面的几条路由表规则怎么可能生效呢?这里我要告诉大家,0.0.0.0这条路由表就是常说的默认网关,他的优先级要低于任何具体的路由规则,所以,只有当目标ip不满足其他规则的时候,才通过默认网关发送出去。
确实,如果你的计算机只有一个网卡,一般来说,有用的路由表就只需要第一条,因为你电脑就一个出口呀,理所当然将所有的数据包通过这个网卡扔给路由器。
因此通过改变本机路由表,让不同的网络从本机的不同网卡(其中的网卡也可以是vpn的虚拟网卡)就能达到国内走本地网络,国外走vpn的目的。
chnroutes这个项目就是将国内所有的网络列举出来,添加到路由表中,指定从本地网卡走,然后默认网关设置为vpn的网卡(这样非国内IP都走默认网关),从而达到这个目的的。
您大体懂了么?