在 ebtables 中,表BROUTING
中的鏈broute
具有特殊的行為ACCEPT
和DROP
操作:ACCEPT
表示橋接/轉送路徑,DROP
表示路由/輸入路徑。例如,要強制所有非 IPv6 封包通過 NAT,使用正確的 iptables 設置,同時直接橋接 IPv6 封包,可以執行下列操作:
ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i wan
我怎樣才能在 nftables 中得到這種行為?
幾個帖子和舊的nftables 手冊頁建議這沒有實施。另外,還有一個nftables 郵件清單中的線程最終沒有得到真正有效的答案。
還沒落實嗎?如果是這樣,有什麼解決方法或我必須使用 ebtables-legacy 嗎?謝謝。
答案1
還沒落實嗎?
是的,但仍然只有幾週(Linux 核心 6.4 應該在 2023-06 年底或 2023-07 年初發布)。接受的建議(經過幾次迭代後)使用布魯特和nftables在 netfilter-devel 中來自2023-02-24。
更新:現已正式實施nft
(nftables) >= 1.0.8 甚至ebtables-nft
>= 1.8.10,請參閱本答案末尾的更新。
它一直添加到尚未發布的版本中Linux 核心 6.4於 2023 年 4 月 26 日:
網路過濾器:
- 添加 nf_tables 'brouting' 支持,以強制路由資料包而不是橋接
並且正在籌備尚未發布的下一個nftables版本,可能是1.0.8:
meta:引入meta broute支持
可以在網橋預路由鉤子中使用,將封包轉移到 ip 堆疊進行路由。
這是功能的替代
ebtables -t broute
。
沒有ebtables使用接受/丟棄與特殊布魯特類型。它透過設定來使用布魯特規則中的標誌橋家庭類型篩選和預路由鉤:
meta broute set 1
因此,不要使用 ( ebtables-legacy
,因為ebtables-nft
一直缺乏對布魯特直到最近):
ebtables-legacy -t broute -A BROUTING -p ! ipv6 -j DROP -i wan
人們也會做類似的事情:
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
運送iptables
nftables後端變體),也收到了尚未發布的下一個版本的等效補丁:
ebtables-nft:新增 broute 表模擬
使用 new
meta broute set 1
來模擬-t broute
。如果-t broute
給出,則自動翻譯-j DROP
為meta broute set 1 accept
內部。
這將允許使用ebtables-nft
而不是ebtables-legacy
(仍然使用內核> = 6.4)接受原樣:
ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i wan
更新
如上所述,內核6.4 2023-06-25 左右發布收到該功能
如上所述,nftables1.0.8 2023-07-14 左右發布現在支援brute:
broute 支援從橋接預路由掛鉤短路橋接邏輯,並將封包傳遞到本機 IP 堆疊。
... meta broute set 1
iptables:2023-10-10左右發布1.8.10(也提供二進制ebtables) 現在支援 broute
ebtables-nft
:- ebtables-nft 中的 Broute 表支持
從這個版本開始,以下命令將會成功:
ebtables-nft -t broute -A BROUTING -p ! ipv6 -j DROP -i wan
上面寫的
DROP
實際上代表broute set 1 accept
如下顯示(顯示通常可以,更改通常不行):# nft list ruleset table bridge broute { chain BROUTING { type filter hook prerouting priority -2147483648; policy accept; iifname "wan" ether type != ip6 counter packets 0 bytes 0 meta broute set 1 accept } }
(優先級-2147483648可能看起來很奇怪,但這是一樣的使用的鉤子優先級
ebtables-legacy
:NF_BR_PRI_FIRST
)