ipv6 结合旁路由的问题

2021-11-29 10:30:41 +08:00
 sherlock1122

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

13136 次点击
所在节点    宽带症候群
77 条回复
heiher
2021-11-29 10:41:01 +08:00
test0x01
2021-11-29 14:18:58 +08:00
我的方法是通过 iptables 只让必要的机器拿到 ipv6
Cheons
2021-11-29 14:39:11 +08:00
ipv6 禁用不就解决了 doge
sherlock1122
2021-11-29 14:48:07 +08:00
@Cheons 想用 ipv6 ,也想要旁路由……
ihipop
2021-11-29 15:01:48 +08:00
@sherlock1122
radvd 支持路由单播和优先级的,你看下文档,可以给指定设备单播一个高优先级路由,v6 流量就被牵引到旁路上去了
Donahue
2021-11-29 15:03:04 +08:00
http://www.360doc.com/content/20/1015/21/7603857_940659270.shtml
百度一下你就知道,网络、旁路由相关的可以到恩山看看,恩山很多相关内容
ericww
2021-11-29 16:15:15 +08:00
把 openwrt 放到小米前面不就完事了?反正你现在也是这么个情况。
lizenghui
2021-11-29 16:24:21 +08:00
同问,暂时是把 ipv6 关了。
@ihipop 这个应该是正解 只是基础差 坐等高手出现
Archeb
2021-11-29 16:37:40 +08:00
主路由不获取 IPv6 DNS 服务器(不影响 AAAA 解析),然后在 OpenWRT 上的 DNS 对黑名单域名不返回 IPv6 应该是比较好的方案。
sherlock1122
2021-11-29 16:48:52 +08:00
@ericww N1 的 openwrt ,比较弱。

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

有没有更好的方案。
sherlock1122
2021-11-29 16:57:43 +08:00
@Donahue 这个教程读了一遍,本质上跟我的唯一差别是我还缺一个步骤:让主路由的 DNS v6 指向 n1 ,但是 v6 的流量是怎么走到的 n1 ,没有理解。
sherlock1122
2021-11-29 17:00:28 +08:00
@ihipop 兼容大部分的客户端吗?
如 Win 11 ,Android ,iOS 。
ihipop
2021-11-29 17:23:53 +08:00
@sherlock1122

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

所以只要你[仅对被墙的域名]禁用 AAAA 返回,应当不会对性能产生影响。
heiher
2021-11-29 20:19:19 +08:00
@Archeb "透明网关能够把你流量走代理出去的前提是做了 NAT" 非也,iptables 透明代理不只有 nat 表,也有 mangle 表,只要流量经过网关就能捕获。 @sherlock1122 遇到的问题恰恰是流量不经过旁路由。所以 @ihipop 的方法显然是正解,通过单播向被代理的设备宣告旁路由是更高优先级的默认网关,实现流量重定向,也能做被代理设备范围的灵活控制。
ericww
2021-11-29 20:40:46 +08:00
@sherlock1122 你目前设置网关为 openwrt ,所有 v4 的流量都转到你的 N1 openwrt ,和将 N1 前置没什么区别。除非你在路由器就对流量进行分流。如果不想改,那就设置 v6 静态路由把 Google 几个段给 unreachable
MikuM97
2021-11-29 22:49:26 +08:00
我之前玩过 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
2021-11-29 22:59:57 +08:00
补充一点,方案 2 的情况下,无论是否需要 fq 的终端,都能获取 IPv6 地址,需要 fq 的终端,通过 chnroute6 ,访问国内外的 IPv6 地址能做到分流,访问国内不走代理,访问国外透明代理。
dndx
2021-11-29 23:04:29 +08:00
IPv6 分流不困难,https://v2ex.com/t/739809#reply51 就是一种方法。但是配置起来肯定要稍微多一些步骤,使用基本的路由协议比如 OSPF 就可以做到。
qwvy2g
2021-11-29 23:14:10 +08:00
我其实想到一个方法:搭建两个 adguard 服务器,在第一个 adguard 设置一个没有 dns 污染的 dns(dns 最好是在软路由加速服务)。这个 adguard 禁止返回 ipv6 结果。第二个设备像 openwrt 中的 adguard 那样,添加 gfw 网站指定第一个 adguard 的 dns 来解析这些域名,并且添加其他的 dns 来解析其他网站。这样访问 gfw 列表里面的网站时候因为 ipv6 解析结果被屏蔽了,自然不会走 ipv6 通道。而其他网站则是正常通过 dns 来解析。这个方法的前提是路由器要封锁 ipv4 和 ipv6 内网远程 53 端口权限,并且放行特定的 dns 服务器。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/818661

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX