https://github.com/SunBK201/UA3F
Welcome to the OpenWrt Project
https://github.com/CoolLoong/AutoBuild-Actions
https://github.com/DFlinmo/Actions-immortalWrt-UA2F
https://github.com/SunBK201/OpenWrt-R4S-glibc
<aside> ⚠️ 仅供参考
</aside>
<aside> 💡 如果是使用 Clash 加密 + TTL 伪装方案,无需手动编译,直接访问 https://firmware-selector.openwrt.org 下载所需固件即可,刷入固件后,可以手动安装 Clash,并配置防火墙。
</aside>
<aside> ⚠️ 请保证全局魔法环境,编译失败的大多数原因是网络问题。
</aside>
<aside> ⚠️ 请保证全局魔法环境,编译失败的大多数原因是网络问题。
</aside>
<aside> ⚠️ 请保证全局魔法环境,编译失败的大多数原因是网络问题。
</aside>
<aside> ⚠️ 如果你使用的是虚拟机进行编译,建议使用 Clash For Windows 并开启 TUN Mode 即可接管虚拟机流量进行代理。
</aside>
<aside> ⚠️ 编译操作系统建议使用 Ubuntu 22.04 LTS,操作系统语言建议使用英文。
</aside>
# 系统软件包更新
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.02~~
git checkout openwrt-23.05
# 更新 feeds 软件源
./scripts/feeds update -a
# 安装 feeds 软件包
./scripts/feeds install -a
<aside> ⚠️ Clash 加密 + TTL伪装方案 与 UA2F + TTL伪装方案 二选一
</aside>
<aside> ⚠️ 2021.11.02 作者对恶性 bug 进行了修复,已经经过测试,修复成功,以后无需手动进行防火墙配置,全部会自动进行配置
</aside>
git clone <https://github.com/Zxilly/UA2F.git> package/UA2F
make 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 打开
<aside>
⚠️ 上一步可以跳过,但需要在对应内核 config 文件中手动加入 CONFIG_NETFILTER_NETLINK_GLUE_CT=y
,除非你知道这是什么,否则不建议你手动添加
</aside>
在 make menuconfig
中,使用 option 设置。
<aside> ⚠️ UA2F 与 UA3F 二选一
</aside>
git clone <https://github.com/openwrt/openwrt.git> package/UA3F
make menuconfig # 勾选 Network->Web Servers/Proxies->ua3f
**LuCI**
**--> 1. Collections**
--> luci
**--> 2. Modules
--> Translations**
--> Chinese Simplified (zh_Hans)
--> luci-compat
<aside> ⚠️ Clash 加密 + TTL伪装方案 与 UA2F + TTL伪装方案 二选一
</aside>
<aside> ⚠️ 如果你的路由器性能不足可以使用 ShellClash 来代替 OpenClash
</aside>
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)
<aside> ⚠️ 通过 IPID 进行检测的可能性极低,此模块不建议加入。
</aside>
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 下
# 然后保存退出
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=s
PATH=/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 服务器提供服务)ntp1.aliyun.com
、time1.cloud.tencent.com
、stdtime.gov.hk
、pool.ntp.org
<aside> ⚠️ 请按照以下规则顺序,若顺序与以下不符,可能配置不起效。
</aside>
# 通过 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 DROP~~
<aside> ⚠️ Clash 加密 + TTL伪装方案 与 UA2F + TTL伪装方案 二选一
</aside>
<aside> ⚠️ 如果你的路由器性能不足可以使用 ShellClash 来代替 OpenClash
</aside>
<aside> ⚠️ 请先阅读下面的文档 👇👇👇
</aside>
<aside> ⚠️ 请先阅读下面的文档 👇👇👇
</aside>
请阅读完此文档再进行下面的配置
GitHub - vernesong/OpenClash: A Clash Client For OpenWrt
请阅读完此文档再进行下面的配置
<aside> ⚠️ 请先阅读上面的文档 👆👆👆
</aside>
<aside> ⚠️ 请先阅读上面的文档 👆👆👆
</aside>
对于有能力对流量进行加密的同学,请将下面的规则加入配置中:
- DST-PORT,80,Proxy
<aside>
⚠️ proxy
部分不一定为proxy
,具体取决于你的配置,你需要改写为你自己的加密节点
</aside>
没有能力加密的同学,加入下面的规则:
- DST-PORT,80,REJECT
<aside> ⚠️ Clash 加密 + TTL伪装方案 与 UA2F + TTL伪装方案 二选一
</aside>
<aside>
⚠️ 以下配置只适用于最新版,由于最新版存在bug,暂时不要使用以下配置
</aside>
<aside> ⚠️ UA2F 版本的不同可能导致配置失效,下面的 UA2F 配置是最新版本的配置,因此请保证你的 UA2F 是最新的版本。
</aside>
<aside> ⚠️ UA2F 最新版 iptables 规则已经实现自动配置,无需再手动添加,但默认不是开机自启,需要手动开启开机自启。
</aside>
# 手动启动 ua2f
uci set ua2f.enabled.enabled=1
uci commit ua2f
service ua2f start
# 手动关闭 ua2f
service ua2f stop
UA2F 最新版默认自启,不再需要手动添加防火墙规则,有特殊需要可自行选择相应的配置策略:
# 开机自启
uci set ua2f.enabled.enabled=1
uci commit ua2f
# 自动配置防火墙(默认开启)(建议开启)
uci set ua2f.firewall.handle_fw=1
uci commit ua2f
# 处理内网流量(默认开启),防止在访问内网服务时被检测到。(建议开启)
uci set ua2f.firewall.handle_intranet=1
uci commit ua2f
# 处理 443 端口流量(默认关闭),443 端口流量一般为加密得 https 流量,443 端口出现 http 流量的概率较低(建议关闭)
uci set ua2f.firewall.handle_tls=1
uci commit ua2f
<aside> ⚠️ 第三、四条规则必须在第二条规则开启的条件下才会生效
</aside>
# 处理微信的 mmtls 流量(默认关闭)(建议关闭)
uci set ua2f.firewall.handle_mmtls=1
uci commit ua2f
访问:
如果你的真实UA是(服务器获取的 UA)出现(两个端口都出现):
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
说明配置正确.
<aside> ⚠️ 只需要关注真实UA(服务器获取的 UA),下面的“浏览器UA”无需关注。
</aside>
<aside> ⚠️ 进行测试时确保你可能使用的代理客户端没有代理 UA 测试网站,因为代理客户端会加密流量导致 UA2F 不会去修改加密请求。
</aside>
<aside> ⚠️ UA2F + TTL伪装方案 是通过将 UA 修改来让网关认为 UA 是统一的,Clash 加密 + TTL伪装方案 是通过加密的方式来让网关观察不到 UA,因此这里通过访问 UA 测试网站进行验证只适用于 UA2F + TTL伪装方案。
</aside>
其他配置(如 TTL)建议 wan 口抓包验证:
tcpdump -i eth0 -w test.cap
<aside> ⚠️ UA2F 可能会与 SSRP+ 等魔法道具冲突,因此要做好取舍。 具体表现为 80 端口修改失效,其它部分端口正常
</aside>
<aside> ⚠️ UA2F 也可能会和 mwan3 冲突,也不要开启 Flow Offloading 加速以及其他 QoS 工具
</aside>
<aside>
⚠️ 由于微信 mmtls 协议的影响,会可能会导致微信图片无法发送等问题,
此问题可执行 uci set ua2f.firewall.handle_mmtls=0 && uci commit ua2f
解决。
</aside>
https://github.com/Zxilly/UA2F
https://github.com/CHN-beta/rkp-ipid
https://github.com/vernesong/OpenClash
https://github.com/juewuy/ShellClash