使用 openwrt 对抗校园网多设备检测
使用 openwrt 对抗校园网多设备检测使用Xiaomi Mi Router WR30U (stock layout)一、以 openwrt 24.10.2 分支为例 包含(ua2f + TTL 统一相关模块 + DPI规避 / 时钟漂移模块)1.准备编译环境sudo apt update sudo apt install -y build-essential g++ gcc-multilib gawk gettext git libncurses5-dev libssl-dev python3-distutils rsync unzip zlib1g-dev file wget ccache2.配置代理export http_proxy=http://192.168.0.6:20122 export https_proxy=http://192.168.0.6:20122 git config --global http.proxy http://192.168.0.6:20122 git config --global https.proxy http://192.168.0.6:201223.拉取源码git clone https://github.com/openwrt/openwrt.git cd openwrt git checkout v24.10.24.加入第三方 feeds(UA2F)echo "src-git ua2f https://github.com/Zxilly/UA2F.git" >> feeds.conf.default5.feeds 更新 & 安装./scripts/feeds update -a ./scripts/feeds install -a ./scripts/feeds install ua2f6.配置目标 & 插件make menuconfig▸ UA2F 模块 位置:Network → Routing and Redirection → ua2f ▸ TTL 统一相关模块 位置: Kernel modules → Netfilter Extensions → kmod-ipt-ipopt Network → Firewall → iptables-mod-ipopt ▸ DPI规避 / 时钟漂移模块 位置:Kernel modules → Netfilter Extensions → kmod-nf-conntrack-netlink▸ 启用 LuCI Web 界面 路径:LuCI → Collections → luci ▸ 启用中文语言包 路径:LuCI → Modules → Translations → Chinese (zh-cn) ▸ 启用 WireGuard 支持 Kernel modules → Network Support → kmod-wireguard Network → VPN → wireguard-tools LuCI → Protocols → luci-proto-wireguard7.编译make download -j$(nproc) make -j$(nproc) V=s7.刷写后配置并验证7.1 查看是否已启用 ua2f 服务# 是否启用 UA2F ps | grep ua2f # 启用 UA2F uci set ua2f.enabled.enabled=1 # 使用自定义 User-Agent uci set ua2f.main.custom_ua="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" # 可选的防火墙配置选项 # 是否自动添加防火墙规则 uci set ua2f.firewall.handle_fw=1 # 是否尝试处理 443 端口的流量, 通常来说,流经 443 端口的流量是加密的,因此无需处理 uci set ua2f.firewall.handle_tls=1 # 是否处理微信的流量,微信的流量通常是加密的,因此无需处理。这一规则在启用 nftables 时无效 uci set ua2f.firewall.handle_mmtls=1 # 是否处理内网流量,如果你的路由器是在内网中,且你想要处理内网中的流量,那么请启用这一选项 uci set ua2f.firewall.handle_intranet=1 # 禁用 Conntrack 标记,这会降低性能,但是有助于和其他修改 Connmark 的软件共存 uci set ua2f.main.disable_connmark=1 # 应用配置 uci commit ua2f # 开机自启 service ua2f enable # 启动 UA2F service ua2f start # 读取日志 logread | grep UA2F配置 7.2 TTL 统一相关模块7.2.1 安装nftables-jsonopkg install nftables nftables-json7.2.2 写入配置文件cat > /etc/nftables.conf <<'EOF' table inet firewall { chain postrouting { type filter hook postrouting priority mangle; policy accept; ip ttl set 128 } } EOFcat > /etc/init.d/nftables <<'EOF' #!/bin/sh /etc/rc.common START=19 STOP=10 USE_PROCD=1 PROG=/usr/sbin/nft start_service() { if [ -f /etc/nftables.conf ]; then $PROG -f /etc/nftables.conf else logger -t nftables "No /etc/nftables.conf found, skipping" fi } restart_service() { $PROG flush ruleset start_service } EOFchmod +x /etc/init.d/nftables /etc/init.d/nftables enable /etc/init.d/nftables start# 如果不生效请重启服务 /etc/init.d/nftables restart7.3 验证 DPI 绕过(时钟漂移)lsmod | grep conntrack_netlink8.配置opkg镜像源cat > /etc/opkg/distfeeds.conf <<'EOF' src/gz openwrt_core https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/targets/mediatek/filogic/packages src/gz openwrt_base https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/packages/aarch64_cortex-a53/base src/gz openwrt_luci https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/packages/aarch64_cortex-a53/luci src/gz openwrt_packages https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/packages/aarch64_cortex-a53/packages src/gz openwrt_routing https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/packages/aarch64_cortex-a53/routing src/gz openwrt_telephony https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/packages/aarch64_cortex-a53/telephony # UA2F 第三方源(请改成你自己的IPK源或feed) # src/gz openwrt_ua2f http://your-server/ua2f EOF#完善中文语言包 opkg update && opkg install luci-i18n-base-zh-cn #安装主题 opkg install luci-compat opkg install luci-lib-ipkg wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.3.2/luci-theme-argon_2.3.2-r20250207_all.ipk opkg install luci-theme-argon*.ipk9. NAT669.1 网络-接口-lan-高级设置-IPv6前缀过滤器:设置为「 local(本地ULA)」这一步是为了确保下发到lan接口的IPv6前缀全部来自于指定好的本地ULA。9.2 网络-接口-lan-DHCP服务器-IPv6 RA设置-默认路由器:设置为「 在可用的前缀上 」这一步要求路由器宣告自己是IPv6 ULA地址区域的默认路由。9.3 网络-接口-wan6-高级设置-IPv6源路由:取消勾选由于我们需要使用NAT66,因此需要关闭提供IPv6的WAN口的该选项。9.4 网络-防火墙-wan区域-高级设置-IPv6伪装:勾选这就是我们本步的核心——NAT66。详见教程:https://blog.mzy7.cn/posts/a2651ee8.html===========================================二、以 immortalwrt 21.02 分支为例 包含( ua2f + TTL 统一相关模块 + DPI规避 / 时钟漂移模块 + IPID 顺序化)1.准备编译环境及2.配置代理见上文3.拉取源码git clone https://github.com/hanwckf/immortalwrt-mt798x.git cd immortalwrt-mt798x 4.加入第三方 feeds(UA2F+IPID)echo "src-git ua2f https://github.com/Zxilly/UA2F.git" >> feeds.conf.defaultgit clone --depth=1 https://github.com/CHN-beta/rkp-ipid.git package/rkp-ipid5.feeds 更新 & 安装./scripts/feeds update -a ./scripts/feeds install -a ./scripts/feeds install ua2f kmod-rkp-ipid6.配置目标 & 插件make menuconfig▸ UA2F 模块 位置:Network → Routing and Redirection → ua2f ▸ TTL 统一相关模块 位置: Kernel modules → Netfilter Extensions → kmod-ipt-ipopt Network → Firewall → iptables-mod-ipopt ▸ DPI规避 / 时钟漂移模块 位置:Kernel modules → Netfilter Extensions → kmod-nf-conntrack-netlink ▸ IPID 顺序化模块 位置:Kernel modules → Other modules → kmod-rkp-ipid▸ 启用 LuCI Web 界面 路径:LuCI → Collections → luci ▸ 启用中文语言包 路径:LuCI → Modules → Translations → Chinese (zh-cn) ▸ 启用 WireGuard 支持 Kernel modules → Network Support → kmod-wireguard Network → VPN → wireguard-tools LuCI → Protocols → luci-proto-wireguard7.刷写后配置并验证7.1 ua2f、 DPI 绕过(时钟漂移)见上文7.2 配置 TTL统一模块iptables -t mangle -A POSTROUTING -j TTL --ttl-set 1287.3 配置 IPID 顺序化iptables -t mangle -N IPID_MOD iptables -t mangle -A FORWARD -j IPID_MOD iptables -t mangle -A OUTPUT -j IPID_MOD iptables -t mangle -A IPID_MOD -d 0.0.0.0/8 -j RETURN iptables -t mangle -A IPID_MOD -d 127.0.0.0/8 -j RETURN iptables -t mangle -A IPID_MOD -d 10.0.0.0/8 -j RETURN iptables -t mangle -A IPID_MOD -d 172.16.0.0/12 -j RETURN iptables -t mangle -A IPID_MOD -d 192.168.0.0/16 -j RETURN iptables -t mangle -A IPID_MOD -d 255.0.0.0/8 -j RETURN iptables -t mangle -A IPID_MOD -j MARK --set-xmark 0x10/0x10#用以下抓包命令观察: tcpdump -i wan -nn -vvv ip8.配置opkg镜像源省略