安装环境
软路由机器架构: x86_64
OpenWrt版本: 22.03
OpenWrt的IP: 192.168.88.3 (如果不同,后面涉及此地址全部需要修改)
目标
在电脑或手机上手动配置网关,可以直接代理上网
执行前Clash必须已启动且能正常上网
0. 自动安装
- 如果openWrt未安装tproxy模块则执行下面脚本
wget https://www.shuncs.com/download/instnft_redir.sh && chmod +x instnft_redir.sh && ./instnft_redir.sh
- 如果openWrt已安装tproxy模块执行下面脚本
wget https://www.shuncs.com/download/instnft_tproxy.sh && chmod +x instnft_tproxy.sh && ./instnft_tproxy.sh
1. 新增私有地址列表
vi /etc/nftables.d/private.nft
将下列内容复制到此文件,然后按:wq退出
define private_list = {
0.0.0.0/8,
10.0.0.0/8,
127.0.0.0/8,
169.254.0.0/16,
172.16.0.0/12,
192.168.0.0/16,
224.0.0.0/4,
240.0.0.0/4
}
2. 新增nftable配置
- 新增配置文件
vi /etc/nftables.conf
- 将下面内容复制到此文件,并按:wq保存退出
#!/usr/sbin/nft -f
flush ruleset
define tproxyPort=7893
define redirPort=7892
include "/etc/nftables.d/private.nft"
table inet clash {
chain prerouting {
type nat hook prerouting priority 0; policy accept;
ip daddr $private_list return
# 如果未安装tproxy,则将下一行注释掉
meta l4proto {tcp, udp } tproxy to :$tproxyPort
# 如果已安装tproxy,则将下一行注释掉
ip protocol tcp redirect to :$redirPort
}
}
3. 生效Nftable配置
nft flush ruleset
nft -f /etc/nftables.conf
4. 设置在openWrt每次开机自动启动Nftable
- 新增配置文件
vi /etc/init.d/nft
- 将下述内容复制到文件中,将按:wq保存退出
#!/bin/sh /etc/rc.common
START=90
STOP=15
USE_PROCD=1
#PROCD_DEBUG=1
CONF=/etc/
CONFFILE=nftables.conf
PROG=/usr/sbin/nft
start_service() {
procd_open_instance
procd_set_param command $PROG -f $CONF$CONFFILE
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-9}
procd_close_instance
}
- 修改权限,并使之生效
chmod 755 /etc/init.d/nft
service nft enable
- 启动nft
service nft start
5. 配置Dnsmasq, 将dns指向Clash的5353端口
uci add_list dhcp.@dnsmasq[0].server='127.0.0.1#5353'
uci commit dhcp
service dnsmasq restart
全文完