社区讨论V2EX 程序员
在 clash 里加入了一点 dae 的成分
之前说过我魔改了一个 rust 写的代理 clash-rs 和使用这个代理的 op 插件 nikki-rs 最近突发奇想把 dae 和 clash 进行一个有机的融合,在 clash 里加入了一点 dae 的成分 基本就是参考 honk 和 dae 把 ebpf 那套照搬了过来,给 clash-rs 做了一个 ebpf 入站,可以理解为另一种实现的 tun 模式,部分替代防火墙的功能,不用搞防火墙规则进行转发,注入内核的钩子会自动进行拦截放行的操作。 将 dae 那套内核里复杂的选路过程进行了简化,只关注直连流量…
内容摘要
之前说过我魔改了一个 rust 写的代理 clash-rs 和使用这个代理的 op 插件 nikki-rs
最近突发奇想把 dae 和 clash 进行一个有机的融合,在 clash 里加入了一点 dae 的成分
基本就是参考 honk 和 dae 把 ebpf 那套照搬了过来,给 clash-rs 做了一个 ebpf 入站,可以理解为另一种实现的 tun 模式,部分替代防火墙的功能,不用搞防火墙规则进行转发,注入内核的钩子会自动进行拦截放行的操作。
将 dae 那套内核里复杂的选路过程进行了简化,只关注直连流量的动态绕过,大概流程就是 劫持到 dns 请求->对域名进行预选路->直连->将解析出来的 ip 下发到 ebpf->该目标 ip 的流量绕过代理
其实说通俗点就是选择绕过大陆时,事先将一大坨大陆 ip 塞到 iptable/nftable 里,ebpf 呢就可以动态地,你遇到要直连的域名才把解析出来的 ip 给你塞到内核里,当然这也顺便解决了一些国外可以直连的网站固定用绕过大陆就覆盖不到的问题。 下面大致讲解一下 clash-rs 这部分配置:
ebpf: # 是否启用 eBPF 模块(开启后由 eBPF 钩子接管透明代理,替代传统 nftables/iptables 转发规则) enable: true # 监听的 LAN 接口列表(挂载 eBPF Ingress 钩子以捕获局域网流量),openwrt 一般是 br-lan lan-interface: - br-lan # 监听的 WAN 接口(挂载 eBPF Egress 钩子) wan-interface: eth0 # 内核 ns 隔离空间的 tproxy 监听地址(默认 12345 ),一般不用设置,保持默认就好 tproxy-port: 12345 # 自动直连卸载:clash 选路判断为 DIRECT 的目标 IP/连接会自动下发到 eBPF map ,后续流量直接在内核层放行 auto-direct-offload: true # 根据 DSCP 标记( 0-63 )直接放行流量(默认放行 DSCP 4 ) bypass-dscps: - 4 # 根据防火墙标记 (fwmark) 直接放行流量(如 0x200 或十进制 512 ) bypass-fwmarks: - 0x200 # 局域网源端配置 (LAN) lan: # 直连放行的源端口(常用于 DHCP 、mDNS 、本地 SSH 等) bypass-src-ports: - 22 - 67 - 68 - 5353 # 仅代理的源端口(留空表示代理所有未被 bypass 的源端口) proxy-src-ports: [] # 直连放行的客户端 IP / CIDR 网段(客户端黑名单,不走代理) bypass-src-ips: [] # 仅代理的客户端 IP / CIDR 网段(若指定,则仅这部分客户端走代理) proxy-src-ips: [] # 路由器本机发起的流量配置 (Host) host: # 是否代理路由器/网关本机发出的网络流量 proxy-local: true # 仅代理的路由器进程白名单(留空则代理全部未放行进程) proxy-processes: [] # 直连放行的路由器进程黑名单(如某些特定守护进程,) bypass-processes: [] # 访问目标端配置 (Target) target: # 直连放行的目标端口(如 NTP: 123 等) bypass-dst-ports: [] # 仅代理的目标端口(可填常用端口列表或 0-65535 ) proxy-dst-ports: - 21 - 22 - 80 - 443 - 8080 - 8443 # 直连放行的目标 IP / 保留地址网段(回环、私网、组播地址等) # 注意:这里一定要放行你的内网局域网段 bypass-dst-ips: - 127.0.0.0/8 - 169.254.0.0/16 - 192.168.0.0/16 - 224.0.0.0/4 - ::1/128 - fe80::/10 - ff00::/8 - "rule-set:private" # 仅代理的目标 IP / CIDR 网段(留空表示代理除 bypass 外的所有目标) proxy-dst-ips: []
直接使用 openwrt 插件 nikki-rs 界面上配置
注意
ebpf 本身对 linux 内核打包的相关模块是有要求的,我这个因为非 ebpf 模式也能用,所以没有强行要求相关依赖,如果要使用 ebpf 模式建议先安装 dae 会自动安装相关依赖,能安装成功就能用我这个,这里推荐 immoralwrt 的 25.12 版。
路由器上折腾的时候千万不要开插件的开机自启,否则如果拦截过滤的设置出了问题导致访问不了路由器不好处理
相关项目地址
https://github.com/CHKayanami/OpenWrt-nikki-rs
https://github.com/CHKayanami/clash-rs
搞了个 tg 看有没有人来交流
https://t.me/OpNikkiRS
资讯来源
V2EX