Ọkwa kernel na-enye naanị interface nke nwere onwe nke protocol nke na-enye ọrụ ndị bụ isi maka iwepụta data na ngwugwu, ịrụ ọrụ data, yana njikwa ọsọ. A na-achịkọta iwu nzacha na ndị na-ahụ maka usoro protocol n'ime bytecode na oghere onye ọrụ, mgbe nke a gasịrị, a na-etinye bytecode a n'ime kernel site na iji interface Netlink wee gbuo ya na kernel na igwe mebere pụrụ iche na-echetara BPF (Berkeley Packet Filters). Usoro a na-enye gị ohere ibelata nha nke koodu nzacha na-agba ọsọ na ọkwa kernel wee bugharịa ọrụ niile nke iwu nyocha na mgbagha maka ịrụ ọrụ na protocol n'ime oghere onye ọrụ.
Isi ihe ọhụrụ:
- Nkwado maka ọnụọgụ dị na njikọ (njikọta, ụfọdụ ngwugwu adreesị na ọdụ ụgbọ mmiri na-eme ka ntụnyere dị mfe). Dịka ọmụmaatụ, maka otu "onye na-acha ọcha" nke ihe ya bụ ihe mgbakwunye, ịkọwapụta ọkọlọtọ "n'etiti" ga-egosi na nhazi ahụ nwere ike ịgụnye oke na mgbakwunye (maka mgbakwunye "ipv4_addr. ipv4_addr. inet_service" ọ ga-ekwe omume ịdepụta kpọmkwem kpọmkwem. ọkụ nke ụdị "192.168.10.35. 192.68.11.123", na ugbu a, i nwere ike ezipụta otu nke adreesị "80-192.168.10.35-192.168.10.40".
table ip foo {
tọọ akwụkwọ ọcha {
ụdị ipv4_addr. IPv4_addr. inet_ọrụ
etiti oge ọkọlọtọ
ọcha = {192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
}mmanya yinye {
ụdị nko nko prerouting mkpa nzacha; ọdịda amụma;
ip sadr. ip baba. tcp dport @whitelist nabata
}
} - Na setịpụ na ndepụta map, ọ ga-ekwe omume iji ntuziaka "typeof", nke na-ekpebi usoro nke mmewere mgbe ọ dabara.
Dịka ọmụmaatụ:table ip foo {
tọọ akwụkwọ ọcha {
ụdị ip saddr
ọcha = {192.168.10.35, 192.168.10.101, 192.168.10.135}
}mmanya yinye {
ụdị nko nko prerouting mkpa nzacha; ọdịda amụma;
ip daddr @whitelist nabata
}
}table ip foo {
map addr2mark {
ụdị ip saddr: akara meta
ihe = {192.168.10.35: 0x00000001, 192.168.10.135 : 0x00000002}
}
} - Agbakwunyere ikike iji njikọ na njikọ NAT, nke na-enye gị ohere ịkọwapụta adreesị na ọdụ ụgbọ mmiri mgbe ị na-akọwa mgbanwe NAT dabere na ndepụta maapụ ma ọ bụ aha aha:
nft tinye iwu ip nat pre dnat ip addr . ọdụ ụgbọ mmiri gaa ip saddr map {1.1.1.1: 2.2.2.2 . iri atọ }
nft tinye map ip nat ebe {ụdị ipv4_addr. inet_service: ipv4_addr. ọrụ inet \; }
nft tinye iwu ip nat pre dnat ip addr . ọdụ ụgbọ mmiri na ip saddr. tcp dport map @ ebe aga - Nkwado maka ngwangwa ngwaike na ụfọdụ ọrụ nzacha nke kaadị netwọk na-arụ. A na-eme ngwa ngwa site na ngwa ethtool ("ethtool -K eth0 hw-tc-offload on"), emesịa ọ na-arụ ọrụ na nftables maka isi yinye site na iji ọkọlọtọ "offload". Mgbe ị na-eji Linux kernel 5.6, a na-akwado ngwaike ngwaike maka ndakọrịta nkụnye eji isi mee na nyocha interface na-abata yana nchikota na nnata, ịtụfu, oyiri (dup), na mbugharị (fwd). N'ihe atụ dị n'okpuru, a na-arụ ọrụ nke ngwugwu ntinye na-abịa site na adreesị 192.168.30.20 na ọkwa kaadị netwọk, na-agafeghị ngwugwu ahụ na kernel:
# nwamba file.nft
okpokoro netdev x {
yinye y {
ụdị nyo nko ingress ngwaọrụ eth0 mkpa 10; ebupụ ọkọlọtọ;
ip saddr 192.168.30.20 dobe
}
}
# nft -f faịlụ.nft - Ozi emelitere gbasara ebe njehie dị na iwu.
# nft ihichapụ iwu ip yz handle 7
Njehie: Enweghị ike ịhazi iwu: Enweghị ụdị faịlụ ma ọ bụ ndekọ aha
ihichapụ iwu ip yz handle 7
^# nft ihichapụ iwu ip xx njikwa 7
Njehie: Enweghị ike ịhazi iwu: Enweghị ụdị faịlụ ma ọ bụ ndekọ aha
hichapụ iwu ip xx aka 7
^# nft hichapụ tebụl twst
Njehie: Enweghị faịlụ ma ọ bụ ndekọ aha; ị pụtara table ‘ule' na ezinụlọ ip?
hichapụ tebụl twst
^^^^Ihe atụ nke mbụ na-egosi na tebụl "y" adịghị na sistemụ, nke abụọ na onye na-ahụ maka "7" na-efu, na nke atọ na-egosi ngwa ngwa typo mgbe ị na-ede aha tebụl.
- Nkwado agbakwunyere maka ịlele interface ohu site na ịkọwapụta "meta sdif" ma ọ bụ "meta sdifname":
... meta sdifname vrf1 ...
- Nkwado agbakwunyere maka ọrụ mgbanwe aka nri ma ọ bụ aka ekpe. Dịka ọmụmaatụ, ka ịgbanwee akara ngwungwu dị adị site na 1 bit hapụrụ wee tọọ obere ntakịrị ka ọ bụrụ 1:
Meta akara setịpụrụ meta akara lshift 1 ma ọ bụ 0x1…
- Emebere nhọrọ "-V" iji gosipụta ozi ụdị agbatiri.
# nft -V
nftables v0.9.4 (Jive na ise)
cli: readline
json: ee
minigmp: mba
libxtables: ee - A ga-akọwarịrị nhọrọ ahịrị iwu ugbu a tupu iwu. Dịka ọmụmaatụ, ịkwesịrị ịkọwapụta "nft -a list ruleset", na ịgba ọsọ "nft list ruleset -a" ga-ebute njehie.
isi: opennet.ru