ΠΠΎΠ΄ΠΎΠ²Π°ΡΠ° Π±Π°Π·Π° Π½Π° FreeBSD ΠΏΡΠΈΠ΅ΠΌΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Netlink (RFC 3549), ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Linux Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΄ΡΠΎΡΠΎ ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. ΠΡΠΎΠ΅ΠΊΡΡΡ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π΄ΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ NETLINK_ROUTE Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° Π² ΡΠ΄ΡΠΎΡΠΎ.
Π Π½Π°ΡΡΠΎΡΡΠ°ΡΠ° ΡΠΈ ΡΠΎΡΠΌΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠΈΡΡ ΡΠ»ΠΎΠΉ Netlink ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° FreeBSD Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Linux ip ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠ° iproute2 Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ, Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° IP Π°Π΄ΡΠ΅ΡΠΈ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° nexthop ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π·Π° ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ Π΄ΠΎ ΠΆΠ΅Π»Π°Π½Π°ΡΠ° Π΄Π΅ΡΡΠΈΠ½Π°ΡΠΈΡ . Π‘Π»Π΅Π΄ Π»Π΅ΠΊΠ° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° Π·Π°Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Netlink Π² ΠΏΠ°ΠΊΠ΅ΡΠ° Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Bird.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° Netlink Π·Π° FreeBSD Π΅ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ°Π½Π° ΠΊΠ°ΡΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π΅ΠΌ ΠΌΠΎΠ΄ΡΠ» Π½Π° ΡΠ΄ΡΠΎΡΠΎ, ΠΊΠΎΠΉΡΠΎ, Π°ΠΊΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ Π·Π°ΡΡΠ³Π° Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° ΡΠ΄ΡΠΎΡΠΎ ΠΈ ΡΡΠ·Π΄Π°Π²Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΎΠΏΠ°ΡΠΊΠΈ ΡΡΡ Π·Π°Π΄Π°ΡΠΈ (tasqueue) Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π· ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ. ΠΡΠΈΡΠΈΠ½Π°ΡΠ° Π·Π° ΠΏΡΠ΅Π½Π°ΡΡΠ½Π΅ΡΠΎ Π½Π° Netlink Π΅ Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΠΎΠ²Π°, ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ ΠΈΠ·ΠΌΠΈΡΠ»ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ.
Netlink ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠ½ΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π΅Π½ ΡΠ»ΠΎΠΉ ΠΈ ΡΠ°Π·ΡΠΈΡΡΠ΅ΠΌ ΡΠΎΡΠΌΠ°Ρ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π΅ΠΉΡΡΠ²Π° ΠΊΠ°ΡΠΎ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊ, ΠΊΠΎΠΉΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π² Π΅Π΄Π½Π° Π·Π°ΡΠ²ΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π½Π° FreeBSD ΠΊΠ°ΡΠΎ devd, jail ΠΈ pfilctl ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΌΠΈΠ³ΡΠΈΡΠ°Π½ΠΈ ΠΊΡΠΌ Netlink, ΠΊΠ°ΡΠΎ Π²Π΅ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ioctl ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ΅ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΠΎΠΏΡΠΎΡΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅Π·ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ. Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Netlink Π·Π° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° nexthop ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ ΠΈ Π³ΡΡΠΏΠΈΡΠ΅ Π² ΡΡΠ΅ΠΊΠ° Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΏΠΎ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ.
Π’Π΅ΠΊΡΡΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:
- ΠΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈ, nexthops ΠΎΠ±Π΅ΠΊΡΠΈ ΠΈ Π³ΡΡΠΏΠΈ, ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ, Π°Π΄ΡΠ΅ΡΠΈ ΠΈ ΡΡΡΠ΅Π΄Π½ΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅ (arp/ndp).
- Π€ΠΎΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Π²Π΅ΡΡΠΈΡ Π·Π° ΠΏΠΎΡΠ²Π°ΡΠ° ΠΈ ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ, Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° Π°Π΄ΡΠ΅ΡΠΈ, Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ ΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈ.
- ΠΠΎΠ±Π°Π²ΡΠ½Π΅ ΠΈ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈ, nexthops ΠΎΠ±Π΅ΠΊΡΠΈ ΠΈ Π³ΡΡΠΏΠΈ, ΡΠ»ΡΠ·ΠΎΠ²Π΅, ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ.
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Rtsock Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru