操作系统:archlinux ;代理软件:clash-meta ,已添加 route-mark 为 666 ;我的笔记本只有一块无线网卡,在系统中为wlp1s0
,已对其添加 ip 规则如下:
ip inet rule add fwmark 1 lookup 100
ip inet route add local default dev wlp1s0 table 100
同时设置了 nftables 规则如下:
## 只处理指定网卡的流量
define interface = wlp1s0
## clash 的透明代理端口
define tproxy_port = 7895
## clash 打的标记( routing-mark )
define clash_mark = 666
## 常规流量标记,ip rule 中加的标记,和 ip 规则中保持一致
define default_mark = 1
## 保留 ip 地址
define private_address = {
127.0.0.0/8,
100.64.0.0/10,
169.254.0.0/16,
224.0.0.0/4,
240.0.0.0/4,
255.255.255.255,
10.0.0.0/8,
172.16.0.0/12,
192.168.0.0/16
}
## 大陆 ip 地址
include "/var/lib/clash/geoip4_cn.nft"
table ip clash {
chain prerouting {
type filter hook prerouting priority mangle; policy accept;
fib daddr type local accept
ip daddr $private_address accept
ip daddr $geoip4_cn accept
# meta l4proto udp accept # udp 流量也走代理
meta l4proto { tcp, udp } socket transparent 1 meta mark set $default_mark accept
meta l4proto { tcp, udp } tproxy to :$tproxy_port meta mark set $default_mark
}
chain output {
type route hook output priority mangle; policy accept;
oifname != $interface accept
meta mark $clash_mark accept
fib daddr type local accept
tcp dport { 53, 853 } accept
udp dport { 53, 853, 123, 137 } accept
ip daddr $private_address accept
ip daddr $geoip4_cn accept
meta l4proto {tcp, udp} meta mark set $default_mark
}
}
以上的 nftables 规则通过nft list ruleset
可以显示出来。另外,通过其他软件设置了将 dns 查询转发到 clash-meta 的 dns 监听端口,事实上只要是通过域名访问的流量,也正常走向了透明代理,在 clash-meta 的连接情况中也能如实反映。但是 telegram 的流量是纯 ip 形式的,基于以上的设置内容,telegram 却无法正常连接,在 clash-meta 的连接情况中也看不到任何纯 ip 形式的流量,我设置的大陆 ip 清单geoip4_cn.nft
也没有包含 telegram 的 ip 。请问这里的各位 nftables 大佬这是什么原因导致的?应该怎么解决?
1
blackeeper 2023-10-13 10:59:36 +08:00
直接把目的 IP 为:telegram_ip 转到透明代理的端口就可以了
ip daddr $telegram_ip meta l4proto { tcp, udp } tproxy to :$tproxy_port |
2
EvineDeng OP @blackeeper 最后发现是我自己忘记取消 tg 中的代理设置了,用透明代理不需要给 tg 再设置代理了。。。
|
3
D7S 71 天前
nftables 如果加上 udp53 拦截 dns 就完美了
|