VPN国内与国外网站转发至不同的DNS服务器解析,国内IP不经VPN

来源:互联网 发布:淘宝下架宝贝怎么删除 编辑:程序博客网 时间:2024/05/21 17:51

1 上不了google?

这个问题是这样的,国内很多的国外网站上不了。而google对于技术人员来说,可以说是一个必须品,如果你想更有效率做得更好的话。

那为什么上不了google呢?

这要从上网的原理来讲起: 上网的原理和寄信是类似的,我们从地址A(本机IP地址,接口)寄信给地址B(访问网站服务器IP地址)。我们把信交给最近的邮局(网关),邮局根据地址B查找能够达到的下一个邮局(网关),这样多次中转之后最终送到地址B。具体的可以去搜索网络的基本原理。

当我们访问www.google.com的时候,这个过程是这样的: 我们在浏览器中输入 www.google.com,点击浏览或者enter键发送请求。 这个请求中的网址不是一个ip地址(网址和IP的关系,和寄信中地址和邮编代码有点像,一个是方便人阅读的,一个是方便电脑阅读的),这个是无法用ip/tcp来进行发送的。那么,这进行ip/tcp连接之前,我们必须找到www.google.com网址所对应的ip地址。 这个转换的服务就叫做DNS(Domain Name System),域名解析系统,找到域名也就是网址到ip的对应值。

index_2016-12-22_20-55-39.jpg

而这个服务,国内默认的是网络服务商提供。服务商因为政治的原因,会把网址解析到一个错误ip上面去,这样我们就无法访问国外网站服务器了。

这时,我们可以使用VPN将我们的数据通过隧道传输到国外的服务器上,然后,从国外的服务器再往目标服务器发送请求,请求结果返回到国外服务器,再通过隧道技术传回本机。这样就相当于,我们所有的请求都是从国外发送的,只是国外服务器和本机之间要进行数据的传输。这样,我们就达到了访问国外网站的目的了。

screenshot_2016-12-23_00-28-31.png

但这时,又产生了一个问题,那就是,我们所有的数据都要先传输到国外服务器,然后再由国外服务器进行请求,返回结果先到国外,再传回本机。这样,当我们访问国内网站时,速度就可想而知了,相当于从国外进行访问,同时还要加上数据通过隧道的传输时间。

2 国内IP不走VPN

一个可以比较容易想到的办法就是,国内的网站,我就不走VPN,不传输到国外服务器,然后请求,而是直接走国内默认的通道不就行了吗?

这个是通过路由表来实现的:

screenshot_2016-12-23_22-20-16.png

screenshot_2016-12-23_22-23-06.png

这个表规定了默认使用VPN的接口10.10.0.182和网关10.12.0.69,只有下面规定的IP地址才用本机IP 192.168.1.253,然后,发送给路由器网关192.168.1.1 。这样,我们默认没有在表中规定的都走VPN,规定的走本地路由器。然后,将国内网站的IP地址全部加到路由表中,这样就可以实现国内网站走本地路由器了。

screenshot_2016-12-23_00-37-19.png

而国内网站的IP有哪些呢? 这个就是freedomroutes做的事情: https://github.com/sabersalv/freedom-routes

这里我使用的是windows,所以,我直接下载:https://raw.githubusercontent.com/sabersalv/freedom-routes/dist/windows.zip

然后,解压之后运行routes-up.bat就可以了,但,这里要注意的是,这个必须在VPN连接之前进行。因为添加路由转发,是目标地址+下一个路由(网关)来决定的,而当前的interface出口ip是以默认的出口来决定。当连接上VPN之后,默认的出口IP就是VPN的接口IP了。这就相当于,添加了路由表,本来想通过本地网卡往路由器发消息出去,结果变成从国外的VPN接口往路由器发消息出去,还是比较慢的。要保证路由表在VPN之前添加,可以将route-up.bat设置为开机启动,方法是开始->所有程序->启动->右键->打开,然后将route-up.bat的快捷方式拷贝进去,这样就可以开机启动了。

这时,只要我们的网站IP地址(注意是网站IP地址,不是网站域名)在路由表中,就会走原来默认的通道,速度就很快了。

3 发现还是不行?

但,你做完这些之后,发现连上VPN之后,还是很慢。为什么呢?

因为从国外服务器发送网站请求之后,首先要进行DNS的解析,由于是从国外IP发送的请求,所以,域名解析的也是国外的服务器IP,就根本不在我们添加的国内IP路由表中,还是走的国外的VPN和服务器。

那就是说,我们必须让本地连接或者WiFi的无线连接的DNS优先级高于VPN的DNS服务器。怎么确定网卡之间的优先级呢?

这里还有一个跃点数的问题,跃点数越小优先级越高,上面本地网卡的跃点数276 > VPN虚拟网卡的30,就是优先级要低一些,应该改为如下:

screenshot_2017-01-19_21-21-03.png

默认应该本地网卡的优先级要高于VPN的虚拟网卡。 跃点数可以通过ipv4的高级属性调整:

screenshot_2017-01-19_21-22-35.png

本地DNS服务器,如果选择服务商提供的DNS服务器,如内网使用默认的192.168.1.1,或者114.114.114.114之类的,那VPN都废了,因为它们会把国外很多网站解析到错误的IP上面去。而设置成8.8.8.8之后,由于对国内的CDN解析不准确,导致电信的网络可以解析出联通的服务器IP,就会导致国内的网站访问缓慢(国内电信和联通的站点之间的访问很慢)。

4 避免DNS污染

那这样,我们就必须找到一个正确的DNS,可以根据网址将国内和国外的网站分开。或者自己建立一个DNS服务器,windows下可以使用bind9.

使用bind9的zone功能,将国内的https://github.com/felixonmars/dnsmasq-china-list 网站全部加进去。

这样就可以完美的实现,国内网站走默认的网卡和国内路由,国外的网站走VPN。

bind9的安装:

  1. 下载:https://www.isc.org/downloads/
  2. 解压zip文件,点击BINDinstall.exe进行安装。安装过程中需要添加一个账号和密码。

bind9的配置:

  1. 按照默认安装的路径在:c:\program files\isc bind9
  2. 运行cmd,将当前路径切换到c:\program files\isc bind9\bin目录下
  3. 在c:\program files\isc bind9\etc下创建named.conf文件,输入options { #named区文件目录 directory "C:\Program Files\ISC BIND 9\etc"; };
  4. 创建key:在cmd中执行rndc-confgen.exe -a
  5. 再次编辑named.conf文件,输入:include "c:\Program Files\ISC BIND 9\etc\rndc.key"; options { #named区文件目录 directory "C:\Program Files\ISC BIND 9\etc"; #进程id文件名 pid-file "named.pid"; # conform to RFC1035 auth-nxdomain no; forward only; #forwarers子句,表示此dns server无法解析的时候,转发到其它dns server去解析 forwarders {8.8.8.8; 8.8.4.4;}; }; include "named.china.zones";
  6. 创建named.china.zones文件,内容大致如下(我是用脚本自动将下载的accelerated-domains.china.conf (https://github.com/felixonmars/dnsmasq-china-list)进行转换得到的):accelerated-domains.china.conf(部分内容):server=/0-6.com/114.114.114.114 server=/0-gold.net/114.114.114.114 server=/00.net/114.114.114.114 server=/0000738.com/114.114.114.114 server=/0001688.com/114.114.114.114 named.china.zones(部分内容):zone "*.cn" { type forward; forwarders {192.168.1.1;}; }; zone "0-6.com" { type forward; forwarders {192.168.1.1;}; }; zone "0-gold.net" { type forward; forwarders {192.168.1.1;}; }; zone "00.net" { type forward; forwarders {192.168.1.1;}; }; zone "0000738.com" { type forward; forwarders {192.168.1.1;}; }; zone "0001688.com" { type forward; forwarders {192.168.1.1;}; }; 我这里将转发的DNS服务器设为本地路由器的地址,也可以用114.114.114.114。现在使用了几天下来,采用这个配置国内国外速度都很快,已经感受不到墙了。如果嫌自己转换太麻烦,也可以下载我附件中的配置,网站配置信息是20161014日更新的,其实大多数也不会有太大的变化:http://files.cnblogs.com/files/yangwen0228/ISC_BIND_9.zip/

5 xroute

我使用了xroute有接近一年了,偶尔会掉线重连,但还是很少发生的。速度也非常稳定。下面这个是我的邀请码,做个广告啦。

1 0
原创粉丝点击