注:本文主要目的是给程序员讲述一些局域网/VPN的基本知识,并不涉及到具体的实操。关于如何安装VPN服务器、配置VPN客户端及修改Windows路由表等具体实操内容,请自行搜索。html
局域网地址为何是192.168.X.X?简单地说这是RFC的建议,具体请查看: https://tools.ietf.org/html/rfc5735#section-4程序员
准确说,不仅有192.168.X.X,一共有3段地址能够做为局域网的地址:服务器
因此看到10开头的或者192.168开头的IPv4地址,那就能够认为是局域网地址了,比较特殊的是172开头的,由于它的掩码是12,不是8的整数倍,因此光看到172开头的地址还不能立刻肯定是否是局域网地址,要看是否在172.16.X.X至172.31.X.X之间。网络
既然是建议,那就不是技术上的硬性要求,那么我能不能把局域网地址设置成别的?答案是确定的。spa
好比你能够设置成20.8.13.46,看起来像个公网地址对不?但这样并不会有什么好处,反而极可能会引发冲突,想一下假如这真的是一个你要访问的公网地址,那你可能就访问不到了,由于你的网络适配器认为这是个局域网地址,不会走网关到公网去。设计
咱们有个客户的局域网就是相似这种“非标”的,不按套路出牌,形成了很多困扰。代理
另外提一下RFC,RFC是Request For Comments的意思,意思就是“草案”,Internet开始构建的时候,全世界的工程师们起草的各类文档,不断讨论更新和修正,因此叫RFC,时过境迁,不少文档都成为了事实上的标准,但RFC这个名字惯性太大,保留了下来。htm
由于这3个网段正好对应了A类、B类和C类地址。blog
A类地址组成的局域网能够容纳海量主机,B类地址能容纳的主机数量也不少,C类地址则只能够容纳254台主机。路由
事实上,就算你用了A类地址,你也能够设置子网掩码为24(255.255.255.0的表示,即24个1)来使得这个A类地址和C类地址同样,只容纳254台主机。
但无论怎么说,这是一种普遍被接受的约定,因此当系统看到一个A类地址的时候,若是没有额外的配置说明,就默认它的子网掩码是8,同理,默认B类地址子网掩码为16,C类为24。
那咱们应该选择哪一个网段好呢?我认为用B类地址最为灵活!为何?要解释可不是那么容易,接着看吧。
嗯?怎么忽然扯这么一个风马牛不相关的问题?没事,接着看呗。
为何连上公司的VPN就上不了网?这是一个困扰了不少人的问题,“通俗”(但不正确)的说法就是一旦连上了VPN,就至关于接入了目标的内网去,固然不能正常访问其它网络了。我首先声明这种说法并不正确,下面具体来讲说。
站在咱们的视角来讲,VPN干了两件事情:
1,建立一个虚拟网卡,未链接的时候这个网卡是灰色的,即未启用,这个虚拟网卡咱们称之为VPN网络适配器
2,链接VPN的时候,虚拟网卡启用,并修改Windows的路由表使得部分或所有网络访问都透过VPN网络适配器
VPN网络适配器能够在Windows的控制面板的“控制面板\网络和 Internet\网络和共享中心”里的“更改适配器设置”里看到。咱们程序员先了解到这里便可,至于VPN客户端如何与VPN服务器打交道,使用怎样的隧道协议,过程如何,这个是另外一个超级大的话题了,这里不表。
从“适配器”这个驱动层面的东西来看,VPN是比较“底层”的,咱们的程序不须要关心这个,不像代理服务器,须要在程序里设。
如今,连VPN就上不了网这个问题应该怎么解释?根据前面提到的那一、2两步,咱们不难知道,问题出在第2步上,好比你在家里,你要链接公司的内网,IP地址是192.168.20.0/24,如今链接,成功,你能轻松访问192.168.20.112这台主机了,但不幸的是,根据Windows当前的路由表配置,你的任何网络访问都会走VPN网络适配器,因而你访问taobao.com也会走VPN,但公司的网络限制了对taobao.com的访问啊,因此就出现这个问题了。
很显然,此问题有两种解,一是让大家公司IT开放对taobao.com的访问;二是本身修改Windows路由表,使得对其它网络(包括公网)的访问不走VPN。显然你只能采起第二种方案。
修改路由表是解决这类问题的必杀技,这是能够确定的,但有时候会比较麻烦,假如你用的VPN客户端不是Windows自带的,而是公司/客户提供的,每次链接的时候,它就会在你的Windows的路由表中塞入一大堆很使人费解的配置,这些乱七八糟配置使得你的正常网络的访问变得不可能,你要一条条把这些配置删除,而后把必要的一条路由规则加进去,符合这条规则的才走VPN,不然走原先默认的适配器,这样是能够的,可是可是,这种VPN一旦断开,你重连的时候,你会发现你辛辛苦苦配的Windows路由表又被它重置了,每次都如此,让人没法接受,前面我提到的那个用“非标”局域网地址的客户的VPN就是这样的……这种状况很难有好的解,如今咱们讨论另外一种更广泛的状况,那就是使用的是Windows自带的VPN客户端。
能够在前面提到的控制面板的对应的VPN网络适配器里进行下图这样的设置,把“在远程网络上使用默认网关”这个选项去掉。
这样在VPN链接的时候它就基本上不会修改Windows的路由表,我是说基本上不会,实际上,它会默认加一条路由规则,我研究下来是这样的一条规则:
假如你链接的网络是192.168.20.0/24,那它就会加这么一条规则:
192.168.20.0/24 => VPN Adapter
由于Windows认为192开头的这个地址是个C类地址,掩码天然是24,这个时候若是服务主机就在192.168.20.0/24这个网段上,你能够直接访问,而且你访问别的网络照旧,不会受VPN的影响,很好!
但你要注意,极可能你VPN链接到的只是一个VPN LAN的虚拟网络,而真实的服务器的地址是在192.168.21.0/24这个网段,这时候你发现你访问不了服务器,由于对192.168.21.0/24这个地址段的访问不符合路由规则,不走VPN。怎么办?
方法一,自行增长一条路由规则:
192.168.21.0/24 => VPN Adapter
此次不算很麻烦,由于规则明确且只有一条,你能够把这条规则做为永久规则,即使VPN断开以后,它依旧还在,不受影响。但要本身设规则,仍是有些麻烦,万一有些人就是不会呢?能不能更加简单点?
方法二,从新规划IP地址!
嗯!绕了半天,终于回来了!
假如链接目标为10.186.2.0/24,而服务主机所在的网段是10.186.3.0/24,咱们看看实际发生什么事。
因为10开头的地址被视做A类地址,它的子网掩码是8。Windows自动增长的路由规则是:
10.0.0.0/8 => VPN Adapter
你尝试访问10.186.3.0/24网段的时候,是符合这条路由规则的,所以你能够访问10.186.3.0/24网段的主机。
是否是很神奇?设置成192.168.X.X有问题,换成10.X.X.X就行了。
可是,这里面可能有问题!那就是前面一直没提到的地址冲突的问题。
假如你所在的局域网也是10.X.X.X这样的地址,那就糟糕了,你会发现你本地网络都无法访问了,缘由就是符合了这条路由规则,走了VPN。
那使用192.168.X.X地址有没有可能出现冲突?固然有,好比你的本地网络是192.168.1.0/24,目标网络也是192.168.1.0/24,这很是有可能啊,网管们都喜欢这么设置,那么冲突是确定的。
我前面提到了,并非172开头的地址都表示是局域网地址,只有172.16.X.X到172.31.X.X才是。你们注意,172是属于B类地址,它默认的掩码是16,这就颇有趣了,请看下面这个图:
按照个人掩码设计,A、B、C、D是4个不一样的网络,而根据B类地址默认的掩码,A和B是同一个网络,C和D是同一个网络。假如我是网管,我就用IP地址的第二个数字来区分厂区,厂区和厂区间不直连,而厂区内再用IP地址的第三个数字来区分不一样的内网,这就是我前面所说的“灵活”。
如今你在图中的“你的位置”,即A网中,因为直接的物理链接,你是能直接访问B网的,如今你要用VPN拨到D网,想一想会怎样?按前面说的,Windows会建立这么一条路由规则:
172.19.0.0/16 => VPN Adapter
OK不OK?很是OK,你能顺利访问D网,且访问本地的A网和B网都不受影响。你要注意的只是好好规划地址,避免直接的冲突就行,好比用172.21.14.0/24这种偏冷门的地址。