Nftables
nftables 中是否有某種萬用字元?
在 iptables 中,可以使用
eth+
作為介面名稱來匹配以 開頭的任何介面eth
(或者作為更實際的範例,這也可以匹配virbr+
andveth+
,即+
似乎具有*
shell glob 中的 a 的效果)。nftables 是否提供類似的工具來匹配介面名稱?我該如何使用它?
是的,通常的萬用字元
*
是nft的**iptables的等價物+
。手冊頁直到最近才記錄此(相對較舊的)功能。從最近足夠的
nft
手冊頁:與 iptables 一樣,介面名稱前綴上的萬用字元匹配可用於
iifname
並oifname
通過附加星號 (*) 字元進行匹配。但是請注意,與 iptables 不同,nftables 不接受僅由萬用字元組成的介面名稱 - 使用者應該跳過那些始終匹配的表達式。為了匹配文字星號字元,可以使用反斜杠 () 對其進行轉義。例如:
iifname "veth*" accept
此外,今天似乎不可能在元素中使用帶有萬用字元的一組介面(type ifname
或)。typeof iifname
更新:nftables 中的這個2022-04 git commit以及其他一些相關的送出,可能還有足夠的核心支持,最終允許在集合中使用介面萬用字元,使用間隔作為方法:
允許在間隔集中介面名稱:
table inet filter { set s { type ifname flags interval elements = { eth*, foo } }
這應該在目前 1.0.2 之後的版本中可用。
管理介面動態出現和消失的一種完全不同的方法是,在它們被創建之後(並且可能在它們被啟動之前)用一個組標記它們,並且具有匹配介面組的*nftables規則。*例如:
ip link set ppp7 group 42
同時有一個nftables規則重用此元資訊:
iifgroup 42 jump from-ppp