ΠΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΈΡ ΡΠΈΠ»ΡΡΡ nftables 1.0.1 Π±Π΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΎ, ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°ΠΉΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈΡΠ΅ Π·Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° IPv4, IPv6, ARP ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΌΠΎΡΡΠΎΠ²Π΅ (Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΊΡΠΌ Π·Π°ΠΌΡΠ½Π° Π½Π° iptables, ip6table, arptables ΠΈ ebtables). ΠΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ nftables 1.0.1, ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux 5.16-rc1.
ΠΠ°ΠΊΠ΅ΡΡΡ nftables Π²ΠΊΠ»ΡΡΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° ΡΠΈΠ»ΡΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π±ΠΎΡΡΡ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π΄ΠΎΠΊΠ°ΡΠΎ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΡΠ΄ΡΠΎΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΎΡ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° nf_tables, ΠΊΠΎΡΡΠΎ Π΅ ΡΠ°ΡΡ ΠΎΡ ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux ΠΎΡ Π²Π΅ΡΡΠΈΡ 3.13. ΠΠ° Π½ΠΈΠ²ΠΎ ΡΠ΄ΡΠΎ ββΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΠ°ΠΌΠΎ ΠΎΠ±Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ», ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π΄Π°Π½Π½ΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΡΠΎΠΊΠ°.
Π‘Π°ΠΌΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡΠΈ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Ρ Π² Π±Π°ΠΉΡ ΠΊΠΎΠ΄ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠΎΠ·ΠΈ Π±Π°ΠΉΡ ΠΊΠΎΠ΄ ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π° Π² ΡΠ΄ΡΠΎΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Netlink ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π² ΡΠ΄ΡΠΎΡΠΎ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°, Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΡΠ²Π°ΡΠ° BPF (Berkeley Packet Filters). Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠ°Π²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΠΈΠ»ΡΡΠΈΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄, ΡΠ°Π±ΠΎΡΠ΅Ρ Π½Π° Π½ΠΈΠ²ΠΎ ΡΠ΄ΡΠΎ, ΠΈ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° Π°Π½Π°Π»ΠΈΠ· ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ.
ΠΡΠ½ΠΎΠ²Π½ΠΈ ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈ:
- ΠΠ°ΠΌΠ°Π»Π΅Π½Π° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΏΡΠΈ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠΏΠΈΡΡΡΠΈ Ρ Π½Π°Π±ΠΎΡΠΈ ΠΈ ΠΊΠ°ΡΡΠΈ.
- ΠΡΠ΅Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΏΠΈΡΡΡΠΈΡΠ΅ Ρ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠΈ ΠΈ ΠΊΠ°ΡΡΠΈ Π΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΎ.
- ΠΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ·Π±ΡΠ°Π½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ ΠΈ Π²Π΅ΡΠΈΠ³ΠΈ Π² Π³ΠΎΠ»Π΅ΠΌΠΈ Π½Π°Π±ΠΎΡΠΈ ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° βnft list rulesetβ Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΡΡ 100 Ρ ΠΈΠ»ΡΠ΄ΠΈ ΡΠ΅Π΄Π° Π΅ 3.049 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, Π° ΠΏΡΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° nat ΠΈ filter ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ (βnft list table natβ, βnft list table filter β) ΡΠ΅ Π½Π°ΠΌΠ°Π»ΡΠ²Π° Π΄ΠΎ 1.969 ΠΈ 0.697 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ.
- ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ Ρ ΠΎΠΏΡΠΈΡΡΠ° β--terseβ Π΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΎ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π° Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠΏΠΈΡΡΡΠΈ Ρ Π½Π°Π±ΠΎΡΠΈ ΠΈ ΠΊΠ°ΡΡΠΈ.
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΡΠΈΠ»ΡΡΠΈΡΠ° ΡΡΠ°ΡΠΈΠΊ ΠΎΡ Π²Π΅ΡΠΈΠ³Π°ΡΠ° βegressβ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π½Π° ΡΡΡΠΎΡΠΎ Π½ΠΈΠ²ΠΎ ΠΊΠ°ΡΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡΠ° Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π° Π²ΡΠ² Π²Π΅ΡΠΈΠ³Π°ΡΠ° netdev (egress hook), Ρ.Π΅. Π½Π° Π΅ΡΠ°ΠΏΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΏΠ°ΠΊΠ΅Ρ ΠΎΡ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΡΠ΅ΠΊ Π½Π° ΡΠ΄ΡΠΎΡΠΎ. ΡΠ°Π±Π»ΠΈΡΠ° netdev ΡΠΈΠ»ΡΡΡ { Π²Π΅ΡΠΈΠ³Π° ΠΈΠ·Ρ ΠΎΠ΄ { ΡΠΈΠΏ ΡΠΈΠ»ΡΡΡ ΠΊΡΠΊΠ° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° = { eth0, eth1 } ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ 0; meta priority set ip saddr map { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
- ΠΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° Π±Π°ΠΉΡΠΎΠ²Π΅ Π² Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ° ΠΈ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠΈ Π΄Π°Π΄Π΅Π½ΠΎ ΠΎΡΠΌΠ΅ΡΡΠ²Π°Π½Π΅. # nft Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ xy @ih,32,32 0x14000000 Π±ΡΠΎΡΡ # nft Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ xy @ih,32,32 Π½Π°Π±ΠΎΡ 0x14000000 Π±ΡΠΎΡΡ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru