컬렉션 사용nftables정말 멋진. 나는 현재 내 규칙 세트에서 다음과 같은 명령문을 많이 사용합니다 nftables.conf
.
iifname {clients0, dockernet} oifname wan0 accept \
comment "Allow clients and Docker containers to reach the internet"
위의 규칙 중 {clients0, dockernet}
하나익명의(인라인) 인터페이스 세트. 규칙을 반복해서 반복하는 대신 파일 상단에 다음과 같은 인터페이스 세트를 정의하고 싶습니다.명명된 집합nftables에서. 이것맨페이지(데비안 버스터)여러 유형의 컬렉션에 대해 이 작업을 수행하는 방법을 보여줍니다.ipv4_주소,ipv6_주소,에테르 주소,inet_proto,inet_service그리고표시. 그러나 이름이나 문자열과 같은 간단한 기본 유형으로 인터페이스에서는 작동하지 않는 것 같습니다.
다음 방법이 있지만 주어진 오류에서는 작동하지 않습니다.
유형 생략:
table inet filter { set myset { elements = { clients0, dockernet, } } [...] }
결과:
Error: set definition does not specify key
.사용법
string
유형:table inet filter { type string; set myset { elements = { clients0, dockernet, } } [...] }
결과:
Error: unqualified key type string specified in set definition
.
상단에 표시되는 익명성 세트의 이름을 지정할 방법이 정말 없나요?
답변1
검색해서버전 0.9.0의 소스 코드:
static const struct datatype *datatypes[TYPE_MAX + 1] = {
[...]
[TYPE_IFINDEX] = &ifindex_type,
[...]
[TYPE_IFNAME] = &ifname_type, };
const struct datatype ifindex_type = { .type = TYPE_IFINDEX, .name = "iface_index", .desc = "network interface index",
[...]
const struct datatype ifname_type = { .type = TYPE_IFNAME, .name = "ifname", .desc = "network interface name",
(이 답변을 작성할 당시) 필수 유형은 iface_index
(예: iif lo
) 및 ifname
(예: )임을 알 수 있습니다.iifname "lo"
nft
매뉴얼 페이지에는 문서화되어 있지 않습니다..
nft add set inet filter if-index-set '{ type iface_index; }'
nft add set inet filter if-name-set '{ type ifname; }'
nft add element inet filter if-index-set '{ lo }'
nft add element inet filter if-name-set '{ lo }'
nft add chain inet filter input '{ type filter hook input priority 0; }'
nft add rule inet filter input iif @if-index-set counter
nft add rule inet filter input iifname @if-name-set counter
알아채다이름이 있으면2022년 5월 31일에 컬렉션에 와일드 카드 지원이 추가되었습니다.nftables 1.0.3. 명명된 세트를 사용해야 하며 flags intervals
마지막 와일드카드 는 *
(+
iptables).
답변2
nft
요소 데이터 유형은 다음을 사용하여 쉽게 찾을 수 있습니다.
$ nft describe iifname
meta expression, datatype ifname (network interface name) (basetype string), 16 characters
% nft describe iif
meta expression, datatype iface_index (network interface index) (basetype integer), 32 bits
그걸 보신 분들 ifname
도 iface_index
가능한 타입이니까당신은 선언할 수 있습니다:
set myset {
type ifname
elements = {
"clients0",
"dockernet"
}
}
위의 예에서 유형을 모르면 typeof iifname
대신 쓸 수도 있습니다(v0.9.4 이상 필요).type ifname
nft