探讨下有没有国内流量保留 ipv6, 国外流量禁用 ipv6 的优雅姿势 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
momody2099
V2EX    宽带症候群

探讨下有没有国内流量保留 ipv6, 国外流量禁用 ipv6 的优雅姿势

  •  
  •   momody2099 2023-12-15 10:42:13 +08:00 4729 次点击
    这是一个创建于 669 天前的主题,其中的信息可能已经有所发展或是发生改变。
    家里电信双栈网络,路由器是 lede/openwrt ,DNS 用 adguard home 做了一层缓存转发,启用 ipv6 地址和 ipv6 解析。国内访问一切正常而且很爽,但国外流量一是因为机场不支持 ipv6 ,二是出国 ipv6 直连线路确实拉跨,经常访问不了或者出奇的慢。

    当前的方案是将直连不能访问的网站( V2EX )使用 adguard home 的 ipset 功能,将解析到的 ipv6 加到一个指定的 ipset, 然后在 openwrt ip6table forward 转发链上 reject 掉,这样的问题是还会时不时碰到无法访问或访问慢的网站,需要不停的加这个 ipset 清单。于是想着有没有简洁优雅的方式可以直接保留国内 ipv6 流量,禁用国外 ipv6 。

    先说我能想到的 2 个方案,一是 DNS 层面,另一是 iptables 层面:
    1. 当前使用的 adguard home 能做的只能全局停用或者启用 ipv6 解析,无法指定对部分域名进行 ipv6 的停用或启用解析,这样的话就得多加一层 DNS 解析,多加的这层负责国外所有 DNS 解析,并且配置停用 ipv6 解析。这个方案的问题是需要 2 层 DNS 解析,而且国内,国外的域名清单能否找全,哪里能有?

    2. 在 openwrt 上使用 ip6tables 的 FORWARD 转发链,配置只允许国内的 ipv6 网段通过,REJECT 所有其它网段,找了个国内的 ipv6 网段清单而且不多,这个实现容易。但弊端是实际所有客户端还是能拿到 ipv6 地址,而且像浏览器之类的客户端都是 ipv6 优先,会先进行 ipv6 请求,待 ipv6 请求失败后再次进行 ipv4 请求,多少对使用体验会有影响。附一个 iptables 实现:
    ip6tables -F FORWARD
    ip6tables -I FORWARD -d 240e::/18 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 2408:8000::/20 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 2409:8000::/20 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 240a:c000::/20 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 240c:c000::/20 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 240a:4000::/21 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 240a:8000::/21 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 240b:8000::/21 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 240c:8000::/21 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 240d:4000::/21 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 2408:4000::/22 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 240c:4000::/22 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 240d:8000::/24 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 240f:4000::/24 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 240f:8000::/24 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 2400:dd00::/28 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 240c::/28 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 2001:4510::/29 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 2400:a980::/29 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 2a0c:f480::/29 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 2a0d:2480::/29 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 2406:cf00::/30 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 2001:250::/31 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 2001:da8::/31 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -d 2403:800::/31 -j ACCEPT -m comment --comment "CHINA MAINLAND ipv6"
    ip6tables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    ip6tables -A FORWARD -j REJECT
    17 条回复    2023-12-18 12:24:04 +08:00
    evalfun
        1
    evalfun  
       2023-12-15 10:45:07 +08:00
    用 mosdns ,对非国内域名优先使用 ipv4 解析结果就可以了。不推荐动防火墙规则
    vcn8yjOogEL
        2
    vcn8yjOogEL  
       2023-12-15 10:54:00 +08:00
    github 上有提前做好的 bgp ip 表, 直接让非国内 v6 全部返回无路由/拒绝即可, 但这个方法可能会让设备认为它在纯 v4 环境

    dns 走 geosite, 只有国内域名返回 aaaa 记录
    yaott2020
        3
    yaott2020  
       2023-12-15 11:15:28 +08:00 via Android
    屏蔽国外 aaaa 解析即可
    pagxir
        4
    pagxir  
       2023-12-15 11:24:26 +08:00
    dns 的设置,我一般是这样子
    1 国内 IPv4
    2 国外 NAT64
    3 国外 IPv6
    4 国外 IPv6
    5 国内 IPv6
    这样的选择顺序。

    然后路由器上对 NAT64 的 IPv6 地址做一下转换或者 NAT 就可以了,完全不需要 ipset 。
    TerenceRust
        5
    TerenceRust  
       2023-12-15 11:34:24 +08:00
    chinadns ,屏蔽海外 ipv6 解析。iptables 用 ipset 兜底
    TerenceRust
        6
    TerenceRust  
       2023-12-15 11:36:28 +08:00
    首先需要一个中国 ipv6 地址表,网上有,每天 crontab 更新就行。chinadns 会根据这个地址表屏蔽非国内的 ipv6 地址返回,iptables 也可以用这个表的 ipset 来做拦截
    chinawrj
        7
    chinawrj  
       2023-12-15 12:22:38 +08:00
    ip6table 配合 geoip ,比如:
    ip6tables -A FORWARD -m geoip ! --dst-cc CN -j DROP
    TwoBall
        8
    TwoBall  
       2023-12-15 12:26:17 +08:00
    我用的 paopao 的一套方案,目前还可以
    mantouboji
        9
    mantouboji  
       2023-12-15 13:04:45 +08:00
    你国外机场换一个支持 IPv6 的吧,gigs racknerd2 v.ps 都可以
    keyfunc
        10
    keyfunc  
       2023-12-15 13:16:26 +08:00
    mosdns ,维护个 CN IP 列表

    ```
    - tag: local_sequence
    type: sequence
    args:
    - exec: $forward_local
    - matches:
    - "resp_ip $local_ip"
    exec: accept
    - exec: drop_resp

    - tag: remote_sequence
    type: sequence
    args:
    - exec: prefer_ipv4
    - exec: ecs 58.32.0.0
    - exec: $forward_remote
    - exec: accept
    ```

    就行了
    xiaoke
        11
    xiaoke  
       2023-12-15 13:17:01 +08:00 via Android
    paipaodns ? 作者也在 v 站
    maybeonly
        12
    maybeonly  
       2023-12-15 15:48:03 +08:00
    说真的
    reject-with icmp6-port-unreachable
    还是蛮快的
    这样客户端就不会等超时
    直接就尝试 ipv4 了
    屏蔽 4a ?太麻烦了吧……
    cst4you
        13
    cst4you  
       2023-12-15 15:53:39 +08:00
    直接全关闭 ipv6 解决问题(
    pagxir
        14
    pagxir  
       2023-12-15 17:04:23 +08:00
    如果是 linux 系统的话,你也可以用 ip addrlabel 处理,将国内全归到一个 label 去,然后也修改一下/etc/gai.conf 。因为国内跟国外不在一个 label ,就会优先级很低,变成国内 ipv6 -> ipv4 -> 国外 ipv6 的选择顺序。
    menurable
        15
    menurable  
       2023-12-16 22:03:27 +08:00 via iPhone
    两个 adguardhome 首先用一个 adguardhome dns 分下流 再套娃
    sentivcn
        16
    sentivcn  
       2023-12-17 02:36:46 +08:00
    mosdns ,污染域名的上游 prefer_ipv4
    fengyaochen
        17
    fengyaochen  
       2023-12-18 12:24:04 +08:00 via iPhone
    vps 上安装 adguard 禁用 aaaa 解析就行了,dns 就填 vps 的 adguard 地址,反正结果 vps 的流量都是国外流量,就能达到目的了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     921 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 20:49 PVG 04:49 LAX 13:49 JFK 16:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86