αααααΆαααβαααβααααΌαβααΆαβααβααΆαβααααΎβααΆαβααΆαα αααα»αβααΉαα ααΆα§ααΆα αααααΆαααα’ααα
αΆααααα½αα
αααααΆαααααΆααα·ααααααΆαα»ααΆααΆααα·α RKN ααΆααΆααα’αααΈαααΆααα’αααα ααΆαααααΆααα·αααΆααααααα αΎαα’ααααααααααααΆαααα»αααααΆααΆααααΆαααααΆαααα·αα±ααααααΆαααα αααααααΆααα·ααααααα ααααα Revizorro ααΆαααΆαααααααααΆαααααααααΈααΆααααααααΆααααΊααΆαααα αααααΆααα α αΎααααα»αα ααααααα ααααααααααααΌαααΆααααααααΆαα "αααααααα αααΆαα" ααΆαααα αααααααΆαααααααααααΆα αααΎα (ααααΆααα½α rutracker)
αααα»αααααα αααα αα»ααααΆαα·ααΆααα RKN ααα»αααααͺαα»αααααΆα ααΆα αααΆαα· αα·ααα·αααααααα·αααααααα»ααα αααα ααααα ααΌα ααααααΆααααΌαααΆααααααααα α α·ααααααααΎααα·ααΈααΆααααα½ααααααΆααα’αααααααα ααααΆαααΈ IT ααΎααααΈααααα»αααΈααΆααααααααΆαα αααααΎαααΆααααααααΆαααΆαα αΌααα½ααααααα½αααααΆαααααααα
αα αααα»ααααααα αααΆαααα αααα»αααΉααα·ααααααΆααα’αααΈααΏααααααΆαααΌαααααΆαααΆααα αΆαααα ααα»αααααααα»αααΉααααααΆααα’αααΈαααααΆαααααΌαα ααααααααααααααααΆααααααα’αΆα ααααΌαααΆαα’αα»ααααα ααΌα ααααα ααααααΉαα’αααΈααααααααααααΆαααααΎαααΆαααΆααΌαα αα·αααΆαα·ααααα αααα»αααΈαα»α ααΊααααΌαααααΆαα
αααααααααα
ααΆααααΌα ααΌαααααΎα±ααααΆαα αα αΆαααααααΎαα‘αΎααα·αα’αααΈα’αααΈαααααααΌαααΆαααΆααΆααα
ααΆαααααΆα αααΎααααααααα αααα»α XML ααααα·αααΆααααα»αααΈ RKNα
- IP
- ΠΠΎΠΌΠ΅Π½
- URL
αααααΆααααΆαααΆαααα ααΎαααΉαααΆαααααααααΆαα ααΆααΈαα IP αα·α domain α αΎαααΎαααΉααα domain α ααααΈααΆααααααααΆααααα URL (α αααΆααααΆαααααα ααα αα½αααααΆαααααΎααΆαααααΆαααα½αααΎααα½α α αΎα)α
ααα»αααααα’ααααΈ
- IP:
https://api.reserve-rbl.ru/api/v2/ips/json - αααα
https://api.reserve-rbl.ru/api/v2/domains/json
ααΆαα αΌαααααΎααα ααααααααααααΌαααΆαααΆααΆαα
ααΎααααΈααααΎααΌα αααααΎαααααΌαααΆα VPS αααααααΌα ααα½αα ααα½αααααα·ααααΆαα½αα ααΆα αααααααΆααααααααα - ααΆαα αααΎαααααΆααααααααααΆαα 3-5 αα»ααααΆαα α’αααααααΌαααααΆαα αα·αααααα ααΎααααΈαα»αα±αα ping αα·αααααααΆαα ααα»ααααααααΌααα·ααααααααααΆ α’ααΈαααΊααα αα·αααΌαα·ααΆααααααα·ααααααααααααααΆα α αΎααααααΆααα·αααΆα SLA αααααΆαα 5 αα»ααααΆα ααΆααΆααΆααααααΎαααΆααααα»αααΆααα 2+ αααααααΈα’ααααααααααααΆααααααααααΆαααααΆααααΆαα’ααα±αα ααααααα α»αα
αααααΆααααΎαααααΌααααα
αααααΌαααΌααααααααΈαααααΆαα’αα·αααααΈαααΈαααααααα’αα·αα·αααα
VPS α αααα»αααααΎ Wireguard ααΆααΆαααα‘αΎαααΏααααα»α αα·αααΆααααα½ααααα»αα αααα»αααααΆααααααααα’αα·αα·ααααα’ααααΎααΈαα»α
(
ααΆααααααα’ααααααααΆα αα·αααΆααααααΌαααααααα ααΆα αααα αααΆααα’αΆαααααα
ααΆβααΆαβαα·αβααΆαα α’αααβα’αΆα βαα·αβα ααΆα αααβα’ααΈαααΊαα·αβααΆααβα’ααβααΆαβαααβαααααα ααα»αααα ααΆαα αααΎαααααααΆααααΏαααααΆαααααΎααΆαααΆαα½αααΆαα·ααΆαααα»ααααα»αααΉααααα»ααααααΆαααααΆααααΈαααα αΆαααα ααΎαααΈααα αααααΌαααΆαααααα·ααααααΌααα ααΎ VPS ααΉααααααααΆαα αααΎαα
ααΌα αααα ααΎαααΉαααααΌααααα ααα ααΆα ααααα ααΆααααα ααααααααααααΌαααΆαααΆααΆαα α αΎαααααΎαααΎαααΆαα ααααΌαααΌααααααααΈαααααααΎαααΎαα αααααΈααΆα ααΆα ααα "αααααα" αααααα αααααΈαααααααα ααΆαα αααααααΎαααΆαααΆαααΎαααααααααααΆαααΆαααΌααααααααΈα
ααΎααααΈαααααααααα ααΆα ααα ααΎαααΉαααααΎαα·ααΈααΆα BGP αα·ααααααΆαααααΌααα ααΆαααααααΆαα αΆαααΆα αααΈ VPS ααααααΎααα ααΆααα’αα·αα·ααα α αΌααα BIRD ααΆαααα·α BGP αααααΆααα»αααΆα αα·αααΆααααα½ααααα»ααα½αα
IP
ααΆαα½αααΉαααΆααααααααΆααααα IP α’αααΈααααααααΆαααΊα αααΆαα: ααΎαααααΆαααααααααΆα IPs αααααααΌαααΆααααααααΆααααΆααα’ααααΆαα½α VPS α αααα αΆααΊααΆααΆααααααΆααααααα αα 600 ααΆαααα αααα»ααααααΈααα API αααααααααα·α α αΎαααΆαα αααΎααααα½αααααΊααΆ /32 hosts α α ααα½αααααΌααααα’αΆα α ααα‘αααααααααααΆαααΈαααααααααααα
ααΌα αααααα αααααααΎαααΆααααααΈααΆααααΌαααΆααααααα α α·ααααααααααα αΌαααααααααΆα / 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 α
ααΆααΆααΆαααααΆαααααααααΌααααααΆαα αααα»αααααΌ 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 RRs ααα»ααααααααααααΌαααΆαααααΎαααΎαααΈααΆαααααΎααα α αΎαα’αΆααααααΆα IPv4/IPv6 αααααααΌαααααΆααααΌαααΆααααααα ααααΈαα½αααΆ
- α’αΆααααααΆα IP ααααΌαααΆααα»ααααα»αααααΆαααααααΆααααΆαα½α TTL αααα’αΆα ααααααα ααΆααααααααααΆα α αΎαααααΌαααΆαααααααααααΆααα αα·ααααα½α BGP αααααΆαααααααα ααΆααααααααααΆααα’αα
- αα αααααα½αααΆαααΆαααααΎααααααα ααα’α»ααα IP αααααΆααααααΆαα»ααα½α α αΎα TTL ααααααΆααααΌαααΆαααααΎαα αα α»ααααααααΆα
- αααααΆααααΈ TTL αα»αααααα ααΆαα»ααααΌαααΆαααα ααααΈααααΆαααααααΆαα αα·αααΈααΆααααααΆα BGP
αα»αααΆαααααααα
- ααΆαα’αΆααααααΈαααα‘αΎααα·αααα SIGHUP
- ααΆααααααΆααααΆαααααααΆααα±αααααΈαααααΆααααααΆααΆαα½αααααα»αααααα dnstap-bgp ααΆαααα HTTP/JSON
- αααα½αααααΆαααααααΆαααα ααΎααΆα (αααα»αααΌαααααΆααα·αααααα BoltDB) ααΎααααΈααααΆαααΆαα·ααΆααααααΆα‘αΎααα·ααααααΆααααΈααΆαα αΆααααααΎαα‘αΎααα·α
- ααΆαβααΆααααβαααααΆααβααΆαβααααΆααβααααΌβαβαα βααα αβαααααβαβααααΆβαβαααααβααααΆ (α ααα»βα’αααΈβααΆαβααΆβααΆβααααΌαβααΆαβααΉαβααααΌαβααΆαβαα·αααααΆβααΆααααααβ)
- ααΆαααΆαααα IPv6
αααααααα:
- ααα IDN αα·αβααΆααβααααΌαβααΆαβααΆααααβαα βα‘αΎαβααα
- ααΆαααααα BGP αα½αα ααα½α
αααα»αααΆααααααΌα
ααααααααα
ααΌα
αααα α
αΌαβααΎαβα
αΆααβααααΎβαβαααα»αβαααΆαααΆαα»βααΆααβα’ααβααΆαα½αβααααΆα ααΆαααααα ααΎααα½αααααα½αααΆαα’αααΈαα½αααΌα
ααΆ topology αααααΆααααα
αααααα·ααααΆααααΆαααΆα αααα»ααα·αααΆα αααΆααααΈααααΆααααΆαα
- αααΆαααΈααααααααΆααααΆαααΈαααααααααΎααααααΆαααααααα ααΆααααααααααΆ DNS α αΎααααα½α DNS ααααααΌαααααααααΆαα VPN αααααα αααααΊα αΆαααΆα αααΎααααΈα±ααα’ααααααααααααΆαα·αα’αΆα ααααΎααΆαααααΆααα αΆαα DNS ααΎααααΈαααααααΆααα
- αα αααααΎαααα ααααα α’αα·αα·ααααααΎαααα½α DNS ααΌα ααΆ "α’αααΈααΆ IPs αααα xxx.org"
- unbound αααααααΆα xxx.org (α¬ααααΆα ααααΈααααΆαααααααΆαα) α αΎαααααΎααΆαααααΎααααα α’αα·αα·αα βxxx.org ααΆα IP ααααααβ αααα ααααααΆααααααααΆααΆαααα DNSTap
- dnstap-bgp αααααΆαα’αΆααααααΆαααΆααααααα αααα»α αααΈ ααΆαααα BGP ααααα·αααΎααααααα·ααα αααα»ααααααΈαα·α
- αααΈ ααααααααααΆαααααΌααα
ααΆαα IP ααΆαααααααΆαα½α
next-hop self
ααααααααααΆαααΈαααααα - αααα ααααΆαααααααααΆααααΈα’αα·αα·αααα IP ααΆαααααααααααΆααααααΌαααΌααααααααΈ
αα ααΎαααΆαααΈααα αααααΆααααααΌααα ααΆααααα ααααααααααααΌαααΆαααΆααΆαα αααα»αααααΎααΆααΆαααΆα ααααα‘αααα½ααα ααΆααααα»α BIRD α αΎαααΆαα·ααααααααααΆαα½α OS ααΆααααααααΆαααΆαα½αα‘αΎαα
αααααααΆααααααααΆααα»ααα·ααααα·αα½αα αααα αα SYN ααααΌαααΈα’αα·αα·αα αααααααααΆααΉαααΆααααααααΆααΎααααΈα αΆαα ααααΆααααα’ααααααααααααΆαααα»ααααα»αα ααααΌααα·αααααΌαααΆααααααΆαααααΆααααα α αΎααα ααΈααααααααΎαααΊα’αΆα ααααΎαα ααΆαα’αΆαααααααΎαααααααα’ααααααααααααΆααααΎααΆααααααααΆααα ααααα·αβααΎβααΆααβααααΆααβααβααααΎβα ααΆα αααβαα·αβααΆαβαααα αΆβαααβααα α αΎαααααα·αααΎααΆααααααΌααα·αααΆαα DPI ααααααα (ααΆαααααΉααααΈ) αααααααΆαααα·αααα’αΆα ααααΎαα ααΆαα
ααΆααα’αΆα αα αα½α ααααααα’αα·αα·αααα·αααααα’ααααΌαα ααα» DNS TTL αααα’αΆα αααααΆαα±αααααΆαααΈααααααααααΎααΆαα»ααΆααααΆαααα½αα ααα½αααΈααααΆαααααααΆαααααααα½αααααααΆαααα½αα±ααααΆααα½α Unbound α
αα αααα»αααΆαα’αα»αααα αα·αααΆααΈαα½α α¬ααΈααΈααααααααα αΆαααααΆαααααα»ααα ααα»ααααα ααααΆαααααα’αααα’αΆα αααααααα½αα
ααΆααααααααΌααααΆαααΈααα
ααΎααααΈααΆαααΆααααα½αααααΆααααααααα»αααΆαααααα
α αΌαααΎαααααααΆαααααΆαααΆαα»ααααΆαααα
αααΈα ααΈα ααΈ
ααΆαααααΎαααΆααααα·α BGP ααΈααα ααΎαααΆαααΈαααΌα ααααΆααΆααααα αΆααΆααΌαααααΆα: BIRD αα·αα ααααα‘αΎα BGP peering ααΆαα½α localhost (α¬α ααα»α αααααΆααααΌαααααΆαααΆαα½α) α ααΈααΆαααααΆαααααα»αα Googling αα·αααΆαα’αΆααααααΈαααα»ααααα½ααα·αααΆααα½ααα αα½αααα’αα’αΆαααΆαααααΊαααααΆαααΆααα ααΆα αααα ααβααΆβααΆαβαα·ααΈβαααα ααα»ααααβαααα»αβααβαα·αβααΎαα
α’αααα’αΆα ααΆααααααααα·α BGP αα½ααααααααα ααα»αααααααα»αα αΌαα α·ααα BIRD α αΎαααΆααααΌαααΆαααααΎαααααααΈααααααααααααα»α αααα»ααα·αα αααααααΎαα’αααααΆαααα
ααΌα ααααα αΎα αααα»αααΆαααΆαα dnstap-bgp αα ααΆααααα»α network namespace αααααααΌαααΆαααααΆαααα root ααΆαααα veth interfaceα ααΆααΌα ααΆααααααα½α α α»ααααα αααααααΆαααα αααα»α namespaces ααααααα αα α α»αααΈαα½αα ααΎααααα½αα’αΆααααααΆα IP α―ααα p2p ααααα·αα α½αααΈαααΆαααΈα ααΌα αααααα½αααΆα’αΆα ααΆα’αααΈααααΆαα αααααΊααΆααααααΆαααΌα ααααΆαααααααΎααΎααααΈα αΌαααααΎαααΆαααΆααααα»α αααα‘αΆαααααααΆααα’ααα Docker αα·ααα»αααααααααα
αααααΆααααΏααααααΆααααΌαααΆαααααα
α§ααΆα αααααααααΈααααααΆαααααααΎα namespace
#!/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 ΠΈ dont_αααααα α’αααα’αΆα
ααααΆαα IP αα·ααααααΆαα±αααααα α¬αα·αααααααα αααα»αααααΌαααΆαααΆα αααααΆααααα VPS αααααααα»αααΊαα
αααα»ααααααΈαα·απ
ααΏααα½αα±ααα’ααααααΎα ααΊααΆ RosKomSvoboda API ααΆααΆααααααΎααΆαα½αααααΆααααΆαα’αααααααΎααααΆαα 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
αα½αααααααΌαααΆαααααααααααααΆαααΆααα·αα αααΎα ααΌα ααααααααα·αααΎα’αααααΎαα’αααΈαα½ααααα’αΆα αααααα’ααΆα α αΌααα ααααΆα
ααΆαααα‘αΎαα’αα·αα·αα
αα ααΈααααααα»αααΉααααααα§ααΆα ααααααααΆαααααααααααΈαα»α ααα»αααααααα»αααααΈ 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
αα·α CDNs ααααααΆα
α αΎααααααΆαα±ααααΆαααΆααα·ααααααΆααΈααα’αΌααΆααα’ααααΉαααααααΆαα VPN αααα’αΆα ααααααΆαααααΆααααΌαα αααα ααααΆααΆααΆαααααααααα»αααΆαα ααααααααααΈαα domains-exclusions ααααααα·αααααααΆααΆαα RKN αααααΆαααααααα ααααααααΊααααΎαα α αΎααααααα½αααΆαα ααααααα
ααα ααααΈααααα·ααααΆα
αα·ααΈααΆααααααααααΆααα·αααααΆα’αα»ααααΆαα±ααα’αααααααααααΎαααααΆααααΆααααααααΆαααααα’ααααααααααααΆα’αα»αααααα αα α»ααααααα
ααΆααΌαα , dnstap-bgp α’αΆα ααααΌαααΆαααααΎαααααΆααααααααααααααααααααααααα·αααααΆααααααααααα ααΆα αααααααΌαααΆαααααΌαααΆααααααα’ααααΎααααααααα ααΌαα αα αΆαααΆαα αααα»αααααααααααΎα ααα ααααααα½αααΆααα’αΆα αααα½ααα ααΎα’αΆααααααΆα IP ααΌα ααααΆ (α§ααΆα ααααα ααΆαααααα Cloudflare αα½αα ααα½α) ααΌα αααααα·ααΈααΆααααααααααΆαααΆαααααΉαααααΌαααΆαα
ααα»ααααβαααααΆααβαααααΌαβααΆαβααβααΆαβαα·αβααβααΊβαααααααααΆααβα αΎαα
ααΆααααααα ααΆαααααααα½α ααΆαααααΎ - ααΌαααααΆαααα!
ααααα: www.habr.com