V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
updateing
V2EX  ›  宽带症候群

是否有可以丢弃特定前缀 AAAA 解析结果的 DNS 转发程序?

  •  
  •   updateing · 2019-01-27 10:41:00 +08:00 via Android · 5163 次点击
    这是一个创建于 2163 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我这边有电信原生 v6 和一条隧道 v6,局域网里除了 NAS 走原生 v6,其他都走隧道。

    最近不少我常用的国内网站(目前发现 B 站和酷安)都开始提供 IPv6 支持,导致大部分设备的流量会走隧道绕一大圈,上网体验急剧下降。

    想通过修改路由器 DNS 程序的方式把国内 v6 前缀的解析结果都过滤掉,以此避免问题。但谷歌上搜 dns server filter aaaa by prefix 之类的关键词并没有找到现成方案。BIND 可以设置 filter-aaaa,但是不知道怎么按前缀过滤。

    请问一下各位是否有现成的解决方案呢?
    22 条回复    2019-01-28 20:32:07 +08:00
    bearice
        1
    bearice  
       2019-01-27 10:57:52 +08:00   ❤️ 1
    powerdns recursor 可以用 lua 脚本做,
    或者改 dnsmasq 的代码也可以 参见 https://gist.github.com/bearice/7d3dc0e63e003d752622 (这个 patch 是过滤所有,不过可以改改参数让他只过滤某些域)
    或者用这个方法起两个 unbound https://nlnetlabs.nl/pipermail/unbound-users/2018-January/010444.html
    leido
        2
    leido  
       2019-01-27 11:09:58 +08:00 via Android
    楼主能报一下坐标吗?我们这里 B 站还没有 v6...
    leido
        3
    leido  
       2019-01-27 11:10:29 +08:00 via Android
    ok,羡慕深圳
    Love4Taylor
        4
    Love4Taylor  
       2019-01-27 11:35:22 +08:00
    @leido #3 不用羡慕, 现在 B 站的 v6 很多人都连不通...
    http://link.acg.tv/forum.php?mod=viewthread&tid=20616
    updateing
        5
    updateing  
    OP
       2019-01-27 11:43:03 +08:00
    @bearice 好的,看起来起一个 Unbound 用 private-address 就可以过滤范围了,应该是最简单的方法。谢谢!
    happylty
        6
    happylty  
       2019-01-27 11:58:51 +08:00   ❤️ 1
    好像某个强做得挺好的,就是过家机密
    BOYPT
        7
    BOYPT  
       2019-01-27 12:05:13 +08:00
    设置路由表让国内 ip 段走原生 v6 不就好了么...
    updateing
        8
    updateing  
    OP
       2019-01-27 12:19:33 +08:00
    @BOYPT 由于单从路由器上控制不了设备用哪个源 IP 发包,而两种接入渠道又要求必须是自己的前缀才能传得出去(当然)所以我只给每个设备分期望的那一种前缀,要么原生,要么隧道,这样没法用路由表。

    就算是要用两种前缀全部下发、设备端配路由表选源 IP 这个方法,也还是有 iOS 这种硬骨头处理不了……
    gaoyuzhe22
        9
    gaoyuzhe22  
       2019-01-27 12:45:12 +08:00
    我自己试过的,unbound+dnsmasq
    https://longqiugyz.blogspot.com/2019/01/dnsaaaa.html
    LGA1150
        11
    LGA1150  
       2019-01-27 12:53:54 +08:00 via Android
    pcap-dnsproxy
    BOYPT
        12
    BOYPT  
       2019-01-27 13:08:18 +08:00
    @updateing #8
    好像还可以下发 ULA 局域前缀, 然后让路由器 NAT66 选路...
    wweir
        13
    wweir  
       2019-01-27 13:18:01 +08:00 via Android   ❤️ 1
    前两天刚发布的 sower,虽然不是为这个场景开发的,但刚好可以满足这个需求。
    里面的 http_ping 逻辑了解一下,智能检测的结果,远比传统的规则更有效
    github.com/wweir/sower
    yexm0
        14
    yexm0  
       2019-01-27 16:38:15 +08:00
    @Love4Taylor 你们好像只有视频 CDN 是上了 V6,而且好像是放在湖南那边的,延迟比 V4 大多了.
    yexm0
        15
    yexm0  
       2019-01-27 16:38:34 +08:00
    Love4Taylor
        16
    Love4Taylor  
       2019-01-27 16:42:21 +08:00 via Android
    @yexm0 主站在部分地区也解析到 v6 了 CNAME 是 bj-cmcc-v4v6.biliapi.com, 见我上面附的链接
    xk0n
        17
    xk0n  
       2019-01-27 16:48:59 +08:00
    可以使用 iptables 过滤

    iptables -A OUTPUT -o eth0 -p udp --dport 53 -m string --hex-string "|08|bilibili|03|com|00001c|" --algo bm -j DROP
    5460
        18
    5460  
       2019-01-27 18:28:26 +08:00
    这个运行在路由器上的 SmartDNS 支持自定义黑名单,但我没试过 IPv6
    https://github.com/pymumu/smartdns/
    Cipool
        19
    Cipool  
       2019-01-27 21:27:38 +08:00 via Android
    @Love4Taylor 这路由也太诡异了,北京教育网的服务器,北京移动居然绕香港 hkix,再进教育网,明明 cmcc 和教育网有直连的 peer
    updateing
        20
    updateing  
    OP
       2019-01-28 12:45:33 +08:00 via Android
    @BOYPT 有些应用需要知道自己的真实地址,比如某些 PT tracker 依赖客户端主动上报 IPv6 地址,不会自动获取。所以能在客户端得到真实地址比较好……
    cwbsw
        21
    cwbsw  
       2019-01-28 16:20:27 +08:00
    @updateing 你这个需求其实不用去过滤 DNS,分配默认路由的网段地址,另一个出口走 NAT 出去。另外如果只有 NAS 需要 Native IPV6,还有一个办法就是在 NAS 上单独拨号,当然要 ISP 支持双拨才可以。
    laucenmi
        22
    laucenmi  
       2019-01-28 20:32:07 +08:00
    跟 ipv4 上一样使用 dnsmasq+ipset
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1075 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:12 · PVG 02:12 · LAX 10:12 · JFK 13:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.