ืื ืืฉื ืื ืืืื, ืื ื ืืืืข. ืืืืืื, ืืฉ ื ืืืจ
ืืฉื ืืขืืืื ืฉืืชื ืืืฉืคื ืืืจืง"ื ืืืกืืื ืืื ืขื ืืืื ืืขื ืฉืืื, ืืืกืคืงืื ืืฉืชืืืื ืื ืืืคืื ืชืืช ืืงื ืกืืช ืฉืืืฆืื Revizorro, ืืืคืกืืื ืื ืืืืื ืืืกืืื ืื ืืืืืื ืืืื. ืืืื ืืืชืจืื ืืืกืืืื "ืืืื" ืืฉื ื ืจืืื ืฉืืืืฉืืื (ืฉืืื, rutracker)
ืื ื ืืจ ืืืืฅ ืืชืืื ืืฉืืคืื ืฉื ื-RKN, ืืื ืืืจื, ืงืจืืื ืืืืจื ื ืฉืืจื ืืืืช. ืื ืืืืื ืืืฆืื ืืจื ืงืื ืืื ืฉืื ืจืืืงืื ื-IT ืืขืงืืฃ ืืกืืื, ืจืฆืื ืืื ืืฉืชืชืคืืชื ืืืื.
ืืืขืจื ืื, ืื ืืชืืจ ืืช ืืืืจืื ืืืกืืกืืื ืืจืฉืช ืืฉืืืื, ืืื ืืชืืจ ืืช ืืขืงืจืื ืืช ืืืืืืื ืืืฆื ื ืืชื ืืืืฉื ืืช ืืชืื ืืช ืืื. ืื ืืืข ืขื ืืื ืืจืฉืช ืขืืืืช ืืืื ืืืืื ืืงืก ืืคืจื ืืื ืืืื.
ืกืืื ืื ืขืืืื
ืจืืฉืืช, ืืืื ื ืจืขื ื ืืช ืืืืืจืื ืฉื ืื ืฉื ืืกื.
ืืฉื ื ืืกืคืจ ืกืืืื ืฉื ืื ืขืืืื ื-XML ืฉื ืคืจืง ืื-RKN:
- IP
- ะะพะผะตะฝ
- ืืชืืืช ืืืชืจ
ืืฉื ืืคืฉืืืช, ื ืฆืืฆื ืืืชื ืืฉื ืืื: 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 ืืชืืจ ืืืืืจ ืืืงื ืืืืชืจ ืืืืืจื. ืืฉ ืื ืื ื ืชืื ืืงืื ืืืืืกืกืื ืขื ืืื ืืงืก (
ืืืืื ืืืคื ืื ืืืืฉ ืฉื ืชืขืืืจืช ืขื ืืื
ืืชื ืืืื, ืืืืื, ืืืืืช ืืช ืื ืชืขืืืจืช ืืืื ืืจื ื ืืจื ืืืื ืืช ืืจืืช. ืืื, ืกืืืจ ืืื ืื, ืืืืจืืช ืืขืืืื ืขื ืชืืื ืืงืืื ืชืกืืื ืืื ืืืื. ืื ืืกืฃ, ืืจืืฉืืช ืจืืื ืืคืก ื-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 ืืืคืฆืืช ืจืืืช (ืืื ืืืืื ืื 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 ืืื "ืืื ื-IPs ืฉื xxx.org"
- unbound ืคืืชืจ ืืช 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: ืื ืืื ืฆืื ืืจ, ืฉืงืฆืืืชืื ืืืืืื ืืืจืืื ืฉืืืช ืฉืื ืื. ืืื ืืื ืืืงืฆืืืช ืืืื, ืื ื ืชืืืื ืืชืืืืช IP ืคืจืืืืช ืฉื p2p ืฉืืื ื ืืืจืืืช ืืืืืจื, ืื ืฉืื ืืืืืืช ืืืืืช ืื ืืืจ. ืืื ืืืชื ืื ืื ืื ืืืฉืืฉ ืืืืฉื ืืชืืืืืื ืืคื ืื ืืืื ืขื ืืืื ืืืงืจ ืืืืืืืช ืืืจืืช.
ืืฉืืื ืื ื ืืชื
ืืืืื ืืกืงืจืืคื ืืืฆืืจืช ืืจืื ืฉืืืช
#!/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
ืืืจืื ืืขืืืื ืจืฉืืืืช
ืื ืืืจืื ืืช ืืจืฉืืื, ืืกืื ืืงืืืืืช 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