ืขื•ืงืฃ ื—ืกื™ืžืช ILV ืขื DNSTap ื•-BGP

ืขื•ืงืฃ ื—ืกื™ืžืช ILV ืขื DNSTap ื•-BGP

ื”ื ื•ืฉื ื“ื™ ืžื•ื›ื”, ืื ื™ ื™ื•ื“ืข. ืœื“ื•ื’ืžื”, ื™ืฉ ื ื”ื“ืจ ืžืืžืจ, ืื‘ืœ ืจืง ื—ืœืง ื”-IP ืฉืœ ืจืฉื™ืžืช ื”ื—ืกื™ืžื•ืช ื ื—ืฉื‘ ืฉื. ื ื•ืกื™ืฃ ื’ื ื“ื•ืžื™ื™ื ื™ื.

ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉื‘ืชื™ ื”ืžืฉืคื˜ ื•ื”ืจืง"ืŸ ื—ื•ืกืžื™ื ื”ื›ืœ ืขืœ ื™ืžื™ืŸ ื•ืขืœ ืฉืžืืœ, ื•ื”ืกืคืงื™ื ืžืฉืชื“ืœื™ื ืœื ืœื™ืคื•ืœ ืชื—ืช ื”ืงื ืกื•ืช ืฉื”ื•ืฆื™ื Revizorro, ื”ื”ืคืกื“ื™ื ื”ื ืœื•ื•ื™ื ืžื—ืกื™ืžื” ื”ื ื’ื“ื•ืœื™ื ืœืžื“ื™. ื•ื‘ื™ืŸ ื”ืืชืจื™ื ื”ื—ืกื•ืžื™ื "ื›ื“ื™ืŸ" ื™ืฉื ื ืจื‘ื™ื ืฉื™ืžื•ืฉื™ื™ื (ืฉืœื•ื, rutracker)

ืื ื™ ื’ืจ ืžื—ื•ืฅ ืœืชื—ื•ื ื”ืฉื™ืคื•ื˜ ืฉืœ ื”-RKN, ืื‘ืœ ื”ื•ืจื™, ืงืจื•ื‘ื™ ื•ื—ื‘ืจื™ ื ืฉืืจื• ื‘ื‘ื™ืช. ืื– ื”ื•ื—ืœื˜ ืœืžืฆื•ื ื“ืจืš ืงืœื” ืœืื ืฉื™ื ืจื—ื•ืงื™ื ืž-IT ืœืขืงื•ืฃ ื—ืกื™ืžื”, ืจืฆื•ื™ ื‘ืœื™ ื”ืฉืชืชืคื•ืชื ื‘ื›ืœืœ.

ื‘ื”ืขืจื” ื–ื•, ืœื ืืชืืจ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืกื™ืกื™ื™ื ื‘ืจืฉืช ื‘ืฉืœื‘ื™ื, ืื‘ืœ ืืชืืจ ืืช ื”ืขืงืจื•ื ื•ืช ื”ื›ืœืœื™ื™ื ื›ื™ืฆื“ ื ื™ืชืŸ ืœื™ื™ืฉื ืืช ื”ืชื›ื ื™ืช ื”ื–ื•. ืื– ื™ื“ืข ืขืœ ืื™ืš ื”ืจืฉืช ืขื•ื‘ื“ืช ื‘ื›ืœืœ ื•ื‘ืœื™ื ื•ืงืก ื‘ืคืจื˜ ื”ื•ื ื—ื•ื‘ื”.

ืกื•ื’ื™ ืžื ืขื•ืœื™ื

ืจืืฉื™ืช, ื‘ื•ืื• ื ืจืขื ืŸ ืืช ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ืžื” ืฉื ื—ืกื.

ื™ืฉื ื ืžืกืคืจ ืกื•ื’ื™ื ืฉืœ ืžื ืขื•ืœื™ื ื‘-XML ืฉื ืคืจืง ืžื”-RKN:

  • IP
  • ะ”ะพะผะตะฝ
  • ื›ืชื•ื‘ืช ื”ืืชืจ

ืœืฉื ื”ืคืฉื˜ื•ืช, ื ืฆืžืฆื ืื•ืชื ืœืฉื ื™ื™ื: IP ื•ื“ื•ืžื™ื™ืŸ, ื•ืคืฉื•ื˜ ื ืฉืœื•ืฃ ืืช ื”ื“ื•ืžื™ื™ืŸ ืžื—ืกื™ืžื” ื‘ืืžืฆืขื•ืช URL (ืœื™ืชืจ ื“ื™ื•ืง, ื”ื ื›ื‘ืจ ืขืฉื• ื–ืืช ืขื‘ื•ืจื ื•).

ืื ืฉื™ื ื˜ื•ื‘ื™ื ืž Roskomsvoboda ื”ื‘ื™ืŸ ื ืคืœื API, ืฉื“ืจื›ื• ื ื•ื›ืœ ืœื”ืฉื™ื’ ืืช ืžื” ืฉืื ื• ืฆืจื™ื›ื™ื:

ื’ื™ืฉื” ืœืืชืจื™ื ื—ืกื•ืžื™ื

ืœืฉื ื›ืš, ืื ื• ื–ืงื•ืงื™ื ืœื›ืžื” VPS ื–ืจื™ื ืงื˜ื ื™ื, ืจืฆื•ื™ ืขื ืชืขื‘ื•ืจื” ื‘ืœืชื™ ืžื•ื’ื‘ืœืช - ื™ืฉ ื”ืจื‘ื” ื›ืืœื” ืชืžื•ืจืช 3-5 ื“ื•ืœืจ. ืืชื” ืฆืจื™ืš ืœืงื—ืช ืืช ื–ื” ื‘ื—ื•"ืœ ื”ืงืจื•ื‘ ื›ื“ื™ ืฉื”ืคื™ื ื’ ืœื ื™ื”ื™ื” ื’ื“ื•ืœ ื‘ืžื™ื•ื—ื“, ืื‘ืœ ืฉื•ื‘, ืงื—ื• ื‘ื—ืฉื‘ื•ืŸ ืฉื”ืื™ื ื˜ืจื ื˜ ื•ื”ื’ื™ืื•ื’ืจืคื™ื” ืœื ืชืžื™ื“ ื—ื•ืคืคื™ื. ื•ืžื›ื™ื•ื•ืŸ ืฉืื™ืŸ SLA ืขื‘ื•ืจ 5 ื“ื•ืœืจ, ืขื“ื™ืฃ ืœืงื—ืช 2+ ื—ืชื™ื›ื•ืช ืžืกืคืงื™ื ืฉื•ื ื™ื ืขื‘ื•ืจ ืกื•ื‘ืœื ื•ืช ืชืงืœื•ืช.

ืœืื—ืจ ืžื›ืŸ, ืขืœื™ื ื• ืœื”ื’ื“ื™ืจ ืžื ื”ืจื” ืžื•ืฆืคื ืช ืžื ืชื‘ ื”ืœืงื•ื— ืœ-VPS. ืื ื™ ืžืฉืชืžืฉ ื‘-Wireguard ื‘ืชื•ืจ ื”ืžื”ื™ืจ ื•ื”ืงืœ ื‘ื™ื•ืชืจ ืœื”ื’ื“ืจื”. ื™ืฉ ืœื™ ื’ื ื ืชื‘ื™ ืœืงื•ื— ื”ืžื‘ื•ืกืกื™ื ืขืœ ืœื™ื ื•ืงืก (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 ื‘ื”ืคืฆื•ืช ืจื‘ื•ืช (ื›ืžื• ืื•ื‘ื•ื ื˜ื• 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

ืืกืคืชื™ ืกืœ"ื“ ื•-DEB ื—ื‘ื™ืœื•ืช ืœื”ืชืงื ื” ืงืœื”. ืืžื•ืจ ืœืขื‘ื•ื“ ืขืœ ื›ืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ื”ืขื“ื›ื ื™ืช ื™ื—ืกื™ืช ืขื systemd. ืื™ืŸ ืœื”ื ืฉื•ื ืชืœื•ืช.

ืขืจื›ืชื™

ืื– ื‘ื•ืื• ื ืชื—ื™ืœ ืœื”ืจื›ื™ื‘ ืืช ื›ืœ ื”ืจื›ื™ื‘ื™ื ื‘ื™ื—ื“. ื›ืชื•ืฆืื” ืžื›ืš, ืขืœื™ื ื• ืœืงื‘ืœ ืžืฉื”ื• ื›ืžื• ื˜ื•ืคื•ืœื•ื’ื™ื™ืช ื”ืจืฉืช ื”ื–ื•:
ืขื•ืงืฃ ื—ืกื™ืžืช ILV ืขื DNSTap ื•-BGP

ื”ื”ื™ื’ื™ื•ืŸ ืฉืœ ื”ืขื‘ื•ื“ื”, ืื ื™ ื—ื•ืฉื‘, ื‘ืจื•ืจ ืžื”ืชืจืฉื™ื:

  • ืœืœืงื•ื— ื”ืฉืจืช ืฉืœื ื• ืžื•ื’ื“ืจ ื›-DNS, ื•ืฉืื™ืœืชื•ืช DNS ื—ื™ื™ื‘ื•ืช ืœืขื‘ื•ืจ ื’ื ืขืœ ื”-VPN. ื–ื” ื”ื›ืจื—ื™ ื›ื“ื™ ืฉื”ืกืคืง ืœื ื™ื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ื™ื™ืจื•ื˜ DNS ื›ื“ื™ ืœื—ืกื•ื.
  • ื‘ืขืช ืคืชื™ื—ืช ื”ืืชืจ, ื”ืœืงื•ื— ืฉื•ืœื— ืฉืื™ืœืชืช DNS ื›ืžื• "ืžื”ืŸ ื”-IPs ืฉืœ xxx.org"
  • unbound ืคื•ืชืจ ืืช xxx.org (ืื• ืœื•ืงื— ืื•ืชื• ืžื”ืžื˜ืžื•ืŸ) ื•ืฉื•ืœื— ืชื’ื•ื‘ื” ืœืœืงื•ื— "xxx.org ื™ืฉ IP ื›ื–ื” ื•ืื—ืจ", ืžืฉื›ืคืœ ืื•ืชื• ื‘ืžืงื‘ื™ืœ ื“ืจืš DNSTap
  • dnstap-bgp ืžื›ืจื™ื– ืขืœ ื›ืชื•ื‘ื•ืช ืืœื” ื‘ ื‘ื™ืจื“ ื‘ืืžืฆืขื•ืช BGP ืื ื”ื“ื•ืžื™ื™ืŸ ื ืžืฆื ื‘ืจืฉื™ืžืช ื”ื—ืกื•ืžื™ื
  • ื‘ื™ืจื“ ืžืคืจืกื ืžืกืœื•ืœ ืœื›ืชื•ื‘ื•ืช IP ืืœื” ืขื next-hop self ื ืชื‘ ืœืงื•ื—
  • ืžื ื•ืช ืขื•ืงื‘ื•ืช ืžื”ืœืงื•ื— ืœื›ืชื•ื‘ื•ืช IP ืืœื• ืขื•ื‘ืจื•ืช ื‘ืžื ื”ืจื”

ื‘ืฉืจืช, ืœืžืกืœื•ืœื™ื ืœืืชืจื™ื ื—ืกื•ืžื™ื, ืื ื™ ืžืฉืชืžืฉ ื‘ื˜ื‘ืœื” ื ืคืจื“ืช ื‘ืชื•ืš BIRD ื•ื”ื™ื ืœื ืžืฆื˜ืœื‘ืช ืขื ืžืขืจื›ืช ื”ื”ืคืขืœื” ื‘ืฉื•ื ืื•ืคืŸ.

ืœืชื›ื ื™ืช ื–ื• ื™ืฉ ื—ื™ืกืจื•ืŸ: ืœืžื ื•ืช ื”-SYN ื”ืจืืฉื•ื ื” ืžื”ืœืงื•ื—, ื›ื›ืœ ื”ื ืจืื”, ื™ื”ื™ื” ื–ืžืŸ ืœืฆืืช ื“ืจืš ื”ืกืคืง ื”ืžืงื•ืžื™. ื”ืžืกืœื•ืœ ืœื ืžืคื•ืจืกื ืžื™ื“. ื•ื›ืืŸ ืืคืฉืจื•ื™ื•ืช ืืคืฉืจื™ื•ืช ื‘ื”ืชืื ืœืื•ืคืŸ ืฉื‘ื• ื”ืกืคืง ืžื‘ืฆืข ืืช ื”ื—ืกื™ืžื”. ืื ื”ื•ื ืคืฉื•ื˜ ืžืคื™ืœ ืืช ื”ืชื ื•ืขื”, ืื– ืื™ืŸ ื‘ืขื™ื”. ื•ืื ื”ื•ื ืžืคื ื” ืื•ืชื• ืœืื™ื–ืฉื”ื• DPI, ืื– (ืชื™ืื•ืจื˜ื™ืช) ืืคืงื˜ื™ื ืžื™ื•ื—ื“ื™ื ืืคืฉืจื™ื™ื.

ื™ื™ืชื›ืŸ ื’ื ืฉืœืงื•ื—ื•ืช ืœื ืžื›ื‘ื“ื™ื ืืช ื ื™ืกื™ DNS TTL, ืžื” ืฉื™ื›ื•ืœ ืœื’ืจื•ื ืœืœืงื•ื— ืœื”ืฉืชืžืฉ ื‘ื›ืžื” ืขืจื›ื™ื ืžื™ื•ืฉื ื™ื ืžื”ืžื˜ืžื•ืŸ ื”ืจืงื•ื‘ ืฉืœื• ื‘ืžืงื•ื ืœื‘ืงืฉ Unbound.

ื‘ืคื•ืขืœ, ืœื ื”ืจืืฉื•ืŸ ื•ืœื ื”ืฉื ื™ ื’ืจืžื• ืœื™ ืœื‘ืขื™ื•ืช, ืื‘ืœ ื”ืงื™ืœื•ืžื˜ืจืื–' ืฉืœืš ืขืฉื•ื™ ืœื”ืฉืชื ื•ืช.

ื›ื•ื•ื ื•ืŸ ืฉืจืช

ื›ื“ื™ ืœื”ืงืœ ืขืœ ื”ื’ืœื’ื•ืœ, ื›ืชื‘ืชื™ ืชืคืงื™ื“ ืขื‘ื•ืจ Ansible. ื–ื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ื’ื ืฉืจืชื™ื ื•ื’ื ืœืงื•ื—ื•ืช ื”ืžื‘ื•ืกืกื™ื ืขืœ ืœื™ื ื•ืงืก (ืฉื ื•ืขื“ ืœื”ืคืฆื•ืช ืžื‘ื•ืกืกื•ืช deb). ื›ืœ ื”ื”ื’ื“ืจื•ืช ื“ื™ ื‘ืจื•ืจื•ืช ื•ืžื•ื’ื“ืจื•ืช inventory.yml. ืชืคืงื™ื“ ื–ื” ื ื—ืชืš ืžืกืคืจ ื”ืžืฉื—ืงื™ื ื”ื’ื“ื•ืœ ืฉืœื™, ื›ืš ืฉื”ื•ื ืขืฉื•ื™ ืœื”ื›ื™ืœ ืฉื’ื™ืื•ืช - ืœืžืฉื•ืš ื‘ืงืฉื•ืช ื‘ืจื•ืš ื”ื‘ื ๐Ÿ™‚

ื‘ื•ืื• ื ืขื‘ื•ืจ ืขืœ ื”ืžืจื›ื™ื‘ื™ื ื”ืขื™ืงืจื™ื™ื.

BGP

ืœื”ืจืฆืช ืฉื ื™ ื“ืžื•ื ื™ื BGP ืขืœ ืื•ืชื• ืžืืจื— ื™ืฉ ื‘ืขื™ื” ืžื”ื•ืชื™ืช: BIRD ืœื ืจื•ืฆื” ืœื”ื’ื“ื™ืจ BGP peering ืขื ื”-localhost (ืื• ื›ืœ ืžืžืฉืง ืžืงื•ืžื™). ืžื”ืžื™ืœื” ื‘ื›ืœืœ. ื—ื™ืคื•ืฉ ื‘ื’ื•ื’ืœ ื•ืงืจื™ืืช ืจืฉื™ืžื•ืช ืชืคื•ืฆื” ืœื ืขื–ืจื•, ื”ื ื˜ื•ืขื ื™ื ืฉื–ื” ื‘ืชื›ื ื•ืŸ. ืื•ืœื™ ื™ืฉ ื“ืจืš ื›ืœืฉื”ื™, ืื‘ืœ ืœื ืžืฆืืชื™ ืื•ืชื”.

ืืชื” ื™ื›ื•ืœ ืœื ืกื•ืช ื“ืžื•ืŸ BGP ืื—ืจ, ืื‘ืœ ืื ื™ ืื•ื”ื‘ ืืช BIRD ื•ื”ื•ื ืžืฉืžืฉ ืื•ืชื™ ื‘ื›ืœ ืžืงื•ื, ืื ื™ ืœื ืจื•ืฆื” ืœื™ื™ืฆืจ ื™ืฉื•ื™ื•ืช.

ืœื›ืŸ ื”ื—ื‘ืืชื™ ืืช dnstap-bgp ื‘ืชื•ืš ืžืจื—ื‘ ื”ืฉืžื•ืช ืฉืœ ื”ืจืฉืช, ืฉืžื—ื•ื‘ืจ ืœืฉื•ืจืฉ ื“ืจืš ืžืžืฉืง veth: ื–ื” ื›ืžื• ืฆื™ื ื•ืจ, ืฉืงืฆื•ื•ืชื™ื• ื‘ื•ืœื˜ื™ื ื‘ืžืจื—ื‘ื™ ืฉืžื•ืช ืฉื•ื ื™ื. ื‘ื›ืœ ืื—ื“ ืžื”ืงืฆื•ื•ืช ื”ืœืœื•, ืื ื• ืชื•ืœื™ื ื›ืชื•ื‘ื•ืช IP ืคืจื˜ื™ื•ืช ืฉืœ p2p ืฉืื™ื ืŸ ื—ื•ืจื’ื•ืช ืžื”ืžืืจื—, ื›ืš ืฉื”ืŸ ื™ื›ื•ืœื•ืช ืœื”ื™ื•ืช ื›ืœ ื“ื‘ืจ. ื–ื”ื• ืื•ืชื• ืžื ื’ื ื•ืŸ ื”ืžืฉืžืฉ ืœื’ื™ืฉื” ืœืชื”ืœื™ื›ื™ื ื‘ืคื ื™ื ืื”ื•ื‘ ืขืœ ื›ื•ืœื ื“ื•ืงืจ ื•ืžื›ื•ืœื•ืช ืื—ืจื•ืช.

ื‘ืฉื‘ื™ืœ ื–ื” ื ื›ืชื‘ ืชึทืกืจึดื™ื˜ ื•ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉื›ื‘ืจ ืชื•ืืจื” ืœืขื™ืœ ืœื’ืจื™ืจืช ืขืฆืžืš ื‘ืฉื™ืขืจ ืœืžืจื—ื‘ ืฉืžื•ืช ืื—ืจ ื ื•ืกืคื” ืœ-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

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื‘ืื•ื‘ื•ื ื˜ื•, ื”ื‘ื™ื ืืจื™ Unbound ื ืฆืžื“ ืขืœ ื™ื“ื™ ืคืจื•ืคื™ืœ AppArmor, ืฉืื•ืกืจ ืขืœื™ื• ืœื”ืชื—ื‘ืจ ืœื›ืœ ืžื™ื ื™ ืฉืงืขื™ DNSTap. ืืชื” ื™ื›ื•ืœ ืœืžื—ื•ืง ืืช ื”ืคืจื•ืคื™ืœ ื”ื–ื”, ืื• ืœื”ืฉื‘ื™ืช ืื•ืชื•:

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

ื–ื” ื›ื ืจืื” ืฆืจื™ืš ืœื”ืชื•ื•ืกืฃ ืœืกืคืจ ื”ืžืฉื—ืงื™ื. ื–ื” ืื™ื“ื™ืืœื™, ื›ืžื•ื‘ืŸ, ืœืชืงืŸ ืืช ื”ืคืจื•ืคื™ืœ ื•ืœื”ื ืคื™ืง ืืช ื”ื–ื›ื•ื™ื•ืช ื”ื“ืจื•ืฉื•ืช, ืื‘ืœ ื”ืชืขืฆืœืชื™ ืžื“ื™.

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. ื ืจืื” ืฉื”ื™ืœื“-ืชืกืจื™ื˜ ื”ื‘ื™ืŸ ืืช ื–ื”. ืœื›ืŸ, ืื ื• ืžืฉื ื™ื ืืช ื–ื” ืœ- 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

ื”ื ื ื›ืชื‘ื• ื‘ืœื™ ื”ืจื‘ื” ืžื—ืฉื‘ื”, ืื– ืื ืืชื ืจื•ืื™ื ืžืฉื”ื• ืฉืืคืฉืจ ืœืฉืคืจ - ืœื›ื• ืขืœ ื–ื”.

ื”ื’ื“ืจืช ืœืงื•ื—

ื›ืืŸ ืืชืŸ ื“ื•ื’ืžืื•ืช ืœื ืชื‘ื™ ืœื™ื ื•ืงืก, ืื‘ืœ ื‘ืžืงืจื” ืฉืœ 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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”