如何使用bpftool将netfilter程序挂载到网络接口?
如何用bpftool将Netfilter类型的BPF程序挂载到网络接口?
已完成操作
已成功加载Netfilter BPF程序:
sudo bpftool prog load filter.bpf.o /sys/fs/bpf/filter
问题
执行挂载命令时出现报错,且bpftool net help的Note部分声称支持netfilter挂载,但ATTACH_TYPE选项列表中无此类型:
$ sudo bpftool net attach netfilter id 122 dev eth0 Error: invalid net attach/detach type: netfilter
解决方案
Netfilter类型的BPF程序不通过bpftool net attach挂载——该命令仅用于绑定到网络设备的BPF程序(如XDP、TCX系列)。Netfilter BPF程序需要挂载到Netfilter钩子点,以下是两种常用方式:
方式1:通过nftables挂载
利用nftables将BPF程序关联到Netfilter钩子:
# 创建ip族的filter表 sudo nft add table ip filter # 创建绑定到INPUT钩子的chain(优先级可根据需求调整) sudo nft add chain ip filter input { type filter hook input priority 0 \; } # 将已加载的BPF程序挂载到该chain sudo nft add rule ip filter input meta bpf pinned /sys/fs/bpf/filter
方式2:通过bpftool link挂载(内核5.10+)
较新内核支持直接用bpftool link创建Netfilter链接:
# 挂载到INPUT钩子,优先级0,使用已固定的BPF程序 sudo bpftool link create netfilter hook input priority 0 prog pinned /sys/fs/bpf/filter
可替换的钩子参数包括:input、forward、output、prerouting、postrouting,优先级数值决定程序执行顺序。
补充说明
bpftool net help中的Note提到支持netfilter,是指bpftool net show/list可以查看Netfilter类型的BPF挂载状态,而非通过attach命令挂载。查看已挂载的Netfilter BPF程序可执行:
sudo bpftool net list
内容的提问来源于stack exchange,提问作者Orian
相关产品推荐
相关产品推荐

