[已编辑] 我在物理接口上接收 ERSPAN 封装的流量,只需要处理其中的一小部分。为了做到这一点,我在本地隧道接口上解封装流量:
ip link add dev inspan type erspan seq key 10 local x.x.x.x erspan_ver 1
ip link set dev inspan up
并希望过滤(删除/接受)、重写和/或重定向已接受的部分以进行进一步处理 - 无论是本地还是远程工作人员。下面的配置应该用于本地处理。
我陷入困境的地方-以下规则按预期工作:
table netdev filter {
chain redir {
type filter hook ingress device "inspan" priority filter; policy drop;
iifname inspan udp dport 2311 ether daddr set 8a:b1:34:1d:35:ea ip daddr set 10.171.165.65 accept
}
}
其中 MAC 地址是 inspan 的地址(我接收解封装流量的地方),IP 地址是该服务器的本地地址(但不是 inspan 的)。
日志显示重写已完成 -
Aug 10 21:12:22 server kernel: [1726554.111664] IN=inspan OUT= MAC=8a:b1:34:1d:35:ea:a2:ee:e4:00:00:12:08:00 SRC=192.168.25.198 DST=10.171.165.65 LEN=372 TOS=0x00 PREC=0x00 TTL=125 ID=27044 PROTO=UDP SPT=50125 DPT=2311 LEN=352
但简单测试失败:“nc -l -u -k -p 2311”显示没有传入流量。但是,如果我明确连接(nc -u 10.171.165.65 2311),它会响应(因此,地址 10.171.165.65 有响应且处于活动状态)。
根据图表https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks,我尝试检查此流量是否出现在 inet/prerouting 钩子中(因为它似乎是在 netdev/ingress 之后):
table inet prerouting {
chain just_log {
type filter hook prerouting priority filter; policy accept;
iifname inspan log prefix "prerouting " meta nftrace set 1 accept
}
}
并且没有,系统日志和 'nft monitor trace' 中都没有任何内容
inspan 接口的 rp_filter 设置为 0;接口 promisc 模式的开启/关闭不会改变整个画面
知道这最后一步我遗漏了什么吗?
谢谢。
答案1
问题不在于 nftables。问题在于隧道接口不是以太网接口,需要进行隧道封装,而从 ERSPAN 解封装流量后,它就是以太网帧。
当我桥接这个“inspan”接口(在我的情况下是本地 OVS 桥接)时,我在运行“nc -l”时获得了此流量