αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžαž˜αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ nftables 1.0.1

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ выпуск ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° nftables 1.0.1, ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйсы Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для IPv4, IPv6, ARP ΠΈ сСтСвых мостов (Π½Π°Ρ†Π΅Π»Π΅Π½ Π½Π° Π·Π°ΠΌΠ΅Π½Ρƒ iptables, ip6table, arptables ΠΈ ebtables). НСобходимыС для Ρ€Π°Π±ΠΎΡ‚Ρ‹ выпуска nftables 1.0.1 измСнСния Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² состав ядра Linux 5.16-rc1.

αž€αž‰αŸ’αž…αž”αŸ‹ nftables αžšαž½αž˜αž˜αžΆαž“αžŸαž˜αžΆαžŸαž’αžΆαžαž»αžαž˜αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž„αžΆαžšαž€αž˜αŸ’αžšαž·αžαžαžΊαžŽαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„ nf_tables αžŠαŸ‚αž›αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ 3.13 αŸ” αž€αž˜αŸ’αžšαž·αžαžαžΊαžŽαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžαŸ‚αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž―αž€αžšαžΆαž‡αŸ’αž™αž“αŸƒαž–αž·αž’αžΈαž€αžΆαžšαž‘αžΌαž‘αŸ…αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž˜αž»αžαž„αžΆαžšαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž›αŸ†αž αžΌαžšαŸ”

αž…αŸ’αž”αžΆαž”αŸ‹αž“αŸƒαž€αžΆαžšαž…αŸ’αžšαŸ„αŸ‡ αž“αž·αž„αž’αŸ’αž“αž€αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžαžΆαž˜αž–αž·αž’αžΈαž€αžΆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‡αžΆ bytecode αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ bytecode αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αž»αž€αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΊαžŽαŸ‚αž›αžŠαŸ„αž™αž”αŸ’αžšαžΎαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ Netlink αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αŸ’αž“αž»αž„αžαžΊαžŽαŸ‚αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž–αž·αžŸαŸαžŸαžŠαŸ‚αž›αž“αžΉαž€αžƒαžΎαž‰αžŠαž›αŸ‹ BPF (Berkeley Packet Filters)αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αž“αžΌαžœαž‘αŸ†αž αŸ†αž“αŸƒαž€αžΌαžŠαžαŸ’αžšαž„αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αž˜αŸ’αžšαž·αžαžαžΊαžŽαŸ‚αž› αž αžΎαž™αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž˜αž»αžαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαž…αŸ’αž”αžΆαž”αŸ‹αž‰αŸ‚αž€ αž“αž·αž„αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž–αž·αž’αžΈαž€αžΆαžšαž‘αŸ…αž€αŸ’αž“αž»αž„αž‘αŸ†αž αŸ†αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”

αž€αžΆαžšαž…αŸ’αž“αŸƒαž”αŸ’αžšαžŒαž·αžαžŸαŸ†αžαžΆαž“αŸ‹αŸ—αŸ–

  • Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… set- ΠΈ map-списков.
  • УскорСна ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° set- ΠΈ map-списков.
  • УскорСн Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ·Π±Ρ€Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€Π°Ρ… ΠΏΡ€Π°Π²ΠΈΠ». НапримСр, врСмя выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Β«nft list rulesetΒ» для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ», Π½Π°ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ 100 тысяч строк, составляСт 3.049 сСкунды, Π° ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°Π±Π»ΠΈΡ† nat ΠΈ filter (Β«nft list table natΒ», Β«nft list table filterΒ») сокращаСтся Π΄ΠΎ 1.969 ΠΈ 0.697 сСкунд.
  • УскорСно Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запросов с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ Β«β€”terseΒ» ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€Π°Π²ΠΈΠ» с большими set- ΠΈ map-списками.
  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈΠ· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Β«egressΒ», ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π½Π΅, Ρ‡Ρ‚ΠΎ egress-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ netdev (hook egress), Ρ‚.Π΅. Π½Π° стадии ΠΊΠΎΠ³Π΄Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΡ‚ сСтСвого стСка ядра. table netdev filter { chain egress { type filter hook egress devices = { eth0, eth1 } priority 0; meta priority set ip saddr map { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ сопоставлСниС ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚ΠΎΠ² Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΈ содСрТимом ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ. # nft add rule x y @ih,32,32 0x14000000 counter # nft add rule x y @ih,32,32 set 0x14000000 counter

αž”αŸ’αžšαž—αž–: opennet.ru

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹