電訊茶室's Archiver

角色 發表於 2019-2-19 01:03

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

[i=s] 本帖最後由 角色 於 2019-2-19 11:12 編輯 [/i]

在大陆如果用国内的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,例如[url]www.facebook.com[/url],大陆系统会给你一个美国别家公司的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都一样,例如[url]www.cctv.com[/url],大陆和国外都有当地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是否在黑名单上? [url=http://www.telecom-cafe.com/forum/viewthread.php?tid=7319&extra=page%3D1]Link[/url]
[2] [url]https://v2ray.com/chapter_02/protocols/dokodemo.html[/url]

角色 發表於 2019-2-19 01:08

[i=s] 本帖最後由 角色 於 2019-2-19 11:46 編輯 [/i]

The local node (v2ray client) configuration file /etc/v2ray/config.json contains[code]
{
  "dns": {
    "servers": [
      "8.8.8.8",
      {
        "domains": ["geosite:cn"],
        "port": 53,
        "address": "114.114.114.114"
      },
      "localhost"
    ]
  },
  "inbounds": [
    {
      "port": 1081,  
      "listen": "192.168.55.22",
      "protocol": "socks",
      "sniffing": {
        "enabled": true,
        "destOverride": ["http","tls"]
      },
      "settings": {
        "udp,tcp": true
      }
    },
    {
      "protocol": "dokodemo-door",
      "port": 53,
      "tag": "dns-in",
      "listen": "192.168.55.22",
      "settings": {
        "address": "8.8.8.8",
        "port": 53,
        "network": "udp,tcp"
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "123.123.123.123",   #你的大陆地区以外V2Ray节点(server)
            "port": 10086,
            "users": [
              {"id": "UUID"}
            ]
          }
        ]
      }
    },
    {
      "protocol": "freedom",
      "tag": "direct",
      "settings": {}
    },
    {
      "protocol": "dns",
      "tag": "dns-out"
    }
  ],
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "inboundTag": "dns-in",
        "outboundTag": "dns-out"
      },
      {
        "type": "field",
        "outboundTag": "direct",
        "domain": [ "geosite:cn" ]
      },
      {
        "type": "field",
        "ip": ["geoip:private"],
        "ip": ["geoip:cn"],
        "outboundTag": "direct"
      }
    ]
  }
}
[/code]

角色 發表於 2019-2-19 01:11

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

角色 發表於 2019-2-19 01:18

[i=s] 本帖最後由 角色 於 2019-2-19 10:06 編輯 [/i]

我们通过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都可以用到。

角色 發表於 2019-2-19 11:08

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

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

頁: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.