此劫持方案优点 1:可在线更新netflix ip集及telegram ip集至nft、ebpf规则 2:仅劫持fakeip及少数需要代理ip,无回环风险,效率高。 3:dns可由ebpf技术加速,直接送入mosdns 53端口,不经过netfilter。 分流方案 启用ebpf时 1:非80端口的lan侧tcp流量将被ebpf程序直接劫持到tproxy端口 2:其它流量由nft规则劫持,udp送入trpoxy端口,tcp送入redirect端口。 不启用ebpf时 1:所有流量由nft劫持,udp送入trpoxy端口,tcp送入redirect端口。 ebpf生效验证方法 1:在mihomo或者sing-box web ui中点击任意tcp连接,如果连接类型type为tproxy入站名称,则ebpf运行正常。 2:如果连接类型type为redirect入站名称,则ebpf未运行。 启用方法 注意: 1:nft/ebpf仅支持linux和openwrt,linux内核>= 6.6,目前仅在openwrt 6.18内核上测试成功 2:仅建议sing-box mosdns装在一起的场景使用,同时禁用掉虚拟机中原有的nft规则。 编辑mosdns/nft/nft.conf 1:搜索7895,改为自己的sing-box tproxy入站端口,共1处 2:搜索7899,改为自己的sing-box redirect入站端口,共4处 下面为可选项 3:搜索7892,改为自己的mihomo redirect入站端口,共4处 4:搜索7893,改为自己的mihomo tproxy入站端口,共1处 5:搜索30.0.0.0/8,改为自己的mihomo(国内)fakeip v4 range,共1处 6:搜索2400::1/64,改为自己的mihomo(国内)fakeip v6 range,共1处 在系统-高级设置-上游DNS设置/其它设置中添加2条规则 原值 新值 说明 nft_false nft_true 启用添加nft规则功能 ebpf_false ebpf_true 启用ebpf加速,不启用ebpf,后面条目都不需要添加 后面为可选条目,仅针对ebpf br-lan ens0 ebpf程序绑定的网卡名称,如果不启用可不配置,如果为openwrt也可不配置 7893 7893 mihomo tproxy入站,如果为7893可不配置此行 7895 7895 sing-box tproxy入站,如果为7895可不配置此行 30.0.0.0/8 30.0.0.0/8 mihomo fakeip ipv4 range 2400::/64 2400::/64 mihomo fakeip ipv6 range 添加自定义劫持的ip段,可以在如下路由自行添加,重启mosdns生效: 规则管理-在线分流-NFTIP 注:规则管理-在线分流中,类型为nft_add类型的条目点击更新或者自动更新时,也会使添加的ip段生效(无须重启)。 ===旧教程过于技术了,有兴趣的可以自行研究 启用方法: 在系统-高级设置-上游DNS设置/其它设置中添加6条规则,把新值列改为自己nft规则中的值 原值 新值 说明 nft_false nft_true 启用添加nft规则功能 nft/nft.conf /cus/sbmi.conf 当前在用的sing-box虚拟机nft规则文件 sing-box sing-box nft规则文件中的table名称 local_ipv4 local_ipv4 nft规则文件中的ipset名称,在线规则集中的ipv4将更新到此ipset local_ipv6 local_ipv6 nft规则文件中的ipset名称,在线规则集中的ipv6将更新到此ipset nft/fixip.txt nft/fixip.txt 当前在用的需要代理的ip全集,一般是nft规则文件中的local_ipv4、local_ipv6的ip范围合并 fixip.txt格式如下 52.0.131.132/32 3.221.228.214/32 2001:b28:f23d::/48 2001:b28:f23f::/48 触发场景: 1:mosdns启动时。 2:在规则管理-在线分流中自动更新、手动更新类型为nft_add的在线srs规则时。 插件按顺序执行如下动作: 1:将nft_add类型的在线ip集和fixip.txt中的ip集合并去重。 2:使用nft delete命令删除配置项目中指定的table 3:使用nft -f命令重新加载配置项目中指定的table 4:清空指定table中的指定ipset 5:把合并后的ip集中的条目按ipv4、ipv6分别添加至指定table的指定ipset中。 如果不是op aio,主路由中的静态路由仍然需要手动添加。