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

路由器丢弃指定域名 AAAA 记录

  •  
  •   Liqianyu · 2018-09-27 16:40:44 +08:00 · 11230 次点击
    这是一个创建于 2252 天前的主题,其中的信息可能已经有所发展或是发生改变。

    # IPv6 DNS Drop #
    # Netflix DNS AAAA Drop #
    
    iptables -t raw -A PREROUTING  -p udp --dport 53 -m string --hex-string "|03|www|07|netflix|03|com|00001c|" --algo bm -j LOG --log-prefix "drop netflix dns query "
    iptables -t raw -A PREROUTING -p udp --dport 53 -m string --hex-string "|03|www|07|netflix|03|com|00001c|" --algo bm -j DROP
    ip6tables -t raw -A PREROUTING  -p udp --dport 53 -m string --hex-string "|03|www|07|netflix|03|com|00001c|" --algo bm -j LOG --log-prefix "drop netflix dns query "
    ip6tables -t raw -A PREROUTING -p udp --dport 53 -m string --hex-string "|03|www|07|netflix|03|com|00001c|" --algo bm -j DROP
    

    添加到 /etc/firewall.user 然后重启防火墙

    如此,即可防止 Netflix 通过 IPv6 直连导致代理失效。

    被 TLS SNI RESET 的网站同理。

    第 1 条附言  ·  2019-08-03 23:00:53 +08:00
    Unbound 配置 private-address: ::/0 然后将 gfwlist 域名转发到 Unbound 解析。
    Unbound 上游设置 DNS Over TLS 即可无痛过滤特殊域名 AAAA 记录。
    将 gfwlist 转发是为了保留普通网站的 IPv6。不在乎这一点可以全局转发。
    未来 DNS Over TLS 或者 SNI Reset 有变化再改动即可。
    44 条回复    2021-08-19 16:57:46 +08:00
    laucenmi
        1
    laucenmi  
       2018-09-27 21:15:39 +08:00
    感谢分享
    flowfire
        2
    flowfire  
       2018-09-28 00:14:39 +08:00 via iPhone
    难道正确方法不是找一个支持 ipv6 的代理么😂
    Liqianyu
        3
    Liqianyu  
    OP
       2018-09-28 10:26:16 +08:00
    @flowfire
    是,如果有支持 IPv6 的代理是更优办法。
    但是目前支持双栈的 VPS 和服务商还较少。
    而且即使服务端支持,目前也没有现成的 CHNRoutes For IPv6 方案。
    所以这是一个替代方案。可以直接丢弃掉 AAAA 响应去防止走 IPv6。
    缺点就是解析速度会变慢一些。不过在缓存的帮助下影响不大。
    wacke
        4
    wacke  
       2018-09-28 16:11:18 +08:00
    @Liqianyu
    我用 vps+he.net 的 6in4 实现了双栈 vps,也通过 tinc 将路由接入了 ipv6,CHNRoutes For IPv6 目前只能通过 IPv6 NAT 实现。。。
    Liqianyu
        5
    Liqianyu  
    OP
       2018-09-28 16:37:17 +08:00
    @wacke
    嗯,确实是一个办法。速度如何呢?
    我觉得目前没必要非走 IPv6,因为只是看网页,走 IPv4 还是 IPv6 有区别?并没有。
    所以直接丢弃掉 AAAA 记录强制走 IPv4 即可。
    所以我目前是采用 CHNRoutes For IPv4 + Native IPv6,对特别的网站采用该方法丢弃掉 AAAA 记录防止被 Reset。
    未来如果普及 ESNI,或许会有解决之道。
    wacke
        6
    wacke  
       2018-09-29 08:01:27 +08:00
    @Liqianyu
    速度取决于 VPS 的带宽及链路状况,我的 VPS 在 LA,CN2 路由,150ms 左右的延迟,其实比直接 6in4 隧道的延迟还低。。。不过目前我家移动宽带也拿到 IPv6 了,只能部署 IPv6 NAT 以实现 CHNRoutes For IPv6。。。
    Liqianyu
        7
    Liqianyu  
    OP
       2018-09-29 10:45:48 +08:00
    @wacke
    我觉得目前没必要实现 CHNRoutes For IPv6,因为要牺牲掉 IPv6 的特性。
    还不如用 IPv4 去访问,用 IPv6 访问又没有什么好处。速度也并没有说会更快。
    wacke
        8
    wacke  
       2018-09-29 12:57:34 +08:00
    @Liqianyu
    目前来说 IPv6 确实意义不大,我是纯粹想体验 IPv6,另外想测试多条链路 IPv6 策略路由这些。。。
    cwbsw
        9
    cwbsw  
       2018-09-29 14:20:53 +08:00
    @wacke
    V6 的做法应该是把不同 ISP 分配的地址配置在主机上,由主机来决定使用哪一个源地址发起连接。
    LGA1150
        10
    LGA1150  
       2018-09-29 14:52:26 +08:00 via Android
    @Liqianyu 目前中国 IPv6 网段个数屈指可数
    Liqianyu
        11
    Liqianyu  
    OP
       2018-09-29 14:57:43 +08:00
    @LGA1150
    是的,我认为这个很全了。
    https://ispip.clang.cn/all_cn_ipv6.html
    wacke
        12
    wacke  
       2018-09-29 15:35:20 +08:00
    @cwbsw
    这样的话,策略路由貌似很难实现,且每个设备都要配置一遍,手机这些就更麻烦了。
    Liqianyu
        13
    Liqianyu  
    OP
       2018-09-29 16:36:06 +08:00
    @wacke
    如果 SNI 漏洞被 ESNI 补上,估计还是会走 DNS + IP Block 的老路。这样 ICMPv6 不通会自动回退的。
    yetsky
        14
    yetsky  
       2018-09-29 21:39:13 +08:00
    建议使用 PDNSD 屏蔽指定域名 AAAA 记录,不会引起解析过慢。
    wacke
        15
    wacke  
       2018-09-30 08:01:36 +08:00
    @Liqianyu
    DNS + IP Block 这个状况,如果有 IPv6 链路绕过墙的话,主机能智能选择源地址吗?目前我碰到的问题是多条 IPv6 链路的情况下,源地址跟路由不一致,导致数据包在回程时回不回不来。
    Liqianyu
        16
    Liqianyu  
    OP
       2018-09-30 11:30:37 +08:00
    @yetsky
    是,但是要额外用 pdnsd,不如 iptables 优雅。
    虽然 iptables 会导致解析速度损失,但是在缓存的帮助下这不算一个大问题。

    @wacke
    我觉得没问题。目前来说不通就快速回退 v4。最多引起 300ms 的损失。
    源地址和路由不一致是什么情况,没有很理解你的意思。
    wacke
        17
    wacke  
       2018-09-30 11:49:17 +08:00
    @Liqianyu
    就是说在存在 a,b 两条 IPv6 链路的情况下,主机会使用某个源地址(a,b 中的一个)发起链接,但是在路由过程中,可能会出现使用 b 的源地址发起链接,但是路由却是从 a 链路走的,导致回程时数据包回不来。。。
    Liqianyu
        18
    Liqianyu  
    OP
       2018-09-30 11:51:01 +08:00
    @wacke
    多个 IPv6 网络是吧,我目前路由器接入 3 个。没遇到你说的这个问题,建议抓包看一下。
    wacke
        19
    wacke  
       2018-09-30 12:32:58 +08:00
    @Liqianyu 就是抓包看过了才发现这个问题。。。我目前是两条 6in4 过来的链路,一条移动宽带的 IPv6 链路。。。
    这个链接是我几个月前的情况: https://github.com/openwrt/packages/issues/5906#issuecomment-381384887
    Liqianyu
        20
    Liqianyu  
    OP
       2018-09-30 13:19:39 +08:00
    @wacke
    看你所说是在 Linux 上有这个问题是吧。大概看了看,为什么要用 Tinc VPN 实现 IPv6 接入额,然后并且是加入 mwan3 的。
    我是直接 PPPoE 的原生 IPv6,没有用 mwan3。
    wacke
        21
    wacke  
       2018-09-30 13:25:10 +08:00
    @Liqianyu
    几个月前还没有移动 IPv6,体验 IPv6 就只能 6in4 隧道了,但是 6in4 隧道被墙了,所以就用 Tinc 来实现转接了。现在有了移动 IPv6,情况就更复杂了,原生的 IPv6 基本无法实现策略路由。。。
    Liqianyu
        22
    Liqianyu  
    OP
       2018-09-30 14:00:42 +08:00
    @wacke
    我觉得你先要做下减法,既然有原生 IPv6 了。再用 Tinc 实现 6in4 有什么意义。6in4 只是过渡方案。目前在 IPv4 依旧主导的情况下我觉得没必要使用 IPv6 代理。
    wacke
        23
    wacke  
       2018-09-30 14:19:14 +08:00
    @Liqianyu 我的目标是实现跟 IPv4 一样的策略路由方案,被墙的及非常慢的走 tinc,其他剩下的走原生 IPv6。。。
    Liqianyu
        24
    Liqianyu  
    OP
       2018-09-30 15:05:30 +08:00
    @wacke
    被墙或非常慢的走 IPv6 代理。用 Tinc + 6in4 实现 IPv6 代理感觉有点偏。因为 6in4 毕竟是过渡技术。目前 IPv6 想要用 IPv4 一样的方案实现代理。应该必须要 NAT66,所以 IPv6 下具体怎么代理还需要再想一下...目前还是回退 IPv4 比较靠谱。
    wacke
        25
    wacke  
       2018-09-30 15:30:25 +08:00 via Android
    @Liqianyu 所以目前我用 NAT6 了,用下来感觉也还可以,以后如果有新的方案,干掉 NAT6 就可以了。。。
    Liqianyu
        26
    Liqianyu  
    OP
       2018-09-30 15:48:03 +08:00
    @wacke
    NAT66 也会引起性能损失和丧失 IPv6 特性。不优雅。
    我目前是不代理 IPv6,被 SNI Reset 的站就丢弃掉 AAAA 记录强制 IPv4,目前上这个待遇并且支持 IPv6 的站不多,估计全球也就是百八十个以内。常用的也就十来个。
    未来 ESNI 普及应该就不需要了。因为要屏蔽估计会和 IPv4 一样解决。那样就自动回退了。
    等到 IPv6 Only 的时候怎么样还不好说呢。肯定会有新方案出来。
    如果要代理 IPv6,先等大部分 VPS 都支持 IPv6 再说吧。目前就算支持,路由也不行。速度还不如 IPv4,那我何必要走 IPv6。
    IPv6 的用处不是拿来翻墙和上 Web 的。解决 IPv4 地址短缺和物联网才是它真正发挥作用的地方。
    wacke
        27
    wacke  
       2018-09-30 16:05:00 +08:00
    @Liqianyu 现阶段我就不去计较这些了,目前多链路 IPv4&IPv6 能用上就先用着再说,后面碰到问题再决定要不要做减法就是了。。。
    Maskeney
        28
    Maskeney  
       2018-10-04 14:15:58 +08:00 via Android
    感谢楼主提供思路,我最近也被这问题困扰,一旦使用 ipv6 地址网关透明代理直接失效。
    Maskeney
        29
    Maskeney  
       2018-10-04 14:26:22 +08:00 via Android
    @Liqianyu 不如维护一份名单吧,让我等懒人直接无脑导入 ( x
    jm92
        30
    jm92  
       2018-10-04 20:05:17 +08:00
    @Liqianyu 大佬,你知道这个怎么解决吗?我的是 Openwrt cc 的 k2p
    iptables v1.4.21: Couldn't load match `string':No such file or directory

    Try `iptables -h' or 'iptables --help' for more information.
    Liqianyu
        31
    Liqianyu  
    OP
       2018-10-05 18:51:15 +08:00
    @Maskeney
    考虑中,不过意义不大。因为这应该只是暂时的。如果长期继续下去。
    可能需要在维护一份 GFW SNI Reset List

    @jm92
    iptables -m string -h
    如果提示 No such file or directory
    尝试安装
    iptables-mod-filter
    kmod-ipt-filter
    不行就需要升级固件了。
    Maskeney
        32
    Maskeney  
       2018-10-05 22:47:58 +08:00
    @Liqianyu 对 iptables 不是很了解,检索了半天也还是有点不太明白,请教一下示例中的|03|、|07|、|03|应该是分别对应随后的字符数,那么|00001c|是做什么的?另外这个整体为什么要加上|数字|这种格式?
    Maskeney
        33
    Maskeney  
       2018-10-05 22:49:04 +08:00
    另外 lz 似乎被降权了,收不到回复的通知
    jm92
        34
    jm92  
       2018-10-06 10:45:38 +08:00
    @Liqianyu 谢谢,我弄好了
    如果我想丢弃谷歌整个域名段的 AAAA,hex-string 应该怎么设置?比如,单个规则丢弃 google.com 可以丢弃包括所有子域名在内吗
    iwtbauh
        35
    iwtbauh  
       2018-10-06 15:24:21 +08:00 via Android
    sock5h 无所畏惧
    直接在 vps 上解析域名才是正解
    Liqianyu
        36
    Liqianyu  
    OP
       2018-10-19 10:37:26 +08:00 via iPad
    @Maskeney
    应该是被降权了。有办法恢复?
    关于你的问题,|03|是代表长度,是十六进制。
    Type Code
    Any 00ff
    A 0011
    CNAME 0005
    MX 000f
    AAAA 001c
    NS 0002
    SOA 0006

    @j
    Liqianyu
        37
    Liqianyu  
    OP
       2018-10-19 10:38:43 +08:00 via iPad
    @jm92
    丢弃 google.com 的域名,会泛域名匹配的。
    leeeboo
        38
    leeeboo  
       2018-11-29 16:25:56 +08:00
    @Liqianyu 确实如果有一个 iptables 的脚本就好了,一键丢弃所有被 reset 的域名的 AAAA
    huaxie1988
        39
    huaxie1988  
       2018-12-20 13:23:01 +08:00
    @leeeboo 用 iptables 丢弃会导致域名解析慢
    huaxie1988
        40
    huaxie1988  
       2018-12-20 13:24:30 +08:00
    @leeeboo 安装 unbound 监听在非 53 端口,在 unbound 的配置文件中添加 private-address: ::/0 即可过滤 aaaa 解析且不影响解析速度,再在 dnsmasq 里面把需要只解析 v4 的丢给 unbound 解析。
    Maskeney
        41
    Maskeney  
       2019-05-14 22:16:43 +08:00
    hello 楼主我今天突然起意又把 IPV6 打开了,同样为了规避 IPV4 透明代理逃逸问题,需要丢一下 AAAA 记录,除了 Netflix 之外还有哪些常用的网络服务是双栈并且容易 IPV6 优先呢?希望楼主把自己的 firewall.user 贴出来给大家参考一下
    Liqianyu
        42
    Liqianyu  
    OP
       2019-08-03 23:05:18 +08:00 via iPad
    @huaxie1988 除了 private-address 本意不是做这个功能的以外,结果很不错。顺便说下 SmartDNS 也可以。
    @Maskeney 我目前也放弃了用 iptables 的方案。iptables 方案并不算好,除非你不能动 DNS 解析器。
    kob521
        43
    kob521  
       2019-11-08 10:40:32 +08:00
    @huaxie1988 这个方法很有效,我进阶了一下,把默认的 pdnsd 关掉,直接用 unbound 监听 5335 端口,然后配合 dnsmasq,所有 gfwlist 的域名用 unbound 解析,不会受到 V6 干扰
    zhaidoudou123
        44
    zhaidoudou123  
       2021-08-19 16:57:46 +08:00
    感谢楼主的思路
    我用了 padavan 固件内置的 dnsforwarder 把符合 list 域名的请求转发给了 smartdns,然后再禁用 smartdns 里的 ipv6 解析,这样就不用关闭整个路由器的 ipv6 aaaa 记录解析了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5482 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:11 · PVG 16:11 · LAX 00:11 · JFK 03:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.