Raspberry Pi家用案例——其他篇(补)

前言

上次介绍Clash Tun模式透明网关后不久,Clash就先后支持了auto-route参数和eBPF集成。这两个功能彻底把用户从iptables的深渊中解救了出来,同时eBPF还会在一定程度上了提升性能。

那么这次我们就通过简单几步把eBPF方式的tun搞起来。

检查内核参数

eBPF是直接运行在内核里的,如果内核编译时没有打开相关功能,tun就无法建立。

内核参数一般在/proc/config.gz/boot/config-<kernel-version>中,筛选一下带有BPF的行,应该可以看到类似的内容:

CONFIG_BPF=y
CONFIG_HAVE_EBPF_JIT=y
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
# BPF subsystem
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_BPF_JIT_ALWAYS_ON=y
CONFIG_BPF_JIT_DEFAULT_ON=y
CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
# CONFIG_BPF_PRELOAD is not set
# CONFIG_BPF_LSM is not set
# end of BPF subsystem
CONFIG_CGROUP_BPF=y
CONFIG_IPV6_SEG6_BPF=y
CONFIG_NETFILTER_XT_MATCH_BPF=m
CONFIG_BPFILTER=y
CONFIG_BPFILTER_UMH=m
CONFIG_NET_CLS_BPF=m
CONFIG_NET_ACT_BPF=m
CONFIG_BPF_STREAM_PARSER=y
CONFIG_LWTUNNEL_BPF=y
# CONFIG_BPF_LIRC_MODE2 is not set
CONFIG_BPF_EVENTS=y
# CONFIG_BPF_KPROBE_OVERRIDE is not set
CONFIG_TEST_BPF=m

接着跟著名eBPF工具bcc页面上的内容对比一下,看看你的内核提否提供了必要的支持。已知目前版本的Raspberry Pi OS默认内核是没有打开完整eBPF的,但是ubuntu的默认已经可以直接使用。

一步开启

接着只需要在Clash配置文件中加入一点内容就可以启用eBPF集成:

interface-name: eth0    #指定出接口
routing-mark: 7777      #不冲突就可以
ebpf:
  redirect-to-tun:
    - eth0              #指定入接口 (maybe)

注意,记得删掉各模块中的auto-route参数。

打扫战场

清理所有clash相关的iptables策略,如果防火墙默认策略是拒绝,记得要把forwarding设置为默认允许,并配置以下策略(以ufw为例):

To                         Action      From
--                         ------      ----
53                         ALLOW       Anywhere                  
Anywhere                   ALLOW       192.168.0.0/16
Anywhere on utun           ALLOW       Anywhere

Enjoy

快去把那些不允许设定代理的设备的网关和dns指过来把。

Leave a Reply

Your email address will not be published.