V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
loukky
V2EX  ›  DNS

路由器上装安了 stubby,然后域名服务器使用的是 dns.google 但是拿到的 CDN 解析地址都是国外的,有什么解决办法吗?

  •  
  •   loukky · 2020-02-26 22:40:17 +08:00 · 8492 次点击
    这是一个创建于 1736 天前的主题,其中的信息可能已经有所发展或是发生改变。
    同样的 dns.google 在 Android 9 里面使用 就能正确的返回国内 IP。
    33 条回复    2020-03-11 12:05:49 +08:00
    parametrix
        1
    parametrix  
       2020-02-26 23:08:02 +08:00
    过代理的话就要利用 edns 特性,stubby 可以试一试

    edns_client_subnet_private : 0
    loukky
        2
    loukky  
    OP
       2020-02-26 23:39:12 +08:00
    @parametrix 这个是加在配置文件里面吗?
    loukky
        3
    loukky  
    OP
       2020-02-26 23:51:29 +08:00
    @parametrix 好像确实用上了 edns 的特性,但是某些域名还是解析到国外的 cdn 了,huya.com 解析到阿里云香港去了...
    parametrix
        4
    parametrix  
       2020-02-27 00:16:58 +08:00
    @loukky stubby 的这个特性应该只是传递 edns,估计下游客户端也不确定自己的公网 ip,所以传递了不准确的信息。

    目前支持指定 edns 的客户端很少,openwrt 上就更少了,https-dns-proxy 的旧版本可以做到,但最近也删掉了。所以这个确实很麻烦,简单的处理方法是国内的网站就直连国内的 dns 进行解析。
    zro
        5
    zro  
       2020-02-27 00:33:15 +08:00
    借楼问下,如何在 OP 开多个 stubby 后台(配置都有些许不同),虽然多开 SSH 能勉强应付得了。。
    loukky
        6
    loukky  
    OP
       2020-02-27 00:46:09 +08:00
    @parametrix 感谢,目前测试发现,有些域名有时候会解析到国外的 cdn,但是有时候又会解析国内 cdn,比如 www.recaptcha.net 会解析到国外,但是 recaptcha.net 又解析到国内。
    目前看来还是等待 stubby 进一步完善,暂时还是设置多个上游 dns 较好。
    zro
        7
    zro  
       2020-02-27 01:07:22 +08:00
    @loukky #6 可以试试 OpenDNS 的 DoH,也支持 ECS。。Quad9 虽然也都支持,但不太推荐~
    loukky
        8
    loukky  
    OP
       2020-02-27 03:39:23 +08:00 via Android
    @zro opendns 很奇怪,举个例子,解析 at.alicdn.com 如果使用 53 端口,解析结果是国内,如果使用 443 或者 5353 端口,解析的结果是国外。不知道为什么?
    ExcitedCodes
        9
    ExcitedCodes  
       2020-02-27 08:00:40 +08:00
    github/ExcitedCodes/SmartChinaDNS
    这个智能分流 DNS 可能对你有帮助
    missdeer
        10
    missdeer  
       2020-02-27 08:32:51 +08:00
    leido
        11
    leido  
       2020-02-27 08:36:51 +08:00
    即使你用了 edns,谷歌也有一定概率给你解析到香港和美国,前面说的 opendns 我没试过,楼主可以试试
    gitopen
        12
    gitopen  
       2020-02-27 09:47:52 +08:00
    @missdeer #10 强烈推荐 missdeer 编译的 coredns,一直在用,mac 上用,pc 上也用~~赞
    azh7138m
        13
    azh7138m  
       2020-02-27 11:24:15 +08:00
    目前我在路由器上用 overture 来转发 DNS 请求
    EDNSClientSubnet.Policy manual
    EDNSClientSubnet.ExternalIP 随便填了一个同市的 IP
    Kobayashi
        14
    Kobayashi  
       2020-02-27 13:05:55 +08:00 via Android
    分流。ChinaDNS 基于 IP 位置分流,dnsmasq 用来缓存外加 GFW 列表。

    @loukky Opendns 问题基本断定是你被运营商 DNS 劫持了。53 口 NAT 到自家 DNS,返回给你一个自己家缓存地址。可以根据 dig +trace 判断。

    @missdeer 如果用 DoT coredns 就算了。目前 DoT stubby 效率最高,可以复用链接,8.8.8.8:853 60ms 内可达,比自家 Unbound 都快。另外不知道 coredns 有没有类似 ChinaDNS 基于 IP 分流的方案。

    @azh7138m overture 我记得 DoT 有 bug,一次请求得有 1s。好像后开修复了,请求 Google DNS 大概 200ms,没有复用连接,还是比不过 stubby。
    azh7138m
        15
    azh7138m  
       2020-02-27 13:11:45 +08:00 via Android
    @Kobayashi 我套了一个 dnsmasq 做缓存
    没感觉到有这个问题
    Kobayashi
        16
    Kobayashi  
       2020-02-27 13:14:13 +08:00 via Android
    @azh7138m overture 不是就有缓存吗,为什么要再套一层?
    missdeer
        17
    missdeer  
       2020-02-27 13:16:40 +08:00
    @Kobayashi 几乎所有用 Go 写的轮子大概都用的同一个 package( https://github.com/miekg/dns),从协议实现上说是不会有啥区别的。也许只能给上游开 issue 改进了。
    zro
        18
    zro  
       2020-02-27 13:35:13 +08:00
    @loukky #8 53 端口被劫持了?
    imn1
        19
    imn1  
       2020-02-27 13:48:51 +08:00
    @Kobayashi
    我也习惯套一个,但我的需求是 cache+修改 TTL,不喜欢同一天内多次解析都要跑一次,直接读 cache 就够了,返回结果的 TTL 都比较短时效,我要改为 20 小时
    loukky
        20
    loukky  
    OP
       2020-02-27 15:22:13 +08:00
    @zro 应该是被劫持了的。另外 opendns 的 DOT 域名是什么? google 的这个有时候还是会返回国外 cdn 地址,很烦。特别是谷歌自己的域名,经常会这样。fonts.googleapis.com adservice.google.com www.googletagservices.com g.doubleclick.net 这几个域名经常会返回谷歌香港或者台湾的 ip。。。
    zro
        21
    zro  
       2020-02-27 16:56:22 +08:00
    @loukky #20 OpenDNS 暂不支持 DoT。。。

    我用 OpenDNS DoH 查你的几个域名,nslookup 结果如下:
    Name: fonts.googleapis.com
    Address 1: 203.208.50.167
    Address 2: 203.208.50.165
    Address 3: 203.208.50.164
    Address 4: 203.208.50.160
    Address 5: 203.208.50.168
    Address 6: 203.208.50.166
    Address 7: 203.208.50.174
    Address 8: 203.208.50.162
    Address 9: 203.208.50.169
    Address 10: 203.208.50.161
    Address 11: 203.208.50.163
    Address 12: 2404:6800:4002:80f::200a

    Name: adservice.google.com
    adservice.google.com canonical name = pagead46.l.doubleclick.net
    Name: pagead46.l.doubleclick.net
    Address 1: 203.208.50.89
    Address 2: 203.208.50.90
    Address 3: 203.208.50.77
    adservice.google.com canonical name = pagead46.l.doubleclick.net

    Name: www.googletagservices.com
    www.googletagservices.com canonical name = pagead46.l.doubleclick.net
    Name: pagead46.l.doubleclick.net
    Address 1: 203.208.39.205
    Address 2: 203.208.39.218
    Address 3: 203.208.39.217
    www.googletagservices.com canonical name = pagead46.l.doubleclick.net

    最后一个
    *** Can't find g.doubleclick.net: No answer
    *** Can't find g.doubleclick.net: No answer
    loukky
        22
    loukky  
    OP
       2020-02-27 19:16:07 +08:00
    @zro 我试试 opendns 的 doh
    loukky
        23
    loukky  
    OP
       2020-02-27 19:21:43 +08:00
    @zro opendns 的 doh 域名是什么?
    zro
        24
    zro  
       2020-02-27 19:26:16 +08:00
    loukky
        25
    loukky  
    OP
       2020-02-27 20:01:28 +08:00
    @zro opendns doh 用 stubby,解析到的 IP 还是国外的..怪了
    https://imgur.loukky.com/imgs/2020/02/35454953caa07cfc.png
    loukky
        26
    loukky  
    OP
       2020-02-27 20:03:58 +08:00
    这个是配置文件
    resolution_type: GETDNS_RESOLUTION_STUB
    round_robin_upstreams: 1
    appdata_dir: "/var/lib/stubby"
    tls_authentication: GETDNS_AUTHENTICATION_NONE
    tls_query_padding_blocksize: 128
    edns_client_subnet_private: 0
    idle_timeout: 10000
    listen_addresses:
    - 127.0.0.1@5453
    - 0::1@5453
    dns_transport_list:
    - GETDNS_TRANSPORT_TLS
    upstream_recursive_servers:
    - address_data: 146.112.41.2
    tls_port: 443
    tls_auth_name: "doh.opendns.com"
    - address_data: 2620:119:fc::2
    tls_port: 443
    tls_auth_name: "doh.opendns.com"
    zro
        27
    zro  
       2020-02-27 20:04:26 +08:00
    @loukky #25 stubby 不支持 DoH 吧??
    loukky
        28
    loukky  
    OP
       2020-02-27 20:11:29 +08:00
    @zro 没注意..不过我换回谷歌以后,测试了几个域名,发现 cdn 都能正确的解析到国内。不知道为啥..
    slack
        29
    slack  
       2020-02-27 20:25:11 +08:00
    目前我还是在用 dnscrypt-proxy,其实 DoT 和 DoH 还有 DNSSEC 究竟哪个好啊?一堆乱七八糟的方案,不知怎么选择。
    azh7138m
        30
    azh7138m  
       2020-02-27 20:34:43 +08:00
    @Kobayashi
    应该是懒。。。之前是 tunnel 到海外查询,现在换用机场,用 overture 代替这个 udp tunnel,就不折腾了
    yulihao
        31
    yulihao  
       2020-03-11 08:51:31 +08:00
    @parametrix 我问了 https_dns_proxy 的作者,给来的答复如下:
    This is a request to add back ECS support.

    To be clear, ECS support is not removed. It's just using the DNS protocol rather than the mechanism that Google supported in their JSON API.

    That said, I can see a good reason to want to use it and none of the other caching DNS resolvers really give much clear control over this field. RFC8484 doesn't provide any guidance either. I'll treat this as a feature request but can't provide any hard time lines.
    yulihao
        32
    yulihao  
       2020-03-11 09:00:06 +08:00
    @loukky 应该是没有正确传递 ECS 参数
    loukky
        33
    loukky  
    OP
       2020-03-11 12:05:49 +08:00 via Android
    @yulihao 我也觉得是,但是不知道怎样调整配置文件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5456 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:15 · PVG 17:15 · LAX 01:15 · JFK 04:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.