Selfnet 宿舍网的上网方式与去广告方案:在红米 AX6 上折腾后的取舍
Table of Contents
- 一、环境与问题起点
- 1.1 网路环境与设备
- 二、Selfnet 下当前上网方式分析
- 2.1 IPv4:CGNAT + DHCP
- 2.2 IPv6:原生公网
- 2.3 是否会有“被运营商强插广告”的问题?
- 三、去广告方案的选择:终端 vs 路由器
- 3.1 方案 A:终端侧 + 加密 DNS
- 3.2 方案 B:路由器跑 AdGuard Home,全屋 DNS 过滤
- 3.3 方案 C:手机本地 VPN 去广告
- 四、在路由器上尝试”重型方案”时遇到的几个问题
- 4.1 /overlay 空间吃紧:opkg 报错但根本原因是“没空间”
- 4.2 IPv6 relay 配置容易走歪
- 五、最终选择:AP 模式 + 终端去广告
- 六、常见错误、现象与排查思路
- 6.1 把“网站自带广告”误认为“运营商插广告”
- 6.2 看到 opkg 报错就怪镜像源,忽略了“空间不足”
- 6.3 在已有 IPv6 桥接的前提下硬上 IPv6 relay,反而搞坏
- 6.4 期望“路由器解决一切”,结果是在有限的硬件上堆功能
- 七、总结与反思:在复杂和简单之间做选择
Selfnet 宿舍网的上网方式与去广告方案:在红米 AX6 上折腾后的取舍
这篇是 Selfnet 系列的第三篇。前两篇分别处理了:
- 把红米 AX6(AE86Wrt)改成 Dumb AP,保留 IPv6 和 ZeroTier;
- 在 Selfnet 门户上配置宿舍电脑的 SSH / RDP 端口转发。
这一篇聚焦两个问题:
- 我现在到底是怎么上网的,会不会被运营商插广告?
- 在这种前提下,怎样去广告更合适:终端做,还是在路由器上全屋拦截?
中间我确实尝试过一套”比较重”的方案:把路由器改回路由模式,在路由器上跑 AdGuard Home、做 IPv6 relay,让所有终端走路由器的 DNS;最后因为复杂度和空间问题,没坚持下去,又退回了简单方案。这篇文章把这个过程梳理一下。
一、环境与问题起点
1.1 网路环境与设备
设备清单(与系列其他文章保持一致):
- 上游网络:Selfnet(德国学生宿舍网)
- IPv4:
100.78.x.x段,属于 CGNAT(运营商级 NAT) - IPv6:
2001:7c7:…/2a00:…这类原生公网前缀 - DNS 后缀:
user.selfnet.de
- IPv4:
- 主路由器:红米 AX6(刷了 AE86Wrt 固件),当前模式:已经改成 Dumb AP / 桥接,WAN 与 LAN 打通,终端直接拿 Selfnet 分配的地址
- MacBook Air:便携开发设备,在宿舍和工位之间通勤
- Windows 电脑:长期位于德国学生宿舍
- Linux 工作站:位于中国大陆,Linuxmint 系统,主要开发环境
- 其他终端:手机、平板等
最初的问题是一个朴素的疑问:
“我这种上网方式到底算什么?会不会被运营商插广告?如果要给手机去广告,在不牺牲 IPv6 的前提下怎么做?“
二、Selfnet 下当前上网方式分析
先把现状说清楚,再谈去广告。
2.1 IPv4:CGNAT + DHCP
从 Windows 的 ipconfig 输出可以看到:
- IPv4 地址:
100.78.32.x - 子网掩码:
255.255.255.240 - 默认网关:
100.78.32.174
100.64.0.0/10 这一段是运营商常用的 CGNAT 内网段。这意味着:
- 我这台设备的 IPv4 地址对外并不是“独占公网”,而是统一由 Selfnet 的一个公网 IPv4 出口地址 NAT 出去;
- 外网不能直接通过 IPv4 连回我这台电脑,除非在 Selfnet 门户做端口转发。
这一点在上一篇端口转发的实测里已经得到验证。
2.2 IPv6:原生公网
同一份 ipconfig 输出里,还能看到:
- IPv6 地址:
2001:7c7:2158:6c80:…(全球单播) - 本地链接 IPv6:
fe80::… - 默认网关:
fe80::200:ff:fe00:1d
这说明 Selfnet 正在给终端发 原生公网 IPv6,默认路由是上游的链路本地地址(fe80::),路由器作为 AP 只是在中间转发 RA / DHCPv6 / NDP。
结论是:
- IPv4 在 CGNAT 后面,更多是“我出去访问别人”;
- IPv6 是真正“别人也可以来访问我”的通道,安全边界要靠终端防火墙和应用本身。
2.3 是否会有“被运营商强插广告”的问题?
在这种模式下,常见的广告路径有两种:
-
网络层插入 HTML 片段 / JS 代码
- 需要能篡改明文 HTTP 内容;
- 现在大部分网站和 App 都用 HTTPS,运营商很难中途解密再改。
-
DNS 劫持
- 把某些域名解析到广告服务器;
- 或在 NXDOMAIN 上返回广告页面。
结合当前 Selfnet 环境:
- DNS 服务器由 Selfnet 下发,理论上有 DNS 劫持的可能;
- 但我实际访问的网站和 App 绝大多数走 HTTPS,即使有 DNS 劫持,也多是“整体跳到一个假站点”这样的问题,而不是往正常网页里乱塞一块广告 HTML;
- 目前没有看到明显“页面被二次修改”的迹象。
所以,“路由器是桥接 + Selfnet + HTTPS 为主”的组合下,大部分广告其实来自 网站/App 自己,而不是网络侧硬插。
如果要进一步防御 DNS 劫持,可以在终端或路由器启动 加密 DNS(DoH/DoT),让 DNS 查询本身也走 HTTPS/TLS。
三、去广告方案的选择:终端 vs 路由器
我主要考虑过三种路径:
- 终端侧去广告 + 加密 DNS
- 路由器跑 AdGuard Home,全屋 DNS 过滤
- 手机上直接装去广告 App(本地 VPN)
3.1 方案 A:终端侧 + 加密 DNS
这是最轻量的一种:
-
浏览器装 uBlock Origin(PC),对网页广告效果最好;
-
手机/平板设置 加密 DNS(DoH/DoT):
- 例如 NextDNS、Cloudflare(1.1.1.1 / 2606:4700:4700::1111);
- 可以直接在系统里设置“仅使用加密 DNS”。
优点:
- 不依赖路由器配置,出门用 4G / 其他 Wi-Fi 时也能生效;
- 不占用路由器闪存和 CPU;
- 配置出问题只影响单一设备,更好回滚。
缺点:
- 家里设备多的话,需要逐台配置;
- 对于不方便改 DNS 的设备(某些电视/盒子),可能效果有限。
3.2 方案 B:路由器跑 AdGuard Home,全屋 DNS 过滤
这是最“工程师心态”的方案:在 OpenWrt / AE86Wrt 上装 AdGuard Home(AGH),所有 DNS(包括 IPv6)都先经过 AGH,再由 AGH 转发到上游(可以是加密 DNS)。
大致思路:
- 路由器用 路由模式(WAN / LAN 分离),LAN 用 192.168.x.x;
- 路由器自身跑 AGH,监听 53 端口(或旁挂一个端口);
- DHCP/RA 下发 DNS = 路由器 / AGH;
- 对 IPv6,路由器需要做 RA/DHCPv6/NDP 中继或自身下发,同时具备 IPv6 转发能力。
优点:
- 在家里所有设备统一走一套过滤策略,局域网内“即连即生效”;
- 可以集中管理黑白名单、日志、统计。
缺点(结合红米 AX6 + AE86Wrt 的实际体验):
- AE86Wrt 本身已经集成了很多插件和图形界面组件,/overlay 空间比较紧张;
- 再安装 AGH、中文界面、额外工具,很容易把闪存打满;
- IPv6 relay 配置比较绕,需要同时处理
sysctl、odhcpd、/etc/config/dhcp等; - 一旦配置不当,IPv6 反而容易“拿到地址但上不了网”。
3.3 方案 C:手机本地 VPN 去广告
主要针对手机:
- Android:AdGuard、Blokada、RethinkDNS 等,走本地 VPN 拦截 DNS/HTTP(S);
- iOS:AdGuard / 1Blocker,更多针对 Safari 内容拦截。
优点:
- 对手机用户体验最直观;
- 不改路由器,出门也生效。
缺点:
- 某些机型上长期开 VPN 会略微影响耗电;
- 对部分 App 内的广告受系统限制,需要配合其它手段(如加密 DNS)。
四、在路由器上尝试”重型方案”时遇到的几个问题
虽然最后没采用,但中间我确实在红米 AX6 路由器上尝试过一轮”路由模式 + IPv6 relay + AGH”。过程里暴露出的几个问题,单独说一下。
4.1 /overlay 空间吃紧:opkg 报错但根本原因是“没空间”
在安装 odhcpd / AdGuard Home 以及各种依赖时,opkg 给过类似的错误:
Collected errors:
* parse_from_stream_nomalloc: Missing new line character at end of file!
* opkg_download: Failed to download https://mirrors.cloud.tencent.com/lede/...
* ... wget returned 8.
一开始我以为是镜像源不稳定,后来用 df -h 才发现根因其实是 overlay 剩余空间太少。
典型排查命令:
df -h
du -h /overlay/upper | sort -h | tail -n 20
du -h /overlay/upper/* -d1 | sort -h
顺着 du 输出,可以看到不少大文件/目录来自:
- 多余的主题 / 语言包;
- 没在用的代理/穿透插件(zerotier、ddnsto 等);
- 各种缓存(
/overlay/upper/var/opkg-lists等)。
清理方式示例(只供参考,删前建议自己再确认):
# 不用 PPPoE 的话(Selfnet 一般不需要)
opkg remove ppp ppp-mod-pppoe
# LuCI 里不常用的主题 / 语言包
opkg list-installed | grep -E 'luci-theme|luci-i18n'
opkg remove luci-theme-argon 2>/dev/null
opkg remove luci-i18n-base-zh-cn 2>/dev/null # 不依赖中文界面的话可以删,之后也能再装回来
# 没在用的穿透/远程管理
opkg remove zerotier 2>/dev/null
opkg remove ddnsto 2>/dev/null
# 清理 opkg 残留列表
rm -rf /overlay/upper/var/opkg-lists 2>/dev/null || true
清理之后再看 /overlay,空间回到 2–3MB 以上,opkg 才比较稳定。
4.2 IPv6 relay 配置容易走歪
为了让路由器在 路由模式 下同时承载 IPv6,需要做大致三件事:
- 打开 IPv6 转发 / 接口转发
sysctl -w net.ipv6.conf.all.forwarding=1
uci set network.globals.forwarding_ipv6='1'
uci commit network
- 在 /etc/config/dhcp 里做 RA/DHCPv6/NDP relay
大致形态类似:
uci set dhcp.lan=dhcp
uci set dhcp.lan.interface='lan'
uci set dhcp.lan.ra='relay'
uci set dhcp.lan.dhcpv6='relay'
uci set dhcp.lan.ndp='relay'
uci set dhcp.wan=dhcp
uci set dhcp.wan.interface='wan'
uci set dhcp.wan.ra='relay'
uci set dhcp.wan.dhcpv6='relay'
uci set dhcp.wan.ndp='relay'
uci set dhcp.wan.master='1'
uci commit dhcp
- 确保 odhcpd 安装并启用
opkg update
opkg install odhcpd-ipv6only
/etc/init.d/odhcpd enable
/etc/init.d/odhcpd restart
/etc/init.d/network reload
在 Selfnet 环境里,上游本身就提供 RA / DHCPv6;路由器要做的是“中继”,而不是自己生成前缀。
但实际折腾过程中,经常出现这些现象:
- 终端拿到了
2001:…地址,但默认网关那一栏是空的; - 或者有默认网关,但 DNS 没跟着来,导致“能 ping IPv6 地址,打开网页却失败”。
排查步骤大致是:
- 用
ipconfig/ip -6 addr看终端是否有2001:…地址; - 用
netsh interface ipv6 show route或系统界面,看默认路由是不是fe80::…; - 如果只有地址没默认路由,大概率是
odhcpd中继配置没跑起来; - 再回到路由器用
logread -e odhcpd看日志,有时能看到更具体的错误。
在尝试了一圈之后,我的感受是:在 已经可以直接桥接拿 IPv6 的前提下,再通过路由器硬加一层 IPv6 relay,收益有限,复杂度却明显上去了。
五、最终选择:AP 模式 + 终端去广告
综合前面的实验,我最后把红米 AX6 重新、也彻底地定位成一个“干净的 Dumb AP”,而不是“全能路由器 + 去广告网关”。
最终方案是这样:
-
上网方式
- AX6:Dumb AP / 二层桥接,DHCP / RA/ NDP 全由 Selfnet 提供;
- 终端:直接拿到
100.78.x.x+2001:…。
-
安全与暴露面
- 终端启用系统防火墙,关闭不必要的对外服务;
- 路由器管理面只暴露在本地 alias(例如
192.168.7.2/24),平常用不上。
-
去广告与隐私
- PC 端:浏览器装 uBlock Origin;
- 手机/平板:系统设置加密 DNS(例如 NextDNS 配规则),必要时再叠加 AdGuard / Blokada 这类 App;
- 不在路由器上跑 AGH,只保留最基本的 DNS/转发功能(甚至可以整个 DNS 功能关闭,只用上游的)。
这套组合有几个特点:
- 不牺牲 IPv6;
- 不额外引入复杂的 IPv6 relay 配置;
- 路由器的存储/CPU 压力变小,更稳定;
- 真正要折腾的时候,把精力放在终端(更好调试、更好回滚)。
六、常见错误、现象与排查思路
结合这次折腾,把几个常见误区单列出来。
6.1 把“网站自带广告”误认为“运营商插广告”
现象:
- 看到页面广告比较多,就直觉怀疑“是不是网络在插广告”。
现实:
- 在 HTTPS 普及的今天,要在传输链路中途塞广告,难度比以前大很多;
- 对 Selfnet 这种环境,更大的可能是:网站 / App 自己加载了第三方广告脚本。
排查建议:
- 在浏览器装 uBlock Origin,看看广告是否明显减少;
- 用
https://www.dnsleaktest.com/之类的工具看 DNS 是否被改写; - 如果非常在意,可以换成自己信任的 DoH/DoT 解析器。
6.2 看到 opkg 报错就怪镜像源,忽略了“空间不足”
典型报错:
parse_from_stream_nomalloc: Missing new line character at end of file!
opkg_download: Failed to download ... wget returned 8.
真正原因(本次实践中):
/overlay剩余空间太少,导致包列表/临时文件写不完整;- 清理空间后,同样的镜像源就正常了。
排查步骤:
df -h看 overlay 剩余空间;- 用
du -h /overlay/upper | sort -h | tail -n 20找最大的几项; - 删除确认不需要的主题、语言包、插件、缓存文件;
- 重新运行
opkg update && opkg install ...。
6.3 在已有 IPv6 桥接的前提下硬上 IPv6 relay,反而搞坏
现象:
- 在 AP 模式下一切正常,改成路由模式 + IPv6 relay 后,各种“有地址没网”“test-ipv6 分数变差”等问题出现。
原因:
- 本来 Selfnet → 终端 的路径就是一条干净的二层链路;
- 路由器插进来做 NAT + relay,本质是在重构一个原本已经运转良好的 IPv6 拓扑;
- 一旦转发、RA、DNS 中有一环漏掉,就会表现为“IPv6 看起来有,但不好用”。
建议:
- 如果用 Dumb AP 模式已经满足需求,没有强迫症就不要为了“全屋统一 DNS”去做 IPv6 relay;
- 真有需求,再单独拿时间和备份慢慢调,避免和日常上网混在一起。
6.4 期望“路由器解决一切”,结果是在有限的硬件上堆功能
现象:
- 想在一台路由器上同时跑:IPv6 relay、AdGuard Home、各种代理/穿透、图形界面、主题、远程管理……最终空间/性能都比较紧绷。
风险:
- overlay 打满导致配置无法写入;
- 多个服务抢占 53 端口/80 端口,引发冲突;
- 路由器 crash 或丢配置,影响全家上网。
替代思路:
- 把路由器当成“尽量简单的网络设备”,核心任务是稳定转发;
- 把重型服务(代理、去广告、监控)放到 PC / 树莓派 / 迷你主机上;
- 或者本篇最终采用的做法:在终端解决广告问题。
七、总结与反思:在复杂和简单之间做选择
回头看这段折腾,技术细节其实不算特别高深,真正费时间的是“我想把所有好东西都塞进路由器”的那个念头。
这次的结论,更多是“流程和习惯”的调整:
-
先把现状说清楚,再谈优化
先确认上网方式:DHCP + CGNAT (IPv4) + 原生 IPv6;弄清 Selfnet 已经提供了哪些能力。 在这个基础上,再思考:我是不是一定要让路由器接管 DHCP / DNS?答案其实可以是否定的。
-
不要默认路由器是“万能盒子”
红米 AX6 的硬件不弱,但 AE86Wrt 已经集成了不少功能,再往上堆 AdGuard Home、各种插件,空间和稳定性问题就会出现。 更健康的做法是:路由器负责”让网络通”,其它需求交给专门的设备或终端软件。
-
在做大改动前,先预留回滚路径
不管是从 AP 改路由模式,还是改 IPv6 配置,都先做两件事:
- LuCI 里导出配置备份;
- 预留一个本地管理地址(例如
192.168.7.2),避免把自己锁在门外。
-
对”全屋去广告”的需求做减法
最开始的需求是:“家里所有设备都自动去广告”。 但仔细想想,真正需要这类强策略的设备,其实就几台常用的电脑和手机。 把这几台配置好(uBlock + 加密 DNS + 适当的手机 App),就已经解决了 80% 的问题,远比折腾一套复杂的路由器方案性价比高。
-
接受“现在这个状态就够用了”
当前的组合是:Selfnet + Dumb AP + 终端去广告 + 保留 IPv6。 它不完美,但足够简单、稳定,也覆盖了我真正的需求。 对于后续想折腾的东西(比如再玩一次 AGH 或专用网关),我会尽量放到单独的环境里,而不是在这台路由器上继续堆叠。
从这个角度看,这篇文章更多是在记录一个”向简单回退”的过程:承认不需要那么复杂的方案,本身也是一个决定。