返回列表 發帖

V2Ray —— An intelligent DNS server (没有污染、人性化DNS服务器)

本帖最後由 角色 於 2019-2-19 11:12 編輯

在大陆如果用国内的DNS servers,如114.114.114.114,国内的hostnames解到IP是没有问题的,99.99%都正确,国外大部分都是可以,但是我们常看如Facebook,YouTube,Twitter等等一定不可以,而他们有一个大清单[1], 经常污染国内的大型DNS servers,所以有的时候是可以连到,但是有的时候就连不上。就算我们采用国外的DNS servers,如8.8.8.8 and 1.1.1.1等,在离开你家里的路由器,这样的DNS IP被转到大陆的DNS servers,看看你的需要解开什么hostname,例如www.facebook.com,大陆系统会给你一个美国别家公司的IP给你,其他不在他们的黑名单里就放行到8.8.8.8的server。

那么我们怎么办呢?

坊间有不少方法解决这个问题,而今天我和大家分享就是利用V2Ray,把它变成一个由智能的DNS server。

在V2Ray最初开发期间,开发dokodemo的inbound,就是把“所有”DNS port 53的访问都撞到国外的DNS server,如8.8.8.8,在经过V2Ray的outbound (proxy)到国外的V2Ray节点[2]。这个方法有一个不好的地方,就是把所有DNS requets都100%传到海外的服务器,就算国内的hostnames都一样,例如www.cctv.com,大陆和国外都有当地IP地址,意思如果大陆解是大陆的IP,国外解救是国外的IP,因为你在大陆用,最好DNS回来都是大陆IP,而不是国外IP。这对于需要上的大陆IP的CCTV,爱奇艺就会不让你看。那么这样的DNS server不够人性化。

最近V2Ray在v4.15 and v4.16提出了出站dns和有关连接方式,那么V2Ray就可以变成一个非常intelligent的DNS server,意思就是如果大陆的hostnames就通过大陆的DNS去解,而大陆以外的hostname就通过dokodemo(via V2Ray outboud proxy)到国外的DNS server。

References:
[1] 想知道你的hostnames是否在黑名单上? Link
[2] https://v2ray.com/chapter_02/protocols/dokodemo.html

本帖最後由 角色 於 2019-2-19 11:46 編輯

The local node (v2ray client) configuration file /etc/v2ray/config.json contains
  1. {
  2.   "dns": {
  3.     "servers": [
  4.       "8.8.8.8",
  5.       {
  6.         "domains": ["geosite:cn"],
  7.         "port": 53,
  8.         "address": "114.114.114.114"
  9.       },
  10.       "localhost"
  11.     ]
  12.   },
  13.   "inbounds": [
  14.     {
  15.       "port": 1081,  
  16.       "listen": "192.168.55.22",
  17.       "protocol": "socks",
  18.       "sniffing": {
  19.         "enabled": true,
  20.         "destOverride": ["http","tls"]
  21.       },
  22.       "settings": {
  23.         "udp,tcp": true
  24.       }
  25.     },
  26.     {
  27.       "protocol": "dokodemo-door",
  28.       "port": 53,
  29.       "tag": "dns-in",
  30.       "listen": "192.168.55.22",
  31.       "settings": {
  32.         "address": "8.8.8.8",
  33.         "port": 53,
  34.         "network": "udp,tcp"
  35.       }
  36.     }
  37.   ],
  38.   "outbounds": [
  39.     {
  40.       "protocol": "vmess",
  41.       "settings": {
  42.         "vnext": [
  43.           {
  44.             "address": "123.123.123.123",   #你的大陆地区以外V2Ray节点(server)
  45.             "port": 10086,
  46.             "users": [
  47.               {"id": "UUID"}
  48.             ]
  49.           }
  50.         ]
  51.       }
  52.     },
  53.     {
  54.       "protocol": "freedom",
  55.       "tag": "direct",
  56.       "settings": {}
  57.     },
  58.     {
  59.       "protocol": "dns",
  60.       "tag": "dns-out"
  61.     }
  62.   ],
  63.   "routing": {
  64.     "domainStrategy": "IPIfNonMatch",
  65.     "rules": [
  66.       {
  67.         "type": "field",
  68.         "inboundTag": "dns-in",
  69.         "outboundTag": "dns-out"
  70.       },
  71.       {
  72.         "type": "field",
  73.         "outboundTag": "direct",
  74.         "domain": [ "geosite:cn" ]
  75.       },
  76.       {
  77.         "type": "field",
  78.         "ip": ["geoip:private"],
  79.         "ip": ["geoip:cn"],
  80.         "outboundTag": "direct"
  81.       }
  82.     ]
  83.   }
  84. }
複製代碼

TOP

因为我把上面的configuration file放入Raspberry Pi的Raspbian,default settings不要port 53,所以我提供的port 53 dokodemo就不会受到任何影响。如果你的server有DNS server,那么你需要把它关掉,不然会产生冲突!

TOP

本帖最後由 角色 於 2019-2-19 10:06 編輯

我们通过socks proxy或http proxy接入V2Ray的node(client),所有DNS request都是通过socks 或http proxy,然后转到远方的V2Ray node(server)去解hostname。只有port 80和port 443需要用到programs才有用,例如我们用browsers上网才有用,其他如ping,nslookup,dig,winbox login等等要resolve hostnames就没有用!但是有了上面的intelligent DNS server,所有系统需要resolve hostnames的DNS request都可以用到。

TOP

在大陆怎样使用这智能化的DNS server呢?

在你大陆的router,一般设定都是你router的IP,但是只要你把router里DNS设为你Intelligent DNS server IP就可以。那么自动自动连接的devices(通过DHCP server派发)就可以自动驱动DNS的IP,使用上就非常方便。

TOP

返回列表