Π’Π΅ΠΌΠ°ΡΠ° Π΅ Π΄ΠΎΡΡΠ° ΠΏΡΠ΅ΡΡΠΏΠ°Π½Π°, Π·Π½Π°ΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ° ΡΡΡΠ°Ρ
ΠΎΡΠ½ΠΎ
ΠΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΡΡΠ΄ΠΈΠ»ΠΈΡΠ°ΡΠ° ΠΈ RKN Π±Π»ΠΎΠΊΠΈΡΠ°Ρ Π²ΡΠΈΡΠΊΠΎ Π½Π°Π΄ΡΡΠ½ΠΎ ΠΈ Π½Π°Π»ΡΠ²ΠΎ, Π° Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈΡΠ΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ ΡΡΠΈΠ»Π΅Π½ΠΎ Π΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ ΠΏΠΎΠ΄ Π³Π»ΠΎΠ±ΠΈΡΠ΅, ΠΈΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ Revizorro, ΡΠ²ΡΡΠ·Π°Π½ΠΈΡΠ΅ Ρ ΡΠΎΠ²Π° Π·Π°Π³ΡΠ±ΠΈ ΠΎΡ Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ ΡΠ° Π΄ΠΎΡΡΠ° Π³ΠΎΠ»Π΅ΠΌΠΈ. Π ΡΡΠ΅Π΄ "Π·Π°ΠΊΠΎΠ½Π½ΠΎ" Π±Π»ΠΎΠΊΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠ°ΠΉΡΠΎΠ²Π΅ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ (Π·Π΄ΡΠ°Π²Π΅ΠΉ, rutracker)
ΠΠΈΠ²Π΅Ρ ΠΈΠ·Π²ΡΠ½ ΡΡΠΈΡΠ΄ΠΈΠΊΡΠΈΡΡΠ° Π½Π° RKN, Π½ΠΎ ΠΌΠΎΠΈΡΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΠΈ, ΡΠΎΠ΄Π½ΠΈΠ½ΠΈ ΠΈ ΠΏΡΠΈΡΡΠ΅Π»ΠΈ ΠΎΡΡΠ°Π½Π°Ρ Π° Ρ Π΄ΠΎΠΌΠ°. ΠΠ°ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΌΠΈΡΠ»ΠΈ Π»Π΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π·Π° Ρ ΠΎΡΠ°ΡΠ°, Π΄Π°Π»Π΅Ρ ΠΎΡ ΠΠ’, Π΄Π° Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΡΡ Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ΡΠΎ, Π·Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½Π΅ Π±Π΅Π· ΡΡΡ Π½ΠΎΡΠΎ ΡΡΠ°ΡΡΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠΎ.
Π ΡΠ°Π·ΠΈ Π±Π΅Π»Π΅ΠΆΠΊΠ° Π½ΡΠΌΠ° Π΄Π° ΠΎΠΏΠΈΡΠ²Π°ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π½Π΅ΡΠ° Π½Π° ΡΡΡΠΏΠΊΠΈ, Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ° ΠΎΠ±ΡΠΈΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠΈ ΡΠ°Π·ΠΈ ΡΡ Π΅ΠΌΠ°. Π’Π°ΠΊΠ° ΡΠ΅ ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ ΠΈ Π² ΡΠ°ΡΡΠ½ΠΎΡΡ Π² Linux Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ.
ΠΠΈΠ΄ΠΎΠ²Π΅ Π±ΡΠ°Π²ΠΈ
ΠΡΡΠ²ΠΎ, Π½Π΅ΠΊΠ° ΠΎΠΏΡΠ΅ΡΠ½ΠΈΠΌ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈ Π·Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ΠΎ.
ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠΈΠΏΠ° ΠΊΠ»ΡΡΠ°Π»ΠΊΠΈ Π² ΡΠ°Π·ΡΠΎΠ²Π°ΡΠ΅Π½ΠΈΡ XML ΠΎΡ RKN:
- IP
- ΠΠΌΠ΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π°
- URL
ΠΠ° ΠΏΡΠΎΡΡΠΎΡΠ° ΡΠ΅ Π³ΠΈ Π½Π°ΠΌΠ°Π»ΠΈΠΌ Π΄ΠΎ Π΄Π²Π΅: IP ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·Π²Π°Π΄ΠΈΠΌ Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° ΠΎΡ Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ ΠΏΠΎ URL (ΠΏΠΎ-ΡΠΎΡΠ½ΠΎ, ΡΠ΅ Π²Π΅ΡΠ΅ ΡΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΡΠΎΠ²Π° Π·Π° Π½Π°Ρ).
Π΄ΠΎΠ±ΡΠΈ Ρ
ΠΎΡΠ° ΠΎΡ
- IP:
https://api.reserve-rbl.ru/api/v2/ips/json - ΠΠΎΠΌΠ΅ΠΉΠ½ΠΈ:
https://api.reserve-rbl.ru/api/v2/domains/json
ΠΠΎΡΡΡΠΏ Π΄ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ΠΈ ΡΠ°ΠΉΡΠΎΠ²Π΅
ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π°, ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΌΠ°Π»ΡΠΊ ΡΡΠΆΠ΄ VPS, Π·Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½Π΅ Ρ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΡΡΠ°ΡΠΈΠΊ - ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ ΡΡΡ Π·Π° 3-5 Π΄ΠΎΠ»Π°ΡΠ°. Π’ΡΡΠ±Π²Π° Π΄Π° Π³ΠΎ Π²Π·Π΅ΠΌΠ΅ΡΠ΅ Π² Π±Π»ΠΈΠ·ΠΊΠ°ΡΠ° ΡΡΠΆΠ±ΠΈΠ½Π°, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΠΈΠ½Π³ΡΡ Π΄Π° Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»ΡΠΌ, Π½ΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΈΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈ Π³Π΅ΠΎΠ³ΡΠ°ΡΠΈΡΡΠ° Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΡΡΠ²ΠΏΠ°Π΄Π°Ρ. Π ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½ΡΠΌΠ° SLA Π·Π° 5 Π΄ΠΎΠ»Π°ΡΠ°, ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΡΠ΅ 2+ Π±ΡΠΎΡ ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ Π·Π° ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡ.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½ ΡΡΠ½Π΅Π» ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΡΡΡΠ΅Ρ Π΄ΠΎ VPS. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Wireguard ΠΊΠ°ΡΠΎ Π½Π°ΠΉ-Π±ΡΡΠ· ΠΈ Π»Π΅ΡΠ΅Π½ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°. ΠΠΌΠ°ΠΌ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈ ΡΡΡΠ΅ΡΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° Linux (
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈΡ ΡΡΠ°ΡΠΈΠΊ
ΠΠΎΠΆΠ΅ΡΠ΅, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅ ΡΠ΅Π»ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΡΡΠ°ΡΠΈΠΊ ΠΏΡΠ΅Π· ΡΡΠΆΠ΄ΠΈ Π΄ΡΡΠΆΠ°Π²ΠΈ. ΠΠΎ Π½Π°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΌΠ΅ΡΡΠ½ΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ ΡΠ΅ ΠΏΠΎΡΡΡΠ°Π΄Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΎΡ ΡΠΎΠ²Π°. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π·Π° ΡΠ΅ΡΡΠΎΡΠ½Π° Π»Π΅Π½ΡΠ° Π½Π° 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?
Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΡΡΠ²ΡΡ, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° Π±ΡΡΠ΅ΡΠΈ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ ΠΈ ΠΏΠΎΡΠΎΡΠΈ ΠΎΡ ΡΠ°ΠΌΠΊΠΈ Π·Π° ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ ΠΎΡ DNS ΡΡΡΠ²ΡΡ ΠΊΡΠΌ ΠΊΠΎΠ»Π΅ΠΊΡΠΎΡ Π½Π° ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΈ DNS Π·Π°ΡΠ²ΠΊΠΈ ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ. ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ DNS ΡΡΡΠ²ΡΡΡΡ ΠΏΡΠ΅Π΄Π°Π²Π° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ Π·Π° Π·Π°ΡΠ²ΠΊΠ° ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡ (ΡΠΈΠΏ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠ»ΠΈΠ΅Π½Ρ/ΡΡΡΠ²ΡΡ IP ΠΈ Ρ.Π½.) ΠΏΠ»ΡΡ ΠΏΡΠ»Π½ΠΈ DNS ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² (Π΄Π²ΠΎΠΈΡΠ½Π°ΡΠ°) ΡΠΎΡΠΌΠ°, Π² ΠΊΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Ρ ΡΡΡ ΠΏΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ°.
ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅, ΡΠ΅ Π² ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ°ΡΠ° DNSTap DNS ΡΡΡΠ²ΡΡΡΡ Π΄Π΅ΠΉΡΡΠ²Π° ΠΊΠ°ΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ, Π° ΠΊΠΎΠ»Π΅ΠΊΡΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²Π° ΠΊΠ°ΡΠΎ ΡΡΡΠ²ΡΡ. Π’ΠΎΠ΅ΡΡ DNS ΡΡΡΠ²ΡΡΡΡ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Ρ ΠΊΠΎΠ»Π΅ΠΊΡΠΎΡΠ°, Π° Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΡΠΎ.
ΠΠ½Π΅Ρ DNSTap ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ DNS ΡΡΡΠ²ΡΡΠΈ. ΠΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, BIND Π² ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ (ΠΊΠ°ΡΠΎ Ubuntu LTS) ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π° ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΏΡΠΈΡΠΈΠ½Π° Π±Π΅Π· Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°. Π’Π°ΠΊΠ° ΡΠ΅ Π½Π΅ΠΊΠ° Π½Π΅ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅, Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΏΠΎ-Π»Π΅ΠΊ ΠΈ ΠΏΠΎ-Π±ΡΡΠ· ΡΠ΅ΠΊΡΡΡΠΎΡ - Unbound.
ΠΠ°ΠΊ Π΄Π° Ρ Π²Π°Π½Π° DNSTap?
ΠΠΌΠ°
ΠΠ»Π³ΠΎΡΠΈΡΡΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ°:
- ΠΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°, ΡΠΎΠΉ Π·Π°ΡΠ΅ΠΆΠ΄Π° ΡΠΏΠΈΡΡΠΊ Ρ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠΎΠ² ΡΠ°ΠΉΠ», ΠΎΠ±ΡΡΡΠ° Π³ΠΈ (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 Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
Π‘ΡΠ±ΡΠ°Ρ
Π‘Ρ Π΅ΠΌΠ°ΡΠ°
Π ΡΠ°ΠΊΠ°, Π½Π΅ΠΊΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π΄Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π°Π΅Π΄Π½ΠΎ. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½Π΅ΡΠΎ ΠΊΠ°ΡΠΎ ΡΠ°Π·ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²Π° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ:
ΠΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ°, ΠΌΠΈΡΠ»Ρ, Π΅ ΡΡΠ½Π° ΠΎΡ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ°ΡΠ°:
- ΠΠ»ΠΈΠ΅Π½ΡΡΡ ΠΈΠΌΠ° Π½Π°ΡΠΈΡ ΡΡΡΠ²ΡΡ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ ΠΊΠ°ΡΠΎ 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.
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π½ΠΈΡΠΎ ΠΏΡΡΠ²ΠΎΡΠΎ, Π½ΠΈΡΠΎ Π²ΡΠΎΡΠΎΡΠΎ ΠΌΠΈ ΡΡΠ·Π΄Π°Π²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, Π½ΠΎ Π²Π°ΡΠΈΡΡ ΠΏΡΠΎΠ±Π΅Π³ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π°ΡΠΈΡΠ°.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΡΡΡΠ²ΡΡΠ°
ΠΠ° ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π½Π°Π²ΠΈΠ²Π°Π½Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ
ΠΠ΅ΠΊΠ° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΏΡΠ΅Π· ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ.
BGP
ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄Π²Π° BGP Π΄Π΅ΠΌΠΎΠ½Π° Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡΠΈ Ρ ΠΎΡΡ ΠΈΠΌΠ° ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ: BIRD Π½Π΅ ΠΈΡΠΊΠ° Π΄Π° Π½Π°ΡΡΡΠΎΠΈ BGP peering Ρ localhost (ΠΈΠ»ΠΈ Π²ΡΠ΅ΠΊΠΈ Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ). ΠΠ·ΠΎΠ±ΡΠΎ ΠΎΡ Π΄ΡΠΌΠ°ΡΠ°. Π’ΡΡΡΠ΅Π½Π΅ΡΠΎ Π² Π³ΡΠ³ΡΠ» ΠΈ ΡΠ΅ΡΠ΅Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΡΠ΅Π½ΡΠΊΠΈ ΡΠΏΠΈΡΡΡΠΈ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π°, ΡΠ΅ ΡΠ²ΡΡΠ΄ΡΡ, ΡΠ΅ ΡΠΎΠ²Π° Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ΠΎ. ΠΠΎΠΆΠ΅ Π±ΠΈ ΠΈΠΌΠ° Π½ΡΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½, Π½ΠΎ Π½Π΅ Π³ΠΎ Π½Π°ΠΌΠ΅ΡΠΈΡ .
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ Π΄ΡΡΠ³ BGP Π΄Π΅ΠΌΠΎΠ½, Π½ΠΎ Ρ Π°ΡΠ΅ΡΠ²Π°ΠΌ BIRD ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π°Π²ΡΡΠΊΡΠ΄Π΅ ΠΎΡ ΠΌΠ΅Π½, Π½Π΅ ΠΈΡΠΊΠ°ΠΌ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌ ΠΎΠ±Π΅ΠΊΡΠΈ.
ΠΠ°ΡΠΎΠ²Π° ΡΠΊΡΠΈΡ dnstap-bgp Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ ΠΊΠΎΡΠ΅Π½Π° ΡΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° veth: ΡΠΎΠ²Π° Π΅ ΠΊΠ°ΡΠΎ ΡΡΡΠ±Π°, ΡΠΈΠΈΡΠΎ ΠΊΡΠ°ΠΈΡΠ° ΡΡΡΡΡΠ°Ρ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π½Π° ΠΈΠΌΠ΅Π½Π°. ΠΠ° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΡΠ΅Π·ΠΈ ΠΊΡΠ°ΠΈΡΠ° Π½ΠΈΠ΅ ΠΎΠΊΠ°ΡΠ²Π°ΠΌΠ΅ ΡΠ°ΡΡΠ½ΠΈ p2p IP Π°Π΄ΡΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ Π½Π°Π΄Ρ Π²ΡΡΠ»ΡΡ Ρ ΠΎΡΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ. Π’ΠΎΠ²Π° Π΅ ΡΡΡΠΈΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π²ΡΡΡΠ΅ ΠΎΠ±ΠΈΡΠ°Π½ ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΠΠΎΠΊΠ΅Ρ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ.
ΠΠ° ΡΠΎΠ²Π° Π΅ ΠΏΠΈΡΠ°Π½ΠΎ
ΠΡΠΈΠΌΠ΅ΡΠ΅Π½ ΡΠΊΡΠΈΠΏΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°
#!/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
ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΏΠΈΡΡΡΠΈ
Π’ΠΎΠΉ ΠΈΠ·ΡΠ΅Π³Π»Ρ ΡΠΏΠΈΡΡΠΊΠ°, ΠΎΠ±ΠΎΠ±ΡΠ°Π²Π° Π΄ΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° 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