OpenWrt 编译与防检测部署教程
date
Mar 3, 2021
slug
openwrt-compile
status
Published
tags
Network
summary
type
Post
相关文档
OpenWrt 云编译
个人编译项目
仅供参考
OpenWrt 本地编译(推荐)
如果是使用 Clash 加密 + TTL 伪装方案,无需手动编译,直接访问 https://firmware-selector.openwrt.org 下载所需固件即可,刷入固件后,可以手动安装 Clash,并配置防火墙。
请保证全局魔法环境,编译失败的大多数原因是网络问题。
如果你使用的是虚拟机进行编译,建议使用 Clash For Windows 并开启 TUN Mode 即可接管虚拟机流量进行代理。
编译操作系统建议使用 Ubuntu 22.04 LTS,操作系统语言建议使用英文。
# 系统软件包更新
sudo apt-get -y update
sudo apt-get -y upgrade# 安装依赖关系与编译工具链
sudo apt install build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev \
python3-distutils python3-setuptools rsync swig unzip zlib1g-dev file wget# 下载 OpenWrt 源码 (下面二者选其一)
git clone https://github.com/openwrt/openwrt.git && cd openwrt
git clone https://github.com/coolsnowwolf/lede && cd lede# openwrt-22.03 已将 iptables 移除,为避免兼容性问题,暂时切换到 openwrt-21.02
git checkout openwrt-21.02git checkout openwrt-23.05# 更新 feeds 软件源
./scripts/feeds update -a
# 安装 feeds 软件包
./scripts/feeds install -a加入 UA3F 模块
git clone https://github.com/SunBK201/UA3F.git package/UA3F
make menuconfig # 勾选 Network->Web Servers/Proxies->ua3f加入 UA2F 模块
UA2F 与 UA3F 二选一
git clone https://github.com/Zxilly/UA2F.git package/UA2Fmake menuconfig
# 选上三个模块: libmnl, libnetfilter-queue, iptables-mod-nfqueue, 搜索就能找到
# network->firewall->iptables-mod-filter
# network->firewall->iptables-mod-ipopt
# network->firewall->iptables-mod-u32
# 勾选上ua2f,在配置面板中搜索就可找到
# network->Routing and Redirection
# 然后保存退出# 这一步可能时间比较长,要耐心
make kernel_menuconfig
# 然后将
# Networking support ->
# Networking options ->
# Network packet filtering framework (Netfilter) ->
# Core Netfilter Configuration ->
# Netfilter NFNETLINK interface
# Netfilter LOG over NFNETLINK interface
# Netfilter connection tracking support
# Connection tracking netlink interface
# NFQUEUE and NFLOG integration with Connection Tracking 打开上一步可以跳过,但需要在对应内核 config 文件中手动加入
CONFIG_NETFILTER_NETLINK_GLUE_CT=y,除非你知道这是什么,否则不建议你手动添加使用 UA2F 自定义 User-Agent(可选)
在
make menuconfig 中,使用 option 设置。
加入 LuCI
LuCI
--> 1. Collections
--> luci
--> 2. Modules
--> Translations
--> Chinese Simplified (zh_Hans)
--> luci-compat加入 OpenClash
Clash 的加入针对 DPI 检测,如果没有 DPI 检测无需加入
如果你的路由器性能不足可以使用 ShellClash 来代替 OpenClash
svn checkout https://github.com/vernesong/OpenClash/trunk/luci-app-openclash package/luci-app-openclash
make menuconfig
# 选择以下模块
LuCI
--> 1. Collections
--> luci
--> luci-compat
--> 3. Applications
--> luci-app-openclash
Base system
--> Customize busybox options
--> dnsmasq-full (cancel the above 'dnsmasq' option)加入 RKP-IPID 模块
通过 IPID 进行检测的可能性极低,此模块不建议加入。
git clone https://github.com/CHN-beta/rkp-ipid.git package/rkp-ipid
make menuconfig
# 选上三个模块: kmod-ipt-u32, iptables-mod-u32, iptables-mod-filter, 搜索就能找到
# 然后勾选上 ipid
# 位于 kernel-modules->Other modules 下
# 然后保存退出加入防 TTL 检测依赖
make menuconfig
# 选上两个模块: iptables-mod-ipopt, kmod-ipt-ipopt,搜索就能找到
# 然后保存退出其它依赖
Network -> ipset
Firewall -> iptables-mod-conntrack-extra编译
# 预下载编译所需的软件包
make download -j$(nproc) V=s# 编译
make -j$(nproc) || make -j1 || make -j1 V=sPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin make -j$(($(nproc) + 1)) || PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin make -j1 V=s编译后的固件文件在:
openwrt/bin/targets 下面。到这里编译就结束了,刷入固件后就可以进行以下配置。
防检测配置
- 进入
OpenWRT系统设置, 勾选Enable NTP client(启用 NTP 客户端)和Provide NTP server(作为 NTP 服务器提供服务)
- NTP server candidates(候选 NTP 服务器)四个框框分别填写
ntp1.aliyun.com、time1.cloud.tencent.com、stdtime.gov.hk、pool.ntp.org
防火墙配置
写于 2025.11,目前下面的大多数配置已无需加入,因为大部分插件已实现自动配置
请按照以下规则顺序,若顺序与以下不符,可能配置不起效。
# 通过 rkp-ipid 设置 IPID
# 若没有加入 rkp-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
# 由于本校局域网是 A 类网,所以我将这一条注释掉了,具体要不要注释结合你所在的校园网内网类型
# 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
# ua2f 改 UA
# ua2f 最新版本已实现自动配置,无需手动配置防火墙
iptables -t mangle -N ua2f
#由于本校局域网是 A 类网,所以我将这一条注释掉了,具体要不要注释结合你所在的校园网内网类型
# iptables -t mangle -A ua2f -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A ua2f -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A ua2f -d 192.168.0.0/16 -j RETURN # 不处理流向保留地址的包
iptables -t mangle -A ua2f -p tcp --dport 443 -j RETURN # 不处理 https
iptables -t mangle -A ua2f -p tcp --dport 22 -j RETURN # 不处理 SSH
iptables -t mangle -A ua2f -p tcp --dport 80 -j CONNMARK --set-mark 44
iptables -t mangle -A ua2f -m connmark --mark 43 -j RETURN # 不处理标记为非 http 的流 (实验性)
iptables -t mangle -A ua2f -m set --set nohttp dst,dst -j RETURN
iptables -t mangle -A ua2f -j NFQUEUE --queue-num 10010
iptables -t mangle -A FORWARD -p tcp -m conntrack --ctdir ORIGINAL -j ua2f
iptables -t mangle -A FORWARD -p tcp -m conntrack --ctdir REPLY
# 防时钟偏移检测
iptables -t nat -N ntp_force_local
iptables -t nat -I PREROUTING -p udp --dport 123 -j ntp_force_local
iptables -t nat -A ntp_force_local -d 0.0.0.0/8 -j RETURN
iptables -t nat -A ntp_force_local -d 127.0.0.0/8 -j RETURN
iptables -t nat -A ntp_force_local -d 192.168.0.0/16 -j RETURN
iptables -t nat -A ntp_force_local -s 192.168.0.0/16 -j DNAT --to-destination 192.168.1.1
# 通过 iptables 修改 TTL 值
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
# iptables 拒绝 AC 进行 Flash 检测(Flash 时代已成为历史)
iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algo bm --string " src=\"http://1.1.1." -j DROPClash 配置
如果你的路由器性能不足可以使用 ShellClash 来代替 OpenClash
请先阅读下面的文档 👇👇👇
请先阅读下面的文档 👇👇👇
请先阅读上面的文档 👆👆👆
请先阅读上面的文档 👆👆👆


对于有能力对流量进行加密的同学,请将下面的规则加入配置中:
- DST-PORT,80,Proxyproxy 部分不一定为proxy,具体取决于你的配置,你需要改写为你自己的加密节点没有能力加密的同学,加入下面的规则:
- DST-PORT,80,REJECTUA3F 配置
按照此图点击启用即可,无需额外配置。

UA2F 配置
UA2F 版本的不同可能导致配置失效,下面的 UA2F 配置是最新版本的配置,因此请保证你的 UA2F 是最新的版本。
UA2F 最新版 iptables 规则已经实现自动配置,无需再手动添加,但默认不是开机自启,需要手动开启开机自启。
# 手动启动 ua2f
uci set ua2f.enabled.enabled=1
uci commit ua2f
service ua2f start
# 手动关闭 ua2f
service ua2f stop


