V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
测试工具
SmokePing
IPv6 访问测试
sherlock1122
V2EX  ›  宽带症候群

ipv6 结合旁路由的问题

  •  
  •   sherlock1122 · 254 天前 · 2313 次点击
    这是一个创建于 254 天前的主题,其中的信息可能已经有所发展或是发生改变。

    当前,ipv6 是运营商通告 v6 DNS 和网关。路由器是小米,旁路由 openwrt ,fq 使用 ssr+。路由器推送的 v4 网关和 dns 均为 openwrt 地址。 当开启 ipv6 后,youtube 视频播放不出来,原因估计是 youtube 视频走的 ipv6 流量。 v6 流量并没有通过 openwrt 。 在继续使用旁路由模式下,有比较好的解决办法吗?

    47 条回复    2022-06-17 12:30:57 +08:00
    heiher
        1
    heiher  
       254 天前
    test0x01
        2
    test0x01  
       254 天前 via Android
    我的方法是通过 iptables 只让必要的机器拿到 ipv6
    Cheons
        3
    Cheons  
       254 天前
    ipv6 禁用不就解决了 doge
    sherlock1122
        4
    sherlock1122  
    OP
       254 天前
    @Cheons 想用 ipv6 ,也想要旁路由……
    ihipop
        5
    ihipop  
       254 天前 via Android
    @sherlock1122
    radvd 支持路由单播和优先级的,你看下文档,可以给指定设备单播一个高优先级路由,v6 流量就被牵引到旁路上去了
    Donahue
        6
    Donahue  
       254 天前
    http://www.360doc.com/content/20/1015/21/7603857_940659270.shtml
    百度一下你就知道,网络、旁路由相关的可以到恩山看看,恩山很多相关内容
    ericww
        7
    ericww  
       254 天前
    把 openwrt 放到小米前面不就完事了?反正你现在也是这么个情况。
    lizenghui
        8
    lizenghui  
       254 天前
    同问,暂时是把 ipv6 关了。
    @ihipop 这个应该是正解 只是基础差 坐等高手出现
    Archeb
        9
    Archeb  
       254 天前
    主路由不获取 IPv6 DNS 服务器(不影响 AAAA 解析),然后在 OpenWRT 上的 DNS 对黑名单域名不返回 IPv6 应该是比较好的方案。
    sherlock1122
        10
    sherlock1122  
    OP
       254 天前
    @ericww N1 的 openwrt ,比较弱。

    @Archeb 小米主路由可以自定义 v6 的 DNS ,但是不仅仅是 DNS 的问题。当然,配置一个错误的 v6 DNS 可能也可以。但是 v4 DNS 也可以返回 AAAA 地址,所以让 v4 DNS 不返回 AAAA 地址,这样客户端就拿不到任何 AAAA ip 了,应该是可以的。这样做需要确保主路由推送给客户端的 DNS 都是自己的,不能用公共的,因为公共 DNS 可以响应正确的 AAAA 地址。缺点是让 DNS 不返回 AAAA ,可能对上网性能产生影响。

    有没有更好的方案。
    sherlock1122
        11
    sherlock1122  
    OP
       254 天前
    @Donahue 这个教程读了一遍,本质上跟我的唯一差别是我还缺一个步骤:让主路由的 DNS v6 指向 n1 ,但是 v6 的流量是怎么走到的 n1 ,没有理解。
    sherlock1122
        12
    sherlock1122  
    OP
       254 天前
    @ihipop 兼容大部分的客户端吗?
    如 Win 11 ,Android ,iOS 。
    ihipop
        13
    ihipop  
       254 天前
    @sherlock1122

    https://www.v2ex.com/t/791295#r_10730163 具体看我这里的回复,我手里的设备都表现正常(安桌机顶盒,COREELEC 播放器,ANDROID 手机等),除非你定制过 linux 内核的行为,否则应该也是都一样的
    Archeb
        14
    Archeb  
       254 天前
    @sherlock1122 你是想要被墙域名的 IPv6 也经过 OpenWRT 吗?但是这样就算能过,也没有办法通过透明网关上网,因为你 IPv6 本身就是公网 IP ,透明网关能够把你流量走代理出去的前提是做了 NAT ,客户端是公网 IP 的情况下,是不可能能达到这个效果的。

    所以只要你[仅对被墙的域名]禁用 AAAA 返回,应当不会对性能产生影响。
    heiher
        15
    heiher  
       254 天前
    @Archeb "透明网关能够把你流量走代理出去的前提是做了 NAT" 非也,iptables 透明代理不只有 nat 表,也有 mangle 表,只要流量经过网关就能捕获。 @sherlock1122 遇到的问题恰恰是流量不经过旁路由。所以 @ihipop 的方法显然是正解,通过单播向被代理的设备宣告旁路由是更高优先级的默认网关,实现流量重定向,也能做被代理设备范围的灵活控制。
    ericww
        16
    ericww  
       254 天前 via iPhone
    @sherlock1122 你目前设置网关为 openwrt ,所有 v4 的流量都转到你的 N1 openwrt ,和将 N1 前置没什么区别。除非你在路由器就对流量进行分流。如果不想改,那就设置 v6 静态路由把 Google 几个段给 unreachable
    MikuM97
        17
    MikuM97  
       254 天前   ❤️ 1
    我之前玩过 Redmi ac2100 做主路由,N1 刷 openwrt 做旁路由的架构。旁路由的玩法之所以能成立,是建立在使用旁路由的终端,包括安卓手机、电视盒子等,可以自由修改 IPv4 参数,绕过主路由的 DHCP 分配机制,将网关及 DNS 指向旁路由,从而让本机发出的流量都去旁路由上走一遍,再由旁路由转发到主路由,从而旁路由上可以挟持处理经过自身流量,完成 fq 透明代理、去广告等一系列骚操作。

    然而 IPv6 的出现引入了一个难题,那就是当前除 Windows 外,大部分终端对于手动配置 IPv6 参数的支持都不太好,例如小米的 MIUI ,没 root 的情况下只能通过 SLAAC 从主路由自动获取 IPv6 ,获取到的网关和 DNS 当然指向主路由,又没办法手动改,就没法把 IPv6 的流量引导到旁路由了。

    当前大部分操作系统的软件和逻辑,在本地有 IPv6 地址,服务器也支持 IPv6 的情况下,IPv6 优先,IPv6 不通,再回退 IPv4 。所以你主路由打开 IPv6 之后,终端获取了主路由的 IPv6 网关地址,DNS 解析也奔着主路由过去了,这种情况相当于流量和 DNS 解析绕开了旁路由,骚操作当然就实现不了。

    个人分析,可能的解决方案:
    0.完全放弃 IPv6 ,主路由关闭 IPv6 相关功能即可。

    1.对于使用旁路由的终端,放弃 IPv6 。曾经使用过的方案。由于目前操作系统默认都会优先使用 ipv6 的 dns 进行解析,如果仅仅只在旁路由上面的 dnsmasq 禁用 ipv6 的 4A 记录,很有可能使用旁路由的终端,dns 请求走还是通过 IPv6 走到主路由上,造成 dns 污染。因为我都主路由 AC2100 是刷过 padavan 的,因此我的方法是打开 WLAN 的访客网络,然后用 ebtables 禁用访客网络所属接口( ra1,rai1 )收发双向的所有 ipv6 报文转发,然行需要使用旁路由的终端连接访客网络的 ssid ,即可做到使用旁路由的终端完全获取不到 IPv6 地址及 DNS 。这个时候再手动把 ipv4 网关及 dns 全部指向旁路由即可。不使用旁路由的其它终端,连接原有主网络的 SSID ,IPv6 走主路由转发,可以正常使用 IPv6 。

    2.放弃旁路由架构,使用主路由做透明代理。当前使用的方案。主路由改成 J4125 的软路由+openwrt ,AC2100 直接改成 AP 模式做无线接入,fq 软件是 passwall ,passwall 上面启用 IPv6 透明代理( Tproxy )。这种方案适合自建机场并且熟练使用 Linux 的用户,因为对 fq 软件里面配置的节点服务器要求比较高,节点服务器的网络必须支持 IPv6 ,不支持的话就得通过 tunnel broker 或者 cloud flare 的 warp 去弄一个 6In4 隧道,市面上购买的机场一般不具备此条件,只能代理纯 v4 。

    综上,如果当前追求稳定,或者购买机场,建议 0 或者 1 ,如果自建机场,有一定 Linux 能力和网络基础,可以尝试折腾下 2 。
    MikuM97
        18
    MikuM97  
       254 天前
    补充一点,方案 2 的情况下,无论是否需要 fq 的终端,都能获取 IPv6 地址,需要 fq 的终端,通过 chnroute6 ,访问国内外的 IPv6 地址能做到分流,访问国内不走代理,访问国外透明代理。
    dndx
        19
    dndx  
       254 天前
    IPv6 分流不困难,https://v2ex.com/t/739809#reply51 就是一种方法。但是配置起来肯定要稍微多一些步骤,使用基本的路由协议比如 OSPF 就可以做到。
    qwvy2g
        20
    qwvy2g  
       254 天前
    我其实想到一个方法:搭建两个 adguard 服务器,在第一个 adguard 设置一个没有 dns 污染的 dns(dns 最好是在软路由加速服务)。这个 adguard 禁止返回 ipv6 结果。第二个设备像 openwrt 中的 adguard 那样,添加 gfw 网站指定第一个 adguard 的 dns 来解析这些域名,并且添加其他的 dns 来解析其他网站。这样访问 gfw 列表里面的网站时候因为 ipv6 解析结果被屏蔽了,自然不会走 ipv6 通道。而其他网站则是正常通过 dns 来解析。这个方法的前提是路由器要封锁 ipv4 和 ipv6 内网远程 53 端口权限,并且放行特定的 dns 服务器。
    Archeb
        21
    Archeb  
       254 天前
    @heiher 我的问题,我想明白了(我知道怎么把流量导过去,也知道有 nat 和 mangle 表,我把透明代理和 v4 基于 NAT 的负载均衡搞混了)
    fish3125
        22
    fish3125  
       254 天前 via Android
    都觉得 n1 性能不好了就不要搭建两个 adguard 了。把搭建两个的想法其中一个换成在 n1 上搭建一个 dnscrypt 也可以设置丢弃翻墙部分域名 v6 的解析。
    06_taro
        23
    06_taro  
       254 天前
    用 ipset ,建立一个 inet 的 list 和一个 inet6 的 list 。
    对需要科学的域名,DNS 查询时,A 写入 inet 的 list ,AAAA 写入 inet6 的 list ,
    然后 iptables 将 inet list 的地址转发,iptables6 将 inet6 list 的地址直接 DROP ,
    这样不影响直连的 ipv6 ,同时科学地址不会走 ipv6 而是直接 ipv4 转发出去。
    junweivan
        24
    junweivan  
       254 天前 via Android
    光猫桥接,主路由拨号获取 IPV6 和 IPV4 ,旁路由 OPENWRT 作需要科学的终端的网关和 DNS ,SSR+使用 CN 列表以外模式。

    实测可用,目前正在使用。

    不要用 GFW 模式,GFW 模式不可用,打不开需要科学的网站,猜测终端优先走 IPV6 了
    allenyang89
        25
    allenyang89  
       254 天前
    好巧哦,也被坑了好久,最后放弃了,还是 openwrt 直接主路由,小米就当个 AP 算了。openclash 一把梭
    sherlock1122
        26
    sherlock1122  
    OP
       253 天前 via Android
    @junweivan 没太理解,ipv6 的流量直接走了,没过旁路由呢。
    sherlock1122
        27
    sherlock1122  
    OP
       253 天前 via Android
    @allenyang89 等我的新设备 n5005 到了,估计也要这么搞。
    yyysuo
        28
    yyysuo  
       253 天前
    @sherlock1122 我昨天刚刚搞了一下 ipv6 的 dns ,我想有可能可以解决你的问题。

    先说方案:局域网内分发的 ipv6dns 填写 ipv4 的 dns ,格式是::ffff:192.168.1.1 ,把 192.168.1.1 改成自己的 ipv4 dns 地址
    缺陷:局域网内 win 机器的 nslookup 不返回结果了,怀疑是 nslookup 本身的问题。其它无影响。

    原理分析:
    不管是旁路由还是主路由,看你应该是启用了科学软件的,一般都自带分流,也能劫持 v4 的 dns 请求,但是对 ipv6 dns 的劫持有些科学软件可能做得不好,所以只需要把 ipv4 的 dns 按 ipv6 的格式下发,就可以让局域网的设备发送 ipv6 的 dns 请求到 ipv4 的 dns ,也可以正常的返回 aaaa 记录。
    域名经过科学软件分流->解析出 ipv4 及 ipv6 地址->机场 如果机场支持 v6 ,则正常访问即可,不支持 v6 就可以自动回落到 v4.
    sherlock1122
        29
    sherlock1122  
    OP
       253 天前
    @yyysuo 这里只解决了 DNS 的问题,ipv6 下一跳貌似没有解决?也就是如果客户端拿到了 aaaa 地址之后,数据包直接出去了,而不经过旁路由。
    sherlock1122
        30
    sherlock1122  
    OP
       253 天前
    @dndx 看起来挺不错的,不过小米主路由自由度太低了,没法搞。
    sherlock1122
        31
    sherlock1122  
    OP
       253 天前
    @MikuM97 看看大家有没有除了 0 ,1 ,2 之外的第三种方法。
    junweivan
        32
    junweivan  
       253 天前 via Android
    @sherlock1122

    科学上网的时候,临时设置下终端的网关和 DNS 就可以了,还是走的 IPV6
    yyysuo
        33
    yyysuo  
       253 天前
    @sherlock1122 你试试呢,我是主路由模式。
    junweivan
        34
    junweivan  
       253 天前 via Android
    @sherlock1122 更正,科学走的还是 Ipv4 ,不小心摁错键了。终端不用科学的时候,取消终端的网关和 Dns 设置,就会正常走运营商下发的 ipv6 或者 ipv4

    如果你是想 ipv6 也走旁路由科学上网,这套操作应该不行。

    但是你问的不是“不关闭 ipv6 的同时还能科学上网”吗?这个就可以。
    jwz426
        35
    jwz426  
       253 天前
    我按照 https://v2ex.com/t/664819 里面的方法主路由梅林系统打开 ipv6 ,设置 ip6tables 只给旁路由和特定设备分配 ipv6 。可以做到旁路由通过 ipv6 开放服务,qBittorrent 下载机支持 ipv6 下载。但是家里小米盒子很多 app 访问特别慢。后面也放弃了。
    还是主路由下开 ipv6 比较不折腾。
    cwbsw
        36
    cwbsw  
       253 天前
    简单点,直接主路由防火墙 REJECT 到 Google IPv6 Prefix 的连接即可。
    sherlock1122
        37
    sherlock1122  
    OP
       253 天前
    @cwbsw 主路由功能很弱,无法控制。
    KKLeon
        38
    KKLeon  
       253 天前
    好巧,我也是心血来潮,这两天陆续折腾了几次 ipv6 ,最后还是决定关掉(因为发现开启 ipv6 之后,网络质量变差了)。先说环境配置;
    - 主路由:新 3 刷老毛子,开 ipv6.dns v6 和 v4 都指向 N1 旁路由,网关也指向 N1.
    - 旁路由:N1 刷 openwrt ,新建 lan6 口,打开 ipv6 dns 解析。
    最终 ipv6-test 网站测试通过,但是访问油管的话,因为我的机场不支持 v6 ,所以访问油管走的还是 v4.
    贴一下教程链接,照着操作肯定能行: https://www.right.com.cn/forum/thread-4046582-1-1.html
    KKLeon
        39
    KKLeon  
       253 天前
    @KKLeon 我自己测了一下,上面说的方式下,v6 的流量是走了 openwrt 的,我也是刚才想到一个细节才确定:
    一开始按照上面的设置好之后,ipv6-test 网站测试不通过(因为我的机场不支持 v6 ,但 passwall 默认的规则让 ipv6-test.com 走了机场的流量),然后进 passwall 里面,把 ipv6-test.com 加入到 passwall 的强制直连(也就是不走机场流量),然后 ipv6-test 就通过了。
    sherlock1122
        40
    sherlock1122  
    OP
       253 天前
    @KKLeon bj 移动给我打电话,送我公网 v4 ip 了……
    我还折腾个啥。虽然我当前的目的达到了如下目的:
    1. 开启 ipv6 ,外网可以访问我的 LAN 各个 ipv6 地址;
    2. 不影响科学上网。

    主路由配置一个错误的 v6 DNS 下发即可。
    KKLeon
        41
    KKLeon  
       253 天前
    @sherlock1122 是啊,有了公网 ip 还折腾个啥。我是北京联通,也有公网 ip 。折腾几次 v6 之后发现除了能访问 v6 网站,别的卵用没有,关键是还莫名其妙的影响网络质量。
    最后还是选择关掉 IPV6 。
    ihipop
        42
    ihipop  
       251 天前 via Android
    明明旁路上 radvd 配置一个高优先级路由+几条 mangle 规则就能搞定的事情,一堆高谈阔论猛如虎的操作,总结 0123 各种方法,为什么都不试试说的方案呢?哎.。,随便吧。
    ihipop
        43
    ihipop  
       251 天前 via Android
    @ihipop 少了一个“我”字,我说的方案。
    lizenghui
        44
    lizenghui  
       246 天前
    @ihipop 我就说你这个才是正解 可惜不会搞 我的主路由是 openwrt 只做 DHCP 和 PPPOE , 旁路由是个 ubuntu 科学上网, 是需要搞个 radvd 服务?
    lizenghui
        45
    lizenghui  
       246 天前
    @ihipop 大神 我电报同名 可以交流一下。
    elapsezyh
        46
    elapsezyh  
       113 天前
    我也遇到了同样的问题,按楼里的我能看懂的试了一圈,但比如 ihipop 大神的我就没看懂,然鹅还是没有解决
    主路由同是小米 按 @Donahue 提供的教程设置了小米 IPV6 的 DNS 到旁路由,但是没有用。。。
    请问楼主解决了吗?
    zhangchimr
        47
    zhangchimr  
       54 天前
    我来挖个坟
    折腾了两天,各种乱尝试后,得到了解决,最终结果:ipv4 fq 没问题,访问国内 ipv6 没问题( https://test-ipv6.comhttp://test6.ustc.edu.cn 都显示正常),访问 https://ipv6test.google.com 显示没有 ipv6 ,但是播放 youtube 视频没问题。

    小白一枚,我也不懂原理...有错勿喷。(应该是 ipv6 设置为非运营商的导致无法解析 q 外的 ipv6 ,然后回落到 ipv4 ,但是国内的 ipv6 为什么访问正常?还是说是假的?)
    我只设置了两项
    1.主路由小米,ppoe 拨号其中 ipv6 自定义 v6dns 为 2001:4860:4860::8888 和 2001:4860:4860::8844
    2.旁路由 openwrt ,新建一个接口名字随意,接口选择自定义,填 @lan ,协议选择 dhcpv6 ,同样设置 dns 服务器步骤 1 的两个。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1092 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 20:39 · PVG 04:39 · LAX 13:39 · JFK 16:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.