![[Pasted image 20231022084145.png|Pasted image 20231022084145.png]]
- prerouting:数据进来还未查询路由表之前的规则。
- input:由外部发往用户空间内部的规则。(
说直白点就是负责过滤目标地址是本机的数据包) - forward:不进入用户空间,进行路由转发的规则。(负责转发流经主机但不进入本机的数据包)
- postrouting:查询完路由表后,将要转发的规则。
- output:由用户空间内部发往外部的规则。(负责处理本机发出的数据包)
ebtables-nft: iptables源代码,不过后端是nftables. ebtables-legacy: 使用iptables作为后端
ebtables的brouting功能
![[Pasted image 20231020141953.png|Pasted image 20231020141953.png]] 用于控制进来的数据包是需要进行bridge转发还是进行route转发,即2层转发和3层转发。
ACCEPT | DROP | |
---|---|---|
BROUTE | bridge it | route it |
FORWARD | 接收,当前主Chain后rule不再匹配处理 | 丢弃 |
关于nftables中的brouting
支持,直到linux kernel 6.4 才在nftables中引入
如果要使用应该对包设置Setting packet metainformation - nftables wikimeta broute set 1
代码实例: 对来自wan接口的流量,ipv6流量丢弃处理。
- ebtables-legacy
ebtables -t broute -A BROUTING -p !ipv6 -j DROP -i wan
- nftables
table bridge b {
chain prerouting{
type filter hook prerouting priority -250; policy accept;
ether type !=ip6 iifname wan meta broute set 1 accept
}
}
目前ebtables-nft 也接收到了相关patch,将自动对包添加该meta标记。
实际应用: ipv4 nat + ipv6 bridge cvmiller/v6brouter: IPv6 bridge and IPv4 router (NAT) shell script for OpenWRT (github.com)