ЗаобикалянС Π½Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ILV с DNSTap ΠΈ BGP

ЗаобикалянС Π½Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ILV с DNSTap ΠΈ BGP

Π’Π΅ΠΌΠ°Ρ‚Π° Π΅ доста ΠΏΡ€Π΅Ρ‚ΡƒΠΏΠ°Π½Π°, Π·Π½Π°ΠΌ. НапримСр, ΠΈΠΌΠ° страхотно статия, Π½ΠΎ Ρ‚Π°ΠΌ сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° само IP частта ΠΎΡ‚ списъка Π·Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅. Π©Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ.

ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΡΡŠΠ΄ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π° ΠΈ RKN Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ всичко надясно ΠΈ наляво, Π° доставчицитС сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚ усилСно Π΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ‚ ΠΏΠΎΠ΄ Π³Π»ΠΎΠ±ΠΈΡ‚Π΅, ΠΈΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ‚ Revizorro, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ‚Π΅ с Ρ‚ΠΎΠ²Π° Π·Π°Π³ΡƒΠ±ΠΈ ΠΎΡ‚ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ са доста Π³ΠΎΠ»Π΅ΠΌΠΈ. И срСд "Π·Π°ΠΊΠΎΠ½Π½ΠΎ" Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈΡ‚Π΅ сайтовС ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ (Π·Π΄Ρ€Π°Π²Π΅ΠΉ, rutracker)

ЖивСя извън ΡŽΡ€ΠΈΡΠ΄ΠΈΠΊΡ†ΠΈΡΡ‚Π° Π½Π° RKN, Π½ΠΎ ΠΌΠΎΠΈΡ‚Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ, Ρ€ΠΎΠ΄Π½ΠΈΠ½ΠΈ ΠΈ приятСли останаха Ρƒ Π΄ΠΎΠΌΠ°. Π—Π°Ρ‚ΠΎΠ²Π° бСшС Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄Π° сС измисли лСсСн Π½Π°Ρ‡ΠΈΠ½ Π·Π° Ρ…ΠΎΡ€Π°Ρ‚Π°, Π΄Π°Π»Π΅Ρ‡ ΠΎΡ‚ ИВ, Π΄Π° заобиколят Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ, Π·Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½Π΅ Π±Π΅Π· тяхното участиС ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ.

Π’ Ρ‚Π°Π·ΠΈ Π±Π΅Π»Π΅ΠΆΠΊΠ° няма Π΄Π° описвам основнитС ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ Π½Π΅Ρ‰Π° Π½Π° ΡΡ‚ΡŠΠΏΠΊΠΈ, Π° Ρ‰Π΅ опиша ΠΎΠ±Ρ‰ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ Ρ‚Π°Π·ΠΈ схСма. Π’Π°ΠΊΠ° Ρ‡Π΅ ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΊΠ°Ρ‚ΠΎ цяло ΠΈ Π² частност Π² Linux Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ.

Π’ΠΈΠ΄ΠΎΠ²Π΅ Π±Ρ€Π°Π²ΠΈ

ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° опрСсним ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° си Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΎ.

Има няколко Ρ‚ΠΈΠΏΠ° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ Π² разтоварСния XML ΠΎΡ‚ RKN:

  • IP
  • ИмС Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π°
  • URL

Π—Π° простота Ρ‰Π΅ Π³ΠΈ Π½Π°ΠΌΠ°Π»ΠΈΠΌ Π΄ΠΎ Π΄Π²Π΅: IP ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ ΠΈ просто Ρ‰Π΅ ΠΈΠ·Π²Π°Π΄ΠΈΠΌ Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° ΠΎΡ‚ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ ΠΏΠΎ URL (ΠΏΠΎ-Ρ‚ΠΎΡ‡Π½ΠΎ, Ρ‚Π΅ Π²Π΅Ρ‡Π΅ са Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ Ρ‚ΠΎΠ²Π° Π·Π° нас).

Π΄ΠΎΠ±Ρ€ΠΈ Ρ…ΠΎΡ€Π° ΠΎΡ‚ Роскомсвобода Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° чудСсСн API, Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚ΠΎΠ²Π°, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ:

Π”ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈ сайтовС

Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°, ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ малък Ρ‡ΡƒΠΆΠ΄ VPS, Π·Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½Π΅ с Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ - ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ тях Π·Π° 3-5 Π΄ΠΎΠ»Π°Ρ€Π°. Врябва Π΄Π° Π³ΠΎ Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ Π² Π±Π»ΠΈΠ·ΠΊΠ°Ρ‚Π° Ρ‡ΡƒΠΆΠ±ΠΈΠ½Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΠΈΠ½Π³ΡŠΡ‚ Π΄Π° Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ голям, Π½ΠΎ ΠΎΡ‚Π½ΠΎΠ²ΠΎ ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ гСографията Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‚. И Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ няма SLA Π·Π° 5 Π΄ΠΎΠ»Π°Ρ€Π°, ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ 2+ броя ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ доставчици Π·Π° отказоустойчивост.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° трябва Π΄Π° настроим ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½ Ρ‚ΡƒΠ½Π΅Π» ΠΎΡ‚ клиСнтския Ρ€ΡƒΡ‚Π΅Ρ€ Π΄ΠΎ VPS. Използвам Wireguard ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΉ-Π±ΡŠΡ€Π· ΠΈ лСсСн Π·Π° настройка. Имам ΠΈ клиСнтски Ρ€ΡƒΡ‚Π΅Ρ€ΠΈ, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Linux (APU2 ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ Π² OpenWRT). Π’ случай Π½Π° някои Mikrotik / Cisco, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈΡ‚Π΅, Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π·Π° тях ΠΊΠ°Ρ‚ΠΎ OpenVPN ΠΈ GRE-over-IPSEC.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ ΠΈ прСнасочванС Π½Π° интСрСсния Ρ‚Ρ€Π°Ρ„ΠΈΠΊ

ΠœΠΎΠΆΠ΅Ρ‚Π΅, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π΄Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ цСлия ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΡ€Π΅Π· Ρ‡ΡƒΠΆΠ΄ΠΈ Π΄ΡŠΡ€ΠΆΠ°Π²ΠΈ. Но Π½Π°ΠΉ-вСроятно скоростта Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с мСстно ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ Ρ‰Π΅ пострада Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΎΡ‚ Ρ‚ΠΎΠ²Π°. ОсвСн Ρ‚ΠΎΠ²Π° изискванията Π·Π° чСстотна Π»Π΅Π½Ρ‚Π° Π½Π° VPS Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-високи.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ Ρ‰Π΅ трябва ΠΏΠΎ някакъв Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° към Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈΡ‚Π΅ сайтовС ΠΈ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»Π½ΠΎ Π΄Π° Π³ΠΎ насочим към Ρ‚ΡƒΠ½Π΅Π»Π°. Π”ΠΎΡ€ΠΈ Π°ΠΊΠΎ част ΠΎΡ‚ β€žΠ΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈΡβ€œ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ стигнС Π΄ΠΎ Ρ‚Π°ΠΌ, ΠΏΠ°ΠΊ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Π° ΠΊΠ°Ρ€Π°Ρ‚Π΅ всичко ΠΏΡ€Π΅Π· Ρ‚ΡƒΠ½Π΅Π»Π°.

Π—Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° BGP ΠΈ Ρ‰Π΅ обявявамС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ Π΄ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΌΡ€Π΅ΠΆΠΈ ΠΎΡ‚ нашия VPS Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅. НСка Π²Π·Π΅ΠΌΠ΅ΠΌ BIRD ΠΊΠ°Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΠΉ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ‚Π΅ ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΈ BGP Π΄Π΅ΠΌΠΎΠ½ΠΈ.

IP

Π‘ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΏΠΎ IP всичко Π΅ ясно: Π½ΠΈΠ΅ просто обявявамС всички Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈ IP адрСси с VPS. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅, Ρ‡Π΅ ΠΈΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ 600 хиляди ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠΈ Π² списъка, ΠΊΠΎΠΉΡ‚ΠΎ API Π²Ρ€ΡŠΡ‰Π°, ΠΈ ΠΏΠΎ-голямата част ΠΎΡ‚ тях са /32 хостовС. Π’ΠΎΠ·ΠΈ Π±Ρ€ΠΎΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡŠΡ€ΠΊΠ° слабитС клиСнтски Ρ€ΡƒΡ‚Π΅Ρ€ΠΈ.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° списъка бСшС Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄Π° сС ΠΎΠ±ΠΎΠ±Ρ‰ΠΈ Π΄ΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° / 24, Π°ΠΊΠΎ ΠΈΠΌΠ° 2 ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ хоста. Π’Π°ΠΊΠ° броят Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΡ‚Π΅ бСшС Π½Π°ΠΌΠ°Π»Π΅Π½ Π΄ΠΎ ~100 хиляди. БцСнарият Π·Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ послСдва.

Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ

Π’ΠΎΠ²Π° Π΅ ΠΏΠΎ-слоТно ΠΈ ΠΈΠΌΠ° няколко Π½Π°Ρ‡ΠΈΠ½Π°. НапримСр, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° инсталиратС ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π΅Π½ Squid Π½Π° всСки клиСнтски Ρ€ΡƒΡ‚Π΅Ρ€ ΠΈ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ HTTP ΠΏΡ€ΠΈΡ…Π²Π°Ρ‰Π°Π½Π΅ Ρ‚Π°ΠΌ ΠΈ Π΄Π° Π½Π°Π΄Π½ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π² TLS Ρ€ΡŠΠΊΠΎΡΡ‚ΠΈΡΠΊΠ°Π½Π΅Ρ‚ΠΎ, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ искания URL адрСс Π² ΠΏΡŠΡ€Π²ΠΈΡ случай ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° ΠΎΡ‚ SNI във втория.

Но ΠΏΠΎΡ€Π°Π΄ΠΈ всички Π²ΠΈΠ΄ΠΎΠ²Π΅ Π½ΠΎΠ²ΠΎΠΌΠΎΠ΄Π½ΠΈ TLS1.3 + eSNI, HTTPS Π°Π½Π°Π»ΠΈΠ·ΡŠΡ‚ става всС ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Ρ€Π΅Π°Π»Π΅Π½ всСки Π΄Π΅Π½. Π”Π°, ΠΈ инфраструктурата ΠΎΡ‚ страна Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° става всС ΠΏΠΎ-слоТна - Ρ‰Π΅ трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΠΎΠ½Π΅ OpenWRT.

Π—Π°Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠΈΡ… Π΄Π° ΠΏΠΎΠ΅ΠΌΠ° ΠΏΠΎ ΠΏΡŠΡ‚Ρ Π½Π° ΠΏΡ€ΠΈΡ…Π²Π°Ρ‰Π°Π½Π΅ Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° DNS заявки. Π’ΡƒΠΊ ΡΡŠΡ‰ΠΎ всСки DNS-over-TLS / HTTPS Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° сС Π΄Π²ΠΈΠΆΠΈ Π½Π°Π΄ Π³Π»Π°Π²Π°Ρ‚Π° Π²ΠΈ, Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ (засСга) Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π°Π·ΠΈ част Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° - ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅, ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ собствСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° DoT / DoH.

Как Π΄Π° ΠΏΡ€ΠΈΡ…Π²Π°Π½Π° DNS?

Π’ΡƒΠΊ ΡΡŠΡ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° няколко ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°.

  • ΠŸΡ€ΠΈΡ…Π²Π°Ρ‰Π°Π½Π΅ Π½Π° DNS Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Ρ‡Ρ€Π΅Π· PCAP ΠΈΠ»ΠΈ NFLOG
    И Π΄Π²Π°Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π° ΠΏΡ€ΠΈΡ…Π²Π°Ρ‰Π°Π½Π΅ са Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ Π² ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° сидмат. Но Π½Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΎΡ‚ дълго Π²Ρ€Π΅ΠΌΠ΅ ΠΈ функционалността Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ всС ΠΎΡ‰Π΅ трябва Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ сбруя Π·Π° Π½Π΅Π³ΠΎ.
  • Анализ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° DNS ΡΡŠΡ€Π²ΡŠΡ€Π°
    Π—Π° съТалСниС ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈΡ‚Π΅ ΠΌΠΈ рСкурсори Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° рСгистрират ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ, Π° само заявки. По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ‚ΠΎΠ²Π° Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ, Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ заявкитС, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ ΠΈΠΌΠ°Ρ‚ слоТна структура ΠΈ Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС Π½Π°ΠΏΠΈΡˆΠ°Ρ‚ Π² тСкстов Π²ΠΈΠ΄.
  • DNSTap
    Π—Π° щастиС ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ тях Π²Π΅Ρ‡Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ DNSTap Π·Π° Ρ‚Π°Π·ΠΈ Ρ†Π΅Π».

Какво С DNSTap?

ЗаобикалянС Π½Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ILV с DNSTap ΠΈ BGP

Π’ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΊΠ»ΠΈΠ΅Π½Ρ‚-ΡΡŠΡ€Π²ΡŠΡ€, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Π±ΡƒΡ„Π΅Ρ€ΠΈ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ ΠΎΡ‚ Ρ€Π°ΠΌΠΊΠΈ Π·Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ ΠΎΡ‚ DNS ΡΡŠΡ€Π²ΡŠΡ€ към ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€ Π½Π° структурирани DNS заявки ΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ. По ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ DNS ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ ΠΏΡ€Π΅Π΄Π°Π²Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π·Π° заявка ΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ (Ρ‚ΠΈΠΏ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, ΠΊΠ»ΠΈΠ΅Π½Ρ‚/ΡΡŠΡ€Π²ΡŠΡ€ IP ΠΈ Ρ‚.Π½.) плюс пълни DNS ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² (Π΄Π²ΠΎΠΈΡ‡Π½Π°Ρ‚Π°) Ρ„ΠΎΡ€ΠΌΠ°, Π² която Ρ€Π°Π±ΠΎΡ‚ΠΈ с тях ΠΏΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°.

Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅, Ρ‡Π΅ Π² ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°Ρ‚Π° DNSTap DNS ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ дСйства ΠΊΠ°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Π° ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€ΡŠΡ‚ дСйства ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ€Π²ΡŠΡ€. ВоСст DNS ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ сС ΡΠ²ΡŠΡ€Π·Π²Π° с ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€Π°, Π° Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ.

ДнСс DNSTap сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° във всички популярни DNS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ. Но, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, BIND Π² ΠΌΠ½ΠΎΠ³ΠΎ дистрибуции (ΠΊΠ°Ρ‚ΠΎ Ubuntu LTS) чСсто сС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° ΠΏΠΎ някаква ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π±Π΅Π· Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°. Π’Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ΠΊΠ° Π½Π΅ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ с ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сглобяванС, Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΏΠΎ-Π»Π΅ΠΊ ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π· рСкурсор - Unbound.

Как Π΄Π° Ρ…Π²Π°Π½Π° DNSTap?

Има някои Π½ΠΎΠΌΠ΅Ρ€ CLI ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ DNSTap ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, Π½ΠΎ Ρ‚Π΅ Π½Π΅ са подходящи Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° нашия ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π—Π°Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠΈΡ… Π΄Π° измисля свой собствСн вСлосипСд, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈ всичко Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ: dnstap-bgp

ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°:

  • ΠšΠΎΠ³Π°Ρ‚ΠΎ сС стартира, Ρ‚ΠΎΠΉ Π·Π°Ρ€Π΅ΠΆΠ΄Π° списък с Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ ΠΎΡ‚ тСкстов Ρ„Π°ΠΉΠ», ΠΎΠ±Ρ€ΡŠΡ‰Π° Π³ΠΈ (habr.com -> com.habr), ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π° ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΈ Π»ΠΈΠ½ΠΈΠΈ, Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΈ ΠΈ ΠΏΠΎΠ΄Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ (Ρ‚.Π΅. Π°ΠΊΠΎ ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° habr.com ΠΈ www.habr.com, Ρ‰Π΅ бъдС Π·Π°Ρ€Π΅Π΄Π΅Π½ само ΠΏΡŠΡ€Π²ΠΈΡΡ‚) ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° прСфиксно Π΄ΡŠΡ€Π²ΠΎ Π·Π° Π±ΡŠΡ€Π·ΠΎ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² Ρ‚ΠΎΠ·ΠΈ списък
  • ДСйствайки ΠΊΠ°Ρ‚ΠΎ DNSTap ΡΡŠΡ€Π²ΡŠΡ€, Ρ‚ΠΎΠΉ Ρ‡Π°ΠΊΠ° Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΎΡ‚ DNS ΡΡŠΡ€Π²ΡŠΡ€. По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΊΠ°ΠΊΡ‚ΠΎ UNIX, Ρ‚Π°ΠΊΠ° ΠΈ TCP сокСти, Π½ΠΎ DNS ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ·Π½Π°Π²Π°ΠΌ, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ само UNIX сокСти
  • ВходящитС DNSTap ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΏΡŠΡ€Π²ΠΎ сС дСсСриализират Π² Protobuf структура, Π° слСд Ρ‚ΠΎΠ²Π° самото Π΄Π²ΠΎΠΈΡ‡Π½ΠΎ DNS ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, Π½Π°ΠΌΠΈΡ€Π°Ρ‰ΠΎ сС Π² Π΅Π΄Π½ΠΎ ΠΎΡ‚ ΠΏΠΎΠ»Π΅Ρ‚Π°Ρ‚Π° Π½Π° Protobuf, сС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° Π΄ΠΎ Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° DNS RR записи
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π° сС Π΄Π°Π»ΠΈ исканият хост (ΠΈΠ»ΠΈ нСговия родитСлски Π΄ΠΎΠΌΠ΅ΠΉΠ½) Π΅ Π² зарСдСния списък, Π°ΠΊΠΎ Π½Π΅ Π΅, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ сС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°
  • Π‘Π°ΠΌΠΎ A/AAAA/CNAME RR сС ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚ ΠΎΡ‚ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π° ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ IPv4/IPv6 адрСси сС ΠΈΠ·Π²Π»ΠΈΡ‡Π°Ρ‚ ΠΎΡ‚ тях
  • IP адрСситС сС ΠΊΠ΅ΡˆΠΈΡ€Π°Ρ‚ с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅ΠΌ TTL ΠΈ сС Ρ€Π΅ΠΊΠ»Π°ΠΌΠΈΡ€Π°Ρ‚ Π½Π° всички ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΈ BGP ΠΏΠ°Ρ€Ρ‚Π½ΡŒΠΎΡ€ΠΈ
  • ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€, сочСщ към Π²Π΅Ρ‡Π΅ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ IP, нСговият TTL сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°
  • Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ TTL ΠΈΠ·Ρ‚Π΅Ρ‡Π΅, Π·Π°ΠΏΠΈΡΡŠΡ‚ сС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π° ΠΎΡ‚ кСша ΠΈ ΠΎΡ‚ BGP ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°

Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° функционалност:

  • ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π΅ Π½Π° списъка с Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ ΠΎΡ‚ SIGHUP
  • ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° кСша Π² синхрон с Π΄Ρ€ΡƒΠ³ΠΈ копия dnstap-bgp Ρ‡Ρ€Π΅Π· HTTP/JSON
  • Π”ΡƒΠ±Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ кСша Π½Π° диска (Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π½Π° BoltDB), Π·Π° Π΄Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΡƒ слСд рСстартиранС
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ към Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎ пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° (Π·Π°Ρ‰ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС описано ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ)
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° IPv6

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ:

  • IDN Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈΡ‚Π΅ всС ΠΎΡ‰Π΅ Π½Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚
  • Малко BGP настройки

Π‘ΡŠΠ±Ρ€Π°Ρ… RPM ΠΈ DEB ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° лСсСн ΠΌΠΎΠ½Ρ‚Π°ΠΆ. Врябва Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° всички сравнитСлно Π½ΠΎΠ²ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ систСми със systemd. Ρ‚Π΅ нямат Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ зависимости.

Π‘Ρ…Π΅ΠΌΠ°Ρ‚Π°

И Ρ‚Π°ΠΊΠ°, Π½Π΅ΠΊΠ° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π΄Π° сглобявамС всички ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π°Π΅Π΄Π½ΠΎ. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½Π΅Ρ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π·ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²Π° топология:
ЗаобикалянС Π½Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ILV с DNSTap ΠΈ BGP

Π›ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°, мисля, Π΅ ясна ΠΎΡ‚ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π°:

  • ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΈΠΌΠ° нашия ΡΡŠΡ€Π²ΡŠΡ€, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ ΠΊΠ°Ρ‚ΠΎ DNS, ΠΈ DNS заявкитС ΡΡŠΡ‰ΠΎ трябва Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΠΏΡ€Π΅Π· VPN. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄ΠΎΡΡ‚Π°Π²Ρ‡ΠΈΠΊΡŠΡ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° DNS ΠΏΡ€ΠΈΡ…Π²Π°Ρ‰Π°Π½Π΅ Π·Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅.
  • ΠŸΡ€ΠΈ отварянС Π½Π° сайта ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° DNS заявка ΠΊΠ°Ρ‚ΠΎ β€žΠΊΠ°ΠΊΠ²ΠΈ са IP адрСситС Π½Π° xxx.orgβ€œ
  • свободСн Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π° xxx.org (ΠΈΠ»ΠΈ Π³ΠΎ Π²Π·Π΅ΠΌΠ° ΠΎΡ‚ кСша) ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° β€žxxx.org ΠΈΠΌΠ° Ρ‚Π°ΠΊΡŠΠ² ΠΈ Ρ‚Π°ΠΊΡŠΠ² IPβ€œ, ΠΊΠ°Ρ‚ΠΎ Π³ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ Ρ‡Ρ€Π΅Π· DNSTap
  • dnstap-bgp обявява Ρ‚Π΅Π·ΠΈ адрСси Π² ПВИЧКА Ρ‡Ρ€Π΅Π· BGP, Π°ΠΊΠΎ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΡŠΡ‚ Π΅ Π² списъка с Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈ
  • ПВИЧКА обявява ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ Π΄ΠΎ Ρ‚Π΅Π·ΠΈ IP с next-hop self клиСнтски Ρ€ΡƒΡ‚Π΅Ρ€
  • Π‘Π»Π΅Π΄Π²Π°Ρ‰ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° към Ρ‚Π΅Π·ΠΈ IP адрСси ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΠΏΡ€Π΅Π· Ρ‚ΡƒΠ½Π΅Π»Π°

На ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ Π΄ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈ сайтовС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΠΎΡ‚Π΄Π΅Π»Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π²ΡŠΡ‚Ρ€Π΅ Π² BIRD ΠΈ тя Π½Π΅ сС прСсича с ОБ ΠΏΠΎ никакъв Π½Π°Ρ‡ΠΈΠ½.

Π’Π°Π·ΠΈ схСма ΠΈΠΌΠ° Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ: ΠΏΡŠΡ€Π²ΠΈΡΡ‚ SYN ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π°ΠΉ-вСроятно Ρ‰Π΅ ΠΈΠΌΠ° Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° напуснС мСстния доставчик. ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΡŠΡ‚ Π½Π΅ сС обявява Π²Π΅Π΄Π½Π°Π³Π°. И Ρ‚ΡƒΠΊ са възмоТни ΠΎΠΏΡ†ΠΈΠΈ Π² зависимост ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄ΠΎΡΡ‚Π°Π²Ρ‡ΠΈΠΊΡŠΡ‚ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ. Ако Ρ‚ΠΎΠΉ просто Π½Π°ΠΌΠ°Π»ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, Ρ‚ΠΎΠ³Π°Π²Π° няма ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. И Π°ΠΊΠΎ Π³ΠΎ прСнасочи към някакъв DPI, Ρ‚ΠΎΠ³Π°Π²Π° (Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π½ΠΎ) са възмоТни спСциални Π΅Ρ„Π΅ΠΊΡ‚ΠΈ.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΅ възмоТно ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π΄Π° Π½Π΅ Π·Π°Ρ‡ΠΈΡ‚Π°Ρ‚ чудСсата Π½Π° DNS TTL, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΊΠ°Ρ€Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° някои остарСли записи ΠΎΡ‚ своя Π³Π½ΠΈΠ» кСш, вмСсто Π΄Π° поиска Unbound.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π½ΠΈΡ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ, Π½ΠΈΡ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΡ‚ΠΎ ΠΌΠΈ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, Π½ΠΎ Π²Π°ΡˆΠΈΡΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π³ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π°Ρ€ΠΈΡ€Π°.

Настройка Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°

Π—Π° ΠΏΠΎ-лСсно Π½Π°Π²ΠΈΠ²Π°Π½Π΅ написах роля Π·Π° Ansible. МоТС Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° ΠΊΠ°ΠΊΡ‚ΠΎ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Linux (ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ Π·Π° Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° deb дистрибуции). Всички настройки са доста ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΈ ΠΈ са Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ inventory.yml. Π’Π°Π·ΠΈ роля Π΅ изрязана ΠΎΡ‚ моята голяма ΠΊΠ½ΠΈΠ³Π° с ΠΈΠ³Ρ€ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π³Ρ€Π΅ΡˆΠΊΠΈ - искания Π·Π° изтСглянС Π΄ΠΎΠ±Ρ€Π΅ дошли πŸ™‚

НСка Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ ΠΏΡ€Π΅Π· основнитС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ.

BGP

Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΄Π²Π° BGP Π΄Π΅ΠΌΠΎΠ½Π° Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ хост ΠΈΠΌΠ° Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»Π΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ: BIRD Π½Π΅ иска Π΄Π° настрои BGP peering с localhost (ΠΈΠ»ΠΈ всСки Π»ΠΎΠΊΠ°Π»Π΅Π½ интСрфСйс). Π˜Π·ΠΎΠ±Ρ‰ΠΎ ΠΎΡ‚ Π΄ΡƒΠΌΠ°Ρ‚Π°. Π’ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π² Π³ΡƒΠ³ΡŠΠ» ΠΈ Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ Π½Π° пощСнски ΡΠΏΠΈΡΡŠΡ†ΠΈ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π°, Ρ‚Π΅ Ρ‚Π²ΡŠΡ€Π΄ΡΡ‚, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ΠΎ. МоТС Π±ΠΈ ΠΈΠΌΠ° някакъв Π½Π°Ρ‡ΠΈΠ½, Π½ΠΎ Π½Π΅ Π³ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ….

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π΄Ρ€ΡƒΠ³ BGP Π΄Π΅ΠΌΠΎΠ½, Π½ΠΎ харСсвам BIRD ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° навсякъдС ΠΎΡ‚ ΠΌΠ΅Π½, Π½Π΅ искам Π΄Π° създавам ΠΎΠ±Π΅ΠΊΡ‚ΠΈ.

Π—Π°Ρ‚ΠΎΠ²Π° скрих dnstap-bgp Π² пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с ΠΊΠΎΡ€Π΅Π½Π° Ρ‡Ρ€Π΅Π· интСрфСйса veth: Ρ‚ΠΎΠ²Π° Π΅ ΠΊΠ°Ρ‚ΠΎ Ρ‚Ρ€ΡŠΠ±Π°, Ρ‡ΠΈΠΈΡ‚ΠΎ ΠΊΡ€Π°ΠΈΡ‰Π° ΡΡ‚ΡŠΡ€Ρ‡Π°Ρ‚ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ пространства Π½Π° ΠΈΠΌΠ΅Π½Π°. На всСки ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ ΠΊΡ€Π°ΠΈΡ‰Π° Π½ΠΈΠ΅ ΠΎΠΊΠ°Ρ‡Π²Π°ΠΌΠ΅ частни p2p IP адрСси, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ Π½Π°Π΄Ρ…Π²ΡŠΡ€Π»ΡΡ‚ хоста, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ всякакви. Π’ΠΎΠ²Π° Π΅ ΡΡŠΡ‰ΠΈΡΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ процСситС Π²ΡŠΡ‚Ρ€Π΅ ΠΎΠ±ΠΈΡ‡Π°Π½ ΠΎΡ‚ всички Π”ΠΎΠΊΠ΅Ρ€ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ.

Π—Π° Ρ‚ΠΎΠ²Π° Π΅ писано сцСнарий ΠΈ Π²Π΅Ρ‡Π΅ описаната ΠΏΠΎ-Π³ΠΎΡ€Π΅ функционалност Π·Π° плъзганС Π·Π° косата към Π΄Ρ€ΡƒΠ³ΠΎ пространство Π½Π° ΠΈΠΌΠ΅Π½Π° бСшС Π΄ΠΎΠ±Π°Π²Π΅Π½Π° към dnstap-bgp. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠΉ трябва Π΄Π° сС стартира ΠΊΠ°Ρ‚ΠΎ root ΠΈΠ»ΠΈ Π΄Π° сС ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ Π½Π° двоичния Ρ„Π°ΠΉΠ» CAP_SYS_ADMIN Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° setcap.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ скрипт Π·Π° създаванС Π½Π° пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°

#!/bin/bash

NS="dtap"

IP="/sbin/ip"
IPNS="$IP netns exec $NS $IP"

IF_R="veth-$NS-r"
IF_NS="veth-$NS-ns"

IP_R="192.168.149.1"
IP_NS="192.168.149.2"

/bin/systemctl stop dnstap-bgp || true

$IP netns del $NS > /dev/null 2>&1
$IP netns add $NS

$IP link add $IF_R type veth peer name $IF_NS
$IP link set $IF_NS netns $NS

$IP addr add $IP_R remote $IP_NS dev $IF_R
$IP link set $IF_R up

$IPNS addr add $IP_NS remote $IP_R dev $IF_NS
$IPNS link set $IF_NS up

/bin/systemctl start dnstap-bgp

dnstap-bgp.conf

namespace = "dtap"
domains = "/var/cache/rkn_domains.txt"
ttl = "168h"

[dnstap]
listen = "/tmp/dnstap.sock"
perm = "0666"

[bgp]
as = 65000
routerid = "192.168.149.2"

peers = [
    "192.168.149.1",
]

bird.conf

router id 192.168.1.1;

table rkn;

# Clients
protocol bgp bgp_client1 {
    table rkn;
    local as 65000;
    neighbor 192.168.1.2 as 65000;
    direct;
    bfd on;
    next hop self;
    graceful restart;
    graceful restart time 60;
    export all;
    import none;
}

# DNSTap-BGP
protocol bgp bgp_dnstap {
    table rkn;
    local as 65000;
    neighbor 192.168.149.2 as 65000;
    direct;
    passive on;
    rr client;
    import all;
    export none;
}

# Static routes list
protocol static static_rkn {
    table rkn;
    include "rkn_routes.list";
    import all;
    export none;
}

rkn_routes.list

route 3.226.79.85/32 via "ens3";
route 18.236.189.0/24 via "ens3";
route 3.224.21.0/24 via "ens3";
...

DNS

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π² Ubuntu Π½Π΅ΠΎΠ±Π²ΡŠΡ€Π·Π°Π½ΠΈΡΡ‚ Π΄Π²ΠΎΠΈΡ‡Π΅Π½ Ρ„Π°ΠΉΠ» Π΅ фиксиран ΠΎΡ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° Π½Π° AppArmor, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΡƒ забранява ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ към всички Π²ΠΈΠ΄ΠΎΠ²Π΅ DNSTap сокСти. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ», ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅:

# cd /etc/apparmor.d/disable && ln -s ../usr.sbin.unbound .
# apparmor_parser -R /etc/apparmor.d/usr.sbin.unbound

Π’ΠΎΠ²Π° вСроятно трябва Π΄Π° сС Π΄ΠΎΠ±Π°Π²ΠΈ към ΠΊΠ½ΠΈΠ³Π°Ρ‚Π°. ИдСално Π΅, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° ΠΈ Π΄Π° ΠΈΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΏΡ€Π°Π²Π°, Π½ΠΎ бях Ρ‚Π²ΡŠΡ€Π΄Π΅ ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ².

Π½Π΅ΠΎΠ±Π²ΡŠΡ€Π·Π°Π½.conf

server:
    chroot: ""
    port: 53
    interface: 0.0.0.0
    root-hints: "/var/lib/unbound/named.root"
    auto-trust-anchor-file: "/var/lib/unbound/root.key"
    access-control: 192.168.0.0/16 allow

remote-control:
    control-enable: yes
    control-use-cert: no

dnstap:
    dnstap-enable: yes
    dnstap-socket-path: "/tmp/dnstap.sock"
    dnstap-send-identity: no
    dnstap-send-version: no

    dnstap-log-client-response-messages: yes

Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΡΠΏΠΈΡΡŠΡ†ΠΈ

Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π·Π° изтСглянС ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° списък с IP адрСси
Π’ΠΎΠΉ изтСгля списъка, ΠΎΠ±ΠΎΠ±Ρ‰Π°Π²Π° Π΄ΠΎ прСфикса Pfx. Π’ dont_add ΠΈ Π½Π΅_ΠΎΠ±ΠΎΠ±Ρ‰Π°Π²Π°ΠΉΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π½Π° IP адрСситС ΠΈ ΠΌΡ€Π΅ΠΆΠΈΡ‚Π΅ Π΄Π° пропуснат ΠΈΠ»ΠΈ Π΄Π° Π½Π΅ ΠΎΠ±ΠΎΠ±Ρ‰Π°Π²Π°Ρ‚. Π˜ΠΌΠ°Ρ… Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Ρ‚ΠΎΠ²Π°. ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π½Π° моя VPS бСшС Π² списъка Π·Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ πŸ™‚

Π‘ΠΌΠ΅ΡˆΠ½ΠΎΡ‚ΠΎ Π΅, Ρ‡Π΅ API Π½Π° RosKomSvoboda Π±Π»ΠΎΠΊΠΈΡ€Π° заявки с потрСбитСлския Π°Π³Π΅Π½Ρ‚ Π½Π° Python ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. ИзглСТда, Ρ‡Π΅ script-kiddy Π³ΠΎ Π΅ Ρ€Π°Π·Π±Ρ€Π°Π». Π—Π°Ρ‚ΠΎΠ²Π° Π³ΠΎ промСнямС Π½Π° Ognelis.

ЗасСга Ρ€Π°Π±ΠΎΡ‚ΠΈ само с IPv4. Π΄Π΅Π»ΡŠΡ‚ Π½Π° IPv6 Π΅ малък, Π½ΠΎ Ρ‰Π΅ бъдС лСсно Π΄Π° сС ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°. ОсвСн Π°ΠΊΠΎ Π½Π΅ трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΈ bird6.

rkn.py

#!/usr/bin/python3

import json, urllib.request, ipaddress as ipa

url = 'https://api.reserve-rbl.ru/api/v2/ips/json'
pfx = '24'

dont_summarize = {
    # ipa.IPv4Network('1.1.1.0/24'),
}

dont_add = {
    # ipa.IPv4Address('1.1.1.1'),
}

req = urllib.request.Request(
    url,
    data=None, 
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
    }
)

f = urllib.request.urlopen(req)
ips = json.loads(f.read().decode('utf-8'))

prefix32 = ipa.IPv4Address('255.255.255.255')

r = {}
for i in ips:
    ip = ipa.ip_network(i)
    if not isinstance(ip, ipa.IPv4Network):
        continue

    addr = ip.network_address

    if addr in dont_add:
        continue

    m = ip.netmask
    if m != prefix32:
        r[m] = [addr, 1]
        continue

    sn = ipa.IPv4Network(str(addr) + '/' + pfx, strict=False)

    if sn in dont_summarize:
        tgt = addr
    else:
        tgt = sn

    if not sn in r:
        r[tgt] = [addr, 1]
    else:
        r[tgt][1] += 1

o = []
for n, v in r.items():
    if v[1] == 1:
        o.append(str(v[0]) + '/32')
    else:
        o.append(n)

for k in o:
    print(k)

Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅
ΠŸΡƒΡΠΊΠ°ΠΌ Π³ΠΎ Π½Π° ΠΊΠΎΡ€ΠΎΠ½Π°Ρ‚Π° вСднъТ Π½Π° Π΄Π΅Π½, ΠΌΠΎΠΆΠ΅ Π±ΠΈ си струва Π΄Π° Π³ΠΎ Π΄ΡŠΡ€ΠΏΠ°ΠΌ Π½Π° всСки 4 часа. Ρ‚ΠΎΠ²Π° спорСд ΠΌΠ΅Π½ Π΅ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΡŠΡ‚ Π·Π° подновяванС, ΠΊΠΎΠΉΡ‚ΠΎ RKN изисква ΠΎΡ‚ доставчицитС. ОсвСн Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ°Ρ‚ някакво Π΄Ρ€ΡƒΠ³ΠΎ супСр спСшно Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° пристигнС ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ.

ΠŸΡ€Π°Π²ΠΈ слСдното:

  • Изпълнява ΠΏΡŠΡ€Π²ΠΈΡ скрипт ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° списъка с ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ (rkn_routes.list) Π·Π° BIRD
  • ΠŸΡ€Π΅Π·Π°Ρ€Π΅Π΄Π΅Ρ‚Π΅ BIRD
  • Актуализира ΠΈ изчиства списъка с Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ Π·Π° dnstap-bgp
  • ΠŸΡ€Π΅Π·Π°Ρ€Π΅Π΄Π΅Ρ‚Π΅ dnstap-bgp

rkn_update.sh

#!/bin/bash

ROUTES="/etc/bird/rkn_routes.list"
DOMAINS="/var/cache/rkn_domains.txt"

# Get & summarize routes
/opt/rkn.py | sed 's/(.*)/route 1 via "ens3";/' > $ROUTES.new

if [ $? -ne 0 ]; then
    rm -f $ROUTES.new
    echo "Unable to download RKN routes"
    exit 1
fi

if [ -e $ROUTES ]; then
    mv $ROUTES $ROUTES.old
fi

mv $ROUTES.new $ROUTES

/bin/systemctl try-reload-or-restart bird

# Get domains
curl -s https://api.reserve-rbl.ru/api/v2/domains/json -o - | jq -r '.[]' | sed 's/^*.//' | sort | uniq > $DOMAINS.new

if [ $? -ne 0 ]; then
    rm -f $DOMAINS.new
    echo "Unable to download RKN domains"
    exit 1
fi

if [ -e $DOMAINS ]; then
    mv $DOMAINS $DOMAINS.old
fi

mv $DOMAINS.new $DOMAINS

/bin/systemctl try-reload-or-restart dnstap-bgp

Π’Π΅ са написани Π±Π΅Π· ΠΌΠ½ΠΎΠ³ΠΎ мислСнС, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π°ΠΊΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ - Π΄Π°Π²Π°ΠΉΡ‚Π΅.

Настройка Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

Π’ΡƒΠΊ Ρ‰Π΅ Π΄Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° Linux Ρ€ΡƒΡ‚Π΅Ρ€ΠΈ, Π½ΠΎ Π² случая с Mikrotik / Cisco Π±ΠΈ трябвало Π΄Π° Π΅ ΠΎΡ‰Π΅ ΠΏΠΎ-лСсно.

ΠŸΡŠΡ€Π²ΠΎ настроихмС BIRD:

bird.conf

router id 192.168.1.2;
table rkn;

protocol device {
    scan time 10;
};

# Servers
protocol bgp bgp_server1 {
    table rkn;
    local as 65000;
    neighbor 192.168.1.1 as 65000;
    direct;
    bfd on;
    next hop self;
    graceful restart;
    graceful restart time 60;
    rr client;
    export none;
    import all;
}

protocol kernel {
    table rkn;
    kernel table 222;
    scan time 10;
    export all;
    import none;
}

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Ρ‰Π΅ синхронизирамС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΡ‚Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ ΠΎΡ‚ BGP, с Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ядрото Π½ΠΎΠΌΠ΅Ρ€ 222.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° поискатС ΠΎΡ‚ ядрото Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ Ρ‚Π°Π·ΠΈ ΠΏΠ»ΠΎΡ‡Π°, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ Ρ‚Π°Π·ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅:

# ip rule add from all pref 256 lookup 222
# ip rule
0:  from all lookup local
256:    from all lookup 222
32766:  from all lookup main
32767:  from all lookup default

Всичко, остава Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ DHCP Π½Π° Ρ€ΡƒΡ‚Π΅Ρ€Π°, Π·Π° Π΄Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ IP адрСса Π½Π° Ρ‚ΡƒΠ½Π΅Π»Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΊΠ°Ρ‚ΠΎ DNS ΠΈ схСмата Π΅ Π³ΠΎΡ‚ΠΎΠ²Π°.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

Π‘ настоящия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° списъка с Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ, Ρ‚ΠΎΠΉ Π²ΠΊΠ»ΡŽΡ‡Π²Π°, Π½Π°Ρ€Π΅Π΄ с Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅Ρ‰Π°, youtube.com ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ CDN.

И Ρ‚ΠΎΠ²Π° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ всички Π²ΠΈΠ΄Π΅ΠΎΠΊΠ»ΠΈΠΏΠΎΠ²Π΅ Ρ‰Π΅ ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΠΏΡ€Π΅Π· VPN, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π΄Ρ€ΡŠΡΡ‚ΠΈ цСлия ΠΊΠ°Π½Π°Π». МоТС Π±ΠΈ си струва Π΄Π° ΡΡŠΡΡ‚Π°Π²ΠΈΡ‚Π΅ списък с популярни Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ-ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ RKN Π·Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ са Ρ‚ΡŠΠ½ΠΊΠΈ. И Π³ΠΈ пропуснСтС ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠžΠΏΠΈΡΠ°Π½ΠΈΡΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΈ позволява Π΄Π° Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈΡ‚Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ всяко Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ доставчицитС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.

По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, dnstap-bgp ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° всякакви Π΄Ρ€ΡƒΠ³ΠΈ Ρ†Π΅Π»ΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ извСстно Π½ΠΈΠ²ΠΎ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° въз основа Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π°. Π‘Π°ΠΌΠΎ ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π² нашС Π²Ρ€Π΅ΠΌΠ΅ хиляди сайтовС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° висят Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ IP адрСс (Π·Π°Π΄ някои Cloudflare, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠΌΠ° доста ниска точност.

Но Π·Π° Π½ΡƒΠΆΠ΄ΠΈΡ‚Π΅ Π½Π° заобикалянСто Π½Π° Π±Ρ€Π°Π²ΠΈ Ρ‚ΠΎΠ²Π° Π΅ напълно Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ.

Π”ΠΎΠ±Π°Π²ΠΊΠΈ, Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ, заявки Π·Π° изтСглянС - Π΄ΠΎΠ±Ρ€Π΅ дошли!

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€