操作系统: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 2024-09-13 10:05:40 +08:00 nftables 如果加上 udp53 拦截 dns 就完美了 |