转载注明来源: 本文链接 来自osnosn的博客,写于 2025-04-25.
{
"inbounds": [
{ //在inbounds 中加入这一节 "dokodemo-door"
"tag": "tproxy-in",
"listen": "127.0.0.1",
"port": 12345,
"protocol": "dokodemo-door",
"settings": {
"network": "tcp,udp",
"followRedirect": true
},
"sniffing": { //开启snifing,否则路由无法匹配域名
"enabled": true,
"destOverride": ["http", "tls", "quic"]
},
"streamSettings": {
"sockopt": { "tproxy": "tproxy" }
}
},
... 其他配置
],
"outbounds": [
//每一个outbounds的出口中,除了blackhole,包含 "mark":18 参数
// "streamSettings": {
// "sockopt": { "mark": 18 } // 0x12, xray配置中只能写整数
// }
{
"tag": "direct",
"protocol": "freedom",
"settings": { "domainStrategy": "UseIP" },
"streamSettings": {
"sockopt": { "mark": 18 } // 0x12
}
},
... 其他配置
],
"routing": {
... 其他配置
"rules": [
{ //ntp对时协议
"type": "field",
"inboundTag": ["tproxy-in"],
"port": 123,
"network": "udp",
"outboundTag": "direct"
},
... 其他配置
]
}
}
# 设置策略路由, 仅ipv4,
# 添加路由表 100,指向local的loopback
ip route add local 0.0.0.0/0 dev lo table 100
# 所有标记 0x10 的Packet走路由表100
ip rule add fwmark 0x10 table 100
General Settings
Interface: loopback
Route type: local #默认unicast, 要改为local
Target: 0.0.0.0/0
Gateway: 留空
Advanced Settings
Table: 100
其他: 留空或不修改
General Settings
Priority: 30000 #自选,1-32765 都可以,
Route type: unicast #默认值
Table: 100
其他: 留空或不修改
Advanced Settings
Firewall mark: 0x10 #图 3中的 1应该写0x10,(图片未修改)
Invert match: 不勾 #默认值
其他: 留空或不修改
opkg update && opkg install kmod-nft-tproxy
/etc/nftables.d/20-xray-rules.nft
内容如下, 仅ipv4,.nft
结尾就行,文件名随便。define RESERVED_IP = {
10.0.0.0/8,
100.64.0.0/10,
127.0.0.0/8,
169.254.0.0/16,
172.16.0.0/12,
192.0.0.0/24,
224.0.0.0/4,
240.0.0.0/4,
255.255.255.255/32
}
define LAN_IP = {
192.168.10.0/24,
192.168.20.0/24
}
chain mangle_xray_prerouting {
type filter hook prerouting priority mangle; policy accept;
ip saddr != $LAN_IP return
ip daddr $RESERVED_IP return
#ip daddr 192.168.0.0/16 tcp dport != 53 return #由代理接管DNS解析
#ip daddr 192.168.0.0/16 udp dport != 53 return #由代理接管DNS解析
ip daddr 192.168.0.0/16 return #代理不接管DNS解析
meta nfproto ipv4 udp dport { 123 } return #ntp对时,直通。有这一行就不用写xray规则。
ip protocol { tcp,udp } tproxy ip to 127.0.0.1:12345 meta mark set 0x10 #匹配ip rule规则的fwmark
}
chain mangle_xray_output {
type route hook output priority mangle; policy accept;
ip daddr $RESERVED_IP return
#ip daddr 192.168.0.0/16 tcp dport != 53 return #由代理接管DNS解析
#ip daddr 192.168.0.0/16 udp dport != 53 return #由代理接管DNS解析
ip daddr 192.168.0.0/16 return #代理不接管DNS解析
meta nfproto ipv4 udp dport { 123 } return #ntp对时,直通。有这一行就不用写xray规则。
meta mark 0x12 return #匹配xray中outbounds的mark
ip protocol { tcp,udp } meta mark set 0x10 #匹配ip rule规则的fwmark
}
# 或者用 $LAN_IP 替换所有的 192.168.0.0/16 也可以。
fw4 reload
如果没有任何输出,则OK,(没有报错)。ip saddr != $LAN_IP return
,是防止 WAN 口中同网段的其它人将网关填写成你的 WAN_IP,从而蹭你的透明网关代理用,还可能带来一定的危险性。如果op不是主路由,可以不要这条规则。
ip route add local 0.0.0.0/0 dev lo table 100
local 错选为unicast。heiher/hev-socks5-tunnel 的性能比较好。
----end----
转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/18844435.html
来自 osnosn的博客 https://www.cnblogs.com/osnosn/ .