O le autu ua matua sasaina, ou te iloa. Mo se faʻataʻitaʻiga, o loʻo i ai se mea sili se tusiga, ae naʻo le vaega IP o le poloka poloka e mafaufauina iina. O le a matou fa'aopoopoina fo'i vaega.
Ona o le mea moni e poloka e le faamasinoga ma le RKN mea uma i le itu taumatau ma le agavale, ma o loʻo taumafai malosi le au tautua ina ia aua neʻi paʻu i lalo o sala tupe na tuʻuina atu e Revizorro, e fai lava si tele o tupe leiloa e fesoʻotaʻi mai le poloka. Ma i totonu o 'upega tafaʻilagi "tulafono" poloka e tele mea aoga (talofa, rutracker)
Ou te nofo i fafo atu o le pulega a le RKN, ae o oʻu matua, aiga ma uo sa nonofo i le fale. O lea na filifili ai e sau ma se auala faigofie mo tagata e mamao ese mai le IT e aloese mai le polokaina, sili atu e aunoa ma lo latou auai.
I lenei faʻamatalaga, o le a ou le faʻamatalaina le fesoʻotaʻiga autu mea i laasaga, ae o le a faʻamatalaina taʻiala lautele o le auala e mafai ai ona faʻatinoina lenei polokalame. O lea la o le malamalama i le auala e galue ai le fesoʻotaʻiga lautele ma i Linux aemaise lava e tatau ona i ai.
Ituaiga loka
Muamua, se'i toe faafou lo tatou manatua mea o loo poloka.
E tele ituaiga o loka i le XML le'i utaina mai le RKN:
IP
Igoa o le Igoa
URL
Mo le faʻafaigofie, matou te faʻaititia i latou i le lua: IP ma le vaega, ma o le a matou toso ese le vaega mai le poloka e le URL (sili atu, ua uma ona latou faia lenei mea mo i matou).
tagata lelei mai Roskomsvoboda iloa se matagofie API, lea e mafai ai ona tatou maua mea tatou te manaʻomia:
Ina ia faia lenei mea, matou te manaʻomia ni nai VPS laiti mai fafo, e sili atu i le le faʻatapulaʻaina o fefaʻatauaiga - e tele naua mo 3-5 tau. E te manaʻomia e ave i fafo i fafo ina ia le tele tele le ping, ae toe fai, ia manatua o le Initaneti ma le faʻafanua e le o taimi uma e fetaui. Ma talu ai e leai se SLA mo le 5 tala, e sili atu le ave 2+ fasi vaega mai kamupani eseese mo le faʻapalepale sese.
Le isi, matou te manaʻomia le faʻatulagaina o se alalaupapa faʻailoga mai le tagata faʻasalalau i le VPS. Ou te faʻaaogaina Wireguard e sili ona vave ma faigofie ona faʻatutuina. E iai foʻi aʻu tagata faʻatau e faʻavae i luga o Linux (APU2 poʻo se mea i OpenWRT). I le tulaga o nisi Mikrotik / Cisco, e mafai ona e faʻaogaina faʻamaumauga o loʻo maua ia i latou e pei o OpenVPN ma GRE-over-IPSEC.
Fa'ailoaina ma le toe fa'atonuina o felauaiga o tului
E mafai, ioe, tape uma fefaʻatauaiga i luga ole Initaneti i atunuu i fafo. Ae, e foliga mai, o le saoasaoa o le galue ma mea i totonu o le lotoifale o le a matua pagatia mai lenei mea. Ma le isi, o le bandwidth manaʻomia ile VPS o le a sili atu le maualuga.
O le mea lea, tatou te manaʻomia le faʻavasegaina o fefaʻatauaiga i nofoaga poloka ma filifili faʻatonu i le alavai. E tusa lava pe o'o atu i ai nisi o "fa'aopoopo" feoaiga, e sili atu nai lo le aveina o mea uma i totonu o le alavai.
Mo le puleaina o fefaʻatauaiga, matou te faʻaogaina le BGP protocol ma faʻasalalau auala i fesoʻotaʻiga talafeagai mai a matou VPS i tagata faʻatau. Tatou ave BIRD o se tasi o daemons BGP sili ona aoga ma faigofie.
IP
Faatasi ai ma le polokaina e le IP, e manino mea uma: matou te faʻasalalau uma IP poloka ma VPS. O le faʻafitauli o loʻo i ai pe a ma le 600 afe subnets i le lisi o loʻo toe foʻi mai le API, ma o le toʻatele oi latou o / 32 'au. O lenei numera o auala e mafai ona fenumiai ai tagata faigaluega vaivai.
O le mea lea, pe a faʻagasolo le lisi, na filifili e aotele i luga o le upega tafailagi / 24 pe afai e 2 pe sili atu 'au. O lea, o le numera o auala na faʻaititia i le ~ 100 afe. O le tala mo lenei mea o le a mulimuli mai.
Domains
E sili atu ona lavelave ma e tele auala. Mo se faʻataʻitaʻiga, e mafai ona e faʻapipiʻi se Squid manino i luga o router taʻitasi ma fai HTTP interception iina ma vaʻavaʻai i le TLS faʻatalofa ina ia maua ai le URL talosaga i le mataupu muamua ma le vaega mai le SNI i le lona lua.
Ae ona o ituaiga uma o TLS1.3 + eSNI fou, o le suʻesuʻega HTTPS ua faʻaitiitia ma faʻaitiitia le moni i aso uma. Ioe, ma o atina'e i le itu o tagata o tausia ua atili lavelave - e tatau ona e fa'aogaina le OpenWRT.
O le mea lea, na ou filifili ai e uia le ala o le faʻalavelaveina o tali i fesili DNS. O iinei foi, soʻo se DNS-over-TLS / HTTPS e amata ona faʻafefe i luga o lou ulu, ae mafai (mo le taimi nei) ona pulea lenei vaega i luga o le kalani - pe faʻamalo pe faʻaaoga lau lava server mo DoT / DoH.
E faʻafefea ona faʻafefe DNS?
O iinei foi, atonu e tele auala.
Fa'alavelave o fefa'atauaiga DNS e ala i le PCAP po'o le NFLOG
O nei auala uma e lua o le faʻaogaina o loʻo faʻatinoina i le aoga Sidmat. Ae e leʻi lagolagoina mo se taimi umi ma o le faʻatinoga e matua tuai lava, o lea e manaʻomia ai lava ona e tusia se fusi mo ia.
Iloiloga o ogalaau DNS server
Ae paga lea, e le mafai e le au faʻasalalau ia te aʻu ona tusia tali, ae naʻo talosaga. I le mataupu faavae, e talafeagai lenei mea, talu ai, e le pei o talosaga, o tali ei ai se fausaga faigata ma e faigata ona tusia i latou i tusitusiga.
DNSTap
O le mea e lelei ai, o le toʻatele oi latou ua uma ona lagolagoina DNSTap mo lenei faʻamoemoe.
O le a le DNSTap?
O se fa'afeagaiga-server e fa'avae i luga ole Protocol Buffers ma Frame Streams mo le fesiitaiga mai le DNS server i le aoina o fesili ma tali a le DNS. O le mea moni, o le DNS server e tuʻuina atu fesili ma tali metadata (ituaiga o feʻau, tagata faʻatau / server IP, ma isi) faʻatasi ai ma feʻau DNS atoatoa i le (binary) fomu lea e galulue ai ma i latou i luga o le upega tafailagi.
E taua le malamalama o le DNSTap paradigm, o le DNS server o loʻo galue o se tagata faʻatau ma le tagata aoina e galue o se server. O lona uiga, e fesoʻotaʻi le DNS server i le aoina, ae le o le isi itu.
Ole aso nei ole DNSTap o lo'o lagolagoina ile DNS ta'uta'ua uma. Ae, mo se faʻataʻitaʻiga, BIND i le tele o tufatufaga (pei o le Ubuntu LTS) e masani ona fausia mo nisi mafuaʻaga e aunoa ma lana lagolago. Ia aua nei o tatou fa'alavelave i le toe fa'aopoopoina, ae ave se fa'amama mama ma vave - Unbound.
E faʻafefea ona puʻeina DNSTap?
o loo i ai nisinumera o CLI aoga mo le galulue faatasi ma se vaitafe o DNSTap mea tutupu, ae e le talafeagai mo le foia o tatou faafitauli. O le mea lea, na ou filifili ai e fatuina laʻu lava uila e faia mea uma e manaʻomia: dnstap-bgp
Galuega algorithm:
A faʻalauiloa, e utaina se lisi o vaega mai se faila faila, faʻafefe (habr.com -> com.habr), e le aofia ai laina malepelepe, kopi ma subdomains (e pei o le lisi o loʻo i ai le habr.com ma www.habr.com, naʻo le muamua o le a utaina) ma fausia se prefix laau mo se sailiga vave i lenei lisi
O le galue o se DNSTap server, e faʻatali mo se fesoʻotaʻiga mai se DNS server. I le faʻavae, e lagolagoina uma UNIX ma TCP sockets, ae o le DNS servers ou te iloa e mafai ona faʻaogaina UNIX sockets.
O pepa DNSTap o loʻo ulufale mai e muamua faʻaumatia i totonu o se fausaga Protobuf, ona sosoo ai lea ma le binary DNS message lava ia, o loʻo i totonu o se tasi o fanua Protobuf, ua faʻasalalau i le maualuga o faamaumauga DNS RR.
E siaki pe o loʻo i totonu o le lisi o loʻo faʻapipiʻiina le talimalo o loʻo talosagaina (poʻo lona matua matua), a leai, e le amanaʻia le tali.
Na'o A/AAAA/CNAME RRs e filifilia mai le tali ma o tuatusi IPv4/IPv6 talafeagai e maua mai ia i latou.
O tuatusi IP o lo'o teuina ile TTL e mafai ona fa'aogaina ma fa'asalalau i ta'aloga BGP uma
A maua se tali e fa'asino i se IP ua uma ona fa'aogaina, ua fa'afouina lona TTL
A maeʻa le TTL, e aveese le mea mai le faʻaoga ma mai faʻasalalauga BGP
Galuega fa'aopoopo:
Toe faitau le lisi o domains e SIGHUP
Taofi le cache i le ogatasi ma isi taimi dnstap-bgp ala HTTP/JSON
Fa'alua le cache i luga o le disk (i le BoltDB database) e toe fa'afo'i ai mea i totonu pe a uma le toe amata
Lagolago mo le fesuiaiga i se isi igoa ole upegatafa'ilagi (pe aisea e mana'omia ai lenei mea o le a faamatalaina i lalo)
IPv6 lagolago
Tapulaʻa:
E le'o lagolagoina i le taimi nei vaega ole IDN
E itiiti fa'atulagaga BGP
Sa ou aoina RPM ma DEB afifi mo le faʻapipiʻiina faigofie. E tatau ona galue i OSes lata mai uma ma systemd. e leai so latou fa'alagolago.
Fuafuaga
O lea la, tatou amata faʻapipiʻi uma vaega faʻatasi. O se taunuuga, e tatau ona tatou maua se mea e pei o lenei topology network:
O le manatu o le galuega, ou te manatu, e manino mai le ata:
O lo'o fa'atulaga e le kalani la matou 'au'aunaga e pei o le DNS, ma e tatau fo'i ona fa'aoga fesili DNS i luga ole VPN. E manaʻomia lenei mea ina ia le mafai e le tagata tuʻuina atu ona faʻaogaina le faʻalavelave DNS e poloka ai.
A tatalaina le saite, e auina atu e le kalani se fesili DNS e pei o le "o a IP o le xxx.org"
Unbound fofo xxx.org (pe aveese mai le cache) ma auina atu se tali i le kalani "xxx.org ei ai lea ma lea IP", fa'aluaina fa'atasi e ala ile DNSTap
dnstap-bgp fa'ailoa atu nei tuatusi i TUSI e ala i le BGP pe afai o loʻo i luga o le lisi poloka le vaega
TUSI fa'asalalau se auala i nei IPs ma next-hop self tagata fa'aola
O isi afifi mai le kalani i nei IP e alu i le alavai
I luga o le 'auʻaunaga, mo auala i nofoaga poloka, ou te faʻaogaina se laulau eseʻese i totonu ole BIRD ma e le fesoʻotaʻi ma le OS i soʻo se auala.
O lenei polokalame e iai se fa'aletonu: o le pepa SYN muamua mai le kalani, e foliga mai, o le a maua le taimi e alu ese ai e ala i le fale tausi. e lei faailoaina vave mai le auala. Ma o filifiliga iinei e mafai ona faʻatatau i le auala e faia ai e le kamupani le poloka. Afai na o le pau lava o taavale, e leai se faafitauli. Ma afai na te toe faʻafeiloaʻi i nisi DPI, ona (faʻapitoa) faʻapitoa faʻapitoa e mafai.
E mafai fo'i ona le fa'aaloalo tagata fa'atau i vavega DNS TTL, lea e mafai ona mafua ai ona fa'aoga e le kalani ni fa'amatalaga tuai mai lona fa'aoga pala nai lo le fesili i le Unbound.
I le faʻataʻitaʻiga, e le o le muamua poʻo le lona lua na mafua ai ni faʻafitauli mo aʻu, ae atonu e eseese lau maila.
Fa'atonu a le 'au'aunaga
Mo le faigofie o le taʻavale, sa ou tusia matafaioi mo Ansible. E mafai ona faʻatulagaina uma 'auʻaunaga ma tagata faʻatau e faʻavae i luga o Linux (faʻatulagaina mo faʻasalalauga faʻavae). O faʻatulagaga uma e matua manino lava ma faʻapipiʻi i totonu inventory.yml. O lenei matafaioi ua tipi mai laʻu tusi taʻaloga tele, o lea e ono iai ni mea sese - toso talosaga fa'afeiloa'i 🙂
Sei o tatou agai atu i vaega autu.
BGP
O le taʻavaleina o BGP daemons e lua i luga o le talimalo e tasi e iai se faʻafitauli faʻapitoa: E le manaʻo le BIRD e faʻapipiʻi le BGP peering ma le localhost (poʻo soʻo se faʻaoga faʻapitonuʻu). Mai le upu lava. Googling ma faitau meli-lisi e leʻi fesoasoani, latou te fai mai o lenei mea na fuafuaina. Atonu e i ai se auala, ae ou te lei mauaina.
E mafai ona e faʻataʻitaʻiina se isi BGP daemon, ae ou te fiafia i le BIRD ma o loʻo faʻaaogaina e aʻu i soʻo se mea, ou te le manaʻo e faia ni faʻalapotopotoga.
O le mea lea, na ou natia ai le dnstap-bgp i totonu o le upega tafaʻilagi, lea e fesoʻotaʻi i le aʻa e ala i le veth interface: e pei o se paipa, o pito o loʻo pipii i igoa eseese. I luga o nei pito taʻitasi, matou te tautau tuatusi p2p IP tumaoti e le sili atu i tua atu o le talimalo, ina ia mafai ona avea ma soʻo se mea. O le masini lava lea e tasi e fa'aogaina e fa'aoga ai faiga i totonu alofagia e tagata uma Docker ma isi koneteina.
O lea na tusia ai tusitusiga ma o le gaioiga ua uma ona faʻamatalaina i luga mo le tosoina o oe lava e le lauulu i se isi igoa avanoa na faʻaopoopoina i le dnstap-bgp. Ona o lenei mea, e tatau ona faʻatautaia e pei o aʻa pe tuʻuina atu i le CAP_SYS_ADMIN binary e ala i le setcap command.
Fa'ata'ita'iga fa'ata'ita'iga mo le faia o igoa avanoa
#!/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
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
Ona o le faaletonu, i le Ubuntu, o le Unbound binary o loʻo faʻapipiʻiina e le AppArmor profile, lea e faʻasaina ai le fesoʻotaʻi i ituaiga uma o DNSTap sockets. E mafai ona e tapeina lenei talaaga, pe tape:
Atonu e tatau ona fa'aopoopo i le tusi ta'aloga. E lelei, ioe, e faʻasaʻo le talaaga ma tuʻuina atu aia tatau, ae sa ou paie.
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
La'uina ma fa'agaioiga lisi
Fa'amatalaga mo le la'uina ma le fa'agaioiina o se lisi o tuatusi IP
Na te siiina mai le lisi, faʻauma i le prefix pfx. le aua_faaopoopo и 'aua_fa'otooto e mafai ona e taʻu atu i IP ma fesoʻotaʻiga e faaseʻe pe leai se aotelega. Sa ou manaomia. o le subnet o laʻu VPS sa i le poloka poloka 🙂
O le mea malie o le RosKomSvoboda API poloka talosaga i le tagata faʻaoga le Python tagata faʻaoga. E foliga mai na maua e le script-kiddy. O le mea lea, matou te suia ia Ognelis.
I le taimi nei, e naʻo le IPv4 e galue. o le vaega o le IPv6 e laʻititi, ae o le a faigofie ona faʻaleleia. Se'i vagana ua e fa'aogaina foi manu6.
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)
Mau e faafou
Ou te tamoe i luga o le pale i le tasi i le aso, atonu e aoga le tosoina i le 4 itula. O le mea lea, i lo'u manatu, o le vaitaimi fa'afouina lea e mana'omia e le RKN mai i latou e tu'uina atu. E le gata i lea, o loʻo i ai isi a latou poloka faʻanatinati, lea e ono vave taunuu.
Faia mea nei:
Fa'asolo le tusitusiga muamua ma fa'afou le lisi o auala (rkn_routes.list) mo MANU
Toe uta manumanu
Fa'afouga ma fa'amamā le lisi o fa'auiga mo le dnstap-bgp
Toe uta 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
Na tusia e aunoa ma se mafaufau tele, o lea afai e te vaʻai i se mea e mafai ona faʻaleleia - alu i ai.
Seti tagata fa'atau
O iinei o le a ou tuʻuina atu ai faʻataʻitaʻiga mo Linux routers, ae i le tulaga o Mikrotik / Cisco e tatau ona sili atu ona faigofie.
Muamua, matou seti BIRD:
manu.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;
}
O le mea lea, o le a matou faʻamaopoopoina auala na maua mai le BGP faʻatasi ai ma le kernel routing table numera 222.
A maeʻa lena, ua lava le fai atu i le fatu e vaʻai i lenei ipu aʻo leʻi vaʻai i le faaletonu:
# 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
O mea uma lava, e tumau pea le faʻatulagaina o le DHCP i luga o le router e tufatufa atu le tuatusi IP tunnel a le server e pei o DNS, ma ua saunia le polokalame.
vaivaiga
Faatasi ai ma le algorithm o loʻo i ai nei mo le fausiaina ma le faʻatulagaina o le lisi o vaega, e aofia ai, faatasi ai ma isi mea, youtube.com ma ona CDN.
Ma o lenei mea e taʻitaʻia ai le mea moni o vitio uma o le a alu i le VPN, lea e mafai ona faʻapipiʻi le auala atoa. Masalo e aoga le tuʻufaʻatasia o se lisi o taʻaloga taʻutaʻua-tuuesea e poloka ai le RKN mo le taimi nei, e manifinifi le pu. Ma fa'ase'e pe a fa'asoa.
iʻuga
O le auala faʻamatalaina e mafai ai ona e faʻaogaina toetoe lava o soʻo se poloka o loʻo faʻatinoina nei e le auʻaunaga.
Ae, dnstap-bgp e mafai ona faʻaaogaina mo soʻo se isi lava faʻamoemoega e manaʻomia ai se tulaga o le faʻatonutonuina o feoaiga e faʻavae i luga ole igoa ole igoa. Tau lava ia manatua i lo tatou taimi, e afe nofoaga e mafai ona tautau i luga o le tuatusi IP lava e tasi (i tua atu o Cloudflare, mo se faʻataʻitaʻiga), o lea o lenei metotia e maualalo le saʻo.