ProHoster > Blog > Uprava > Nastavitev BGP za obhod blokade ali "Kako sem se nehal bati in sem se zaljubil v RKN"
Nastavitev BGP za obhod blokade ali "Kako sem se nehal bati in sem se zaljubil v RKN"
No, v redu, o "ljubil" je pretiravanje. Namesto tega "je lahko sobival z."
Kot vsi veste, od 16. aprila 2018 Roskomnadzor blokira dostop do virov na internetu v izjemno širokem obsegu in dodaja »Enotni register domenskih imen, indekse strani spletnih mest na internetu in omrežne naslove, ki omogočajo identifikacijo spletnih mest. na internetu,« ki vsebuje informacije, katerih distribucija je v Ruski federaciji prepovedana« (v besedilu - samo register) z /10 včasih. Zaradi tega trpijo državljani Ruske federacije in podjetja, ki so izgubili dostop do popolnoma zakonitih virov, ki jih potrebujejo.
Potem ko sem v komentarjih k enemu od člankov na Habréju rekel, da sem pripravljen pomagati žrtvam pri vzpostavitvi obvodne sheme, je k meni prišlo več ljudi s prošnjo za takšno pomoč. Ko jim je vse uspelo, je eden od njih priporočil opis tehnike v članku. Po premisleku sem se odločil, da prekinem molk na strani in poskusim enkrat napisati nekaj vmesnega med projektom in Facebook objavo, tj. habrapost. Rezultat je pred vami.
Zavrnitev odgovornosti
Ker ni zelo zakonito objavljati načinov za izogibanje blokiranju dostopa do informacij, prepovedanih na ozemlju Ruske federacije, bo namen tega članka govoriti o metodi, ki vam omogoča avtomatizirano pridobivanje dostopa do virov, ki so dovoljeni na ozemlju Ruske federacije, vendar zaradi dejanj nekoga drugega niso neposredno dostopni prek vašega ponudnika. In dostop do drugih virov, pridobljen kot posledica dejanj iz članka, je žalosten stranski učinek in nikakor ni namen članka.
Tudi, ker sem po poklicu, poklicu in življenjski poti predvsem mrežni arhitekt, programiranje in Linux nista moja močna točka. Zato je seveda mogoče bolje napisati skripte, globlje obdelati varnostna vprašanja v VPS itd. Vaše predloge bomo sprejeli s hvaležnostjo, če bodo dovolj podrobni - z veseljem jih bom dodal besedilu članka.
TL; DR
Avtomatiziramo dostop do virov prek vašega obstoječega tunela z uporabo kopije registra in protokola BGP. Cilj je odstraniti ves promet, naslovljen na blokirane vire, v tunel. Minimum razlag, večinoma navodila po korakih.
Kaj potrebujete za to?
Žal ta objava ni za vsakogar. Če želite uporabiti to tehniko, boste morali združiti več elementov:
Strežnik linux morate imeti nekje zunaj polja za blokiranje. Ali pa vsaj želja po takem strežniku - na srečo zdaj stane že od 9 $/leto, lahko pa še manj. Metoda je primerna tudi, če imate ločen tunel VPN, potem se lahko strežnik nahaja znotraj blokirnega polja.
Vaš usmerjevalnik bi moral biti dovolj pameten, da bi lahko
kateri koli odjemalec VPN, ki vam je všeč (raje imam OpenVPN, lahko pa je PPTP, L2TP, GRE+IPSec ali katera koli druga možnost, ki ustvari tunelski vmesnik);
protokol BGPv4. Kar pomeni, da je za SOHO lahko Mikrotik ali kateri koli router z OpenWRT/LEDE/podobnim custom firmwareom, ki omogoča namestitev Quagge ali Birda. Tudi uporaba usmerjevalnika za osebni računalnik ni prepovedana. V primeru podjetja poiščite podporo za BGP v dokumentaciji za vaš mejni usmerjevalnik.
Morali bi razumeti uporabo Linuxa in omrežne tehnologije, vključno s protokolom BGP. Ali vsaj želite dobiti takšno idejo. Ker tokrat nisem pripravljen objeti neizmernosti, boste morali nekatere vidike, ki so vam nerazumljivi, preučiti sami. Vendar bom seveda odgovoril na konkretna vprašanja v komentarjih in verjetno ne bom edini, ki bom odgovarjal, zato ne oklevajte in vprašajte.
Delovne mape - ker delamo kot root, bo večina vsega v domači mapi root. Oziroma:
/root/blacklist - delovna mapa s skriptom za prevajanje
/root/zi - kopija registra iz githuba
/etc/bird - standardna mapa za nastavitve storitve ptic
Zunanji naslov IP VPS z usmerjevalnim strežnikom in zaključno točko tunela je 194.165.22.146, ASN 64998; zunanji IP naslov usmerjevalnika - 81.177.103.94, ASN 64999
Naslova IP znotraj tunela sta 172.30.1.1 oziroma 172.30.1.2.
Seveda lahko uporabite tudi druge usmerjevalnike, operacijske sisteme in programske izdelke ter prilagodite rešitev njihovi logiki.
Na kratko - logika rešitve
Pripravljalne dejavnosti
Pridobivanje VPS
Dvig tunela od usmerjevalnika do VPS
Prejmemo in redno posodabljamo kopijo registra
Namestitev in konfiguracija storitve usmerjanja
Ustvarimo seznam statičnih poti za storitev usmerjanja na podlagi registra
Usmerjevalnik povežemo s storitvijo in konfiguriramo pošiljanje celotnega prometa skozi tunel.
Dejanska rešitev
Pripravljalne dejavnosti
Na internetu je veliko storitev, ki nudijo VPS po izjemno ugodnih cenah. Doslej sem našel in uporabljam možnost za 9 $/leto, a tudi če se ne trudite preveč, je na vsakem vogalu veliko možnosti za 1E/mesec. Vprašanje izbire VPS je daleč zunaj obsega tega članka, zato, če kdo ne razume česa o tem, vprašajte v komentarjih.
Če uporabljate VPS ne samo za storitev usmerjanja, ampak tudi za zaključek tunela na njem, morate dvigniti ta predor in skoraj zagotovo zanj konfigurirati NAT. Na internetu je veliko navodil za ta dejanja, tukaj jih ne bom ponavljal. Glavna zahteva za tak predor je, da mora ustvariti ločen vmesnik na vašem usmerjevalniku, ki podpira predor proti VPS. Večina uporabljenih tehnologij VPN izpolnjuje to zahtevo - na primer OpenVPN v načinu tun je popoln.
Pridobivanje kopije registra
Kot je rekel Jabrail: "Tisti, ki nas ovira, nam bo pomagal." Ker RKN ustvarja register prepovedanih virov, bi bil greh, če tega registra ne bi uporabili za rešitev našega problema. Od githuba bomo prejeli kopijo registra.
Gremo na vaš strežnik Linux, pademo v korenski kontekst (sudo su —) in namestite git, če še ni nameščen.
apt install git
Pojdite v domači imenik in izvlecite kopijo registra.
cd ~ && git clone --depth=1 https://github.com/zapret-info/z-i
Nastavili smo posodobitev crona (jaz jo naredim enkrat na 20 minut, lahko pa izberete poljuben interval, ki vas zanima). Da bi to naredili, zaženemo crontab -e in ji dodajte naslednjo vrstico:
*/20 * * * * cd ~/z-i && git pull && git gc
Povezujemo kljuko, ki bo po posodobitvi registra ustvarila datoteke za storitev usmerjanja. Če želite to narediti, ustvarite datoteko /root/zi/.git/hooks/post-merge z naslednjo vsebino:
Malo kasneje bomo ustvarili skript makebgp, na katerega se kavelj nanaša.
Namestitev in konfiguracija storitve usmerjanja
Namestite ptico. Na žalost je različica bird, ki je trenutno objavljena v repozitorijih Ubuntu, po svežini primerljiva z iztrebki Archeopteryxa, zato moramo v sistem najprej dodati uradni PPA razvijalcev programske opreme.
Po tem takoj onemogočimo ptico za IPv6 - v tej namestitvi je ne bomo potrebovali.
systemctl stop bird6
systemctl disable bird6
Spodaj je minimalistična konfiguracijska datoteka storitve za ptice (/etc/bird/bird.conf), kar je za nas povsem dovolj (in še enkrat vas spomnim, da nihče ne prepoveduje razvijanja in prilagajanja ideje svojim potrebam)
log syslog all;
router id 172.30.1.1;
protocol kernel {
scan time 60;
import none;
# export all; # Actually insert routes into the kernel routing table
}
protocol device {
scan time 60;
}
protocol direct {
interface "venet*", "tun*"; # Restrict network interfaces it works with
}
protocol static static_bgp {
import all;
include "pfxlist.txt";
#include "iplist.txt";
}
protocol bgp OurRouter {
description "Our Router";
neighbor 81.177.103.94 as 64999;
import none;
export where proto = "static_bgp";
local as 64998;
passive off;
multihop;
}
id usmerjevalnika - identifikator usmerjevalnika, ki je vizualno videti kot naslov IPv4, vendar ni eden. V našem primeru je to lahko katera koli 32-bitna številka v formatu naslova IPv4, vendar je dobro, da navedete točno naslov IPv4 vaše naprave (v tem primeru VPS).
protocol direct določa, kateri vmesniki bodo delovali s postopkom usmerjanja. Primer podaja nekaj primerov imen, lahko dodate še druga. Vrstico lahko preprosto izbrišete; v tem primeru bo strežnik poslušal vse razpoložljive vmesnike z naslovom IPv4.
protocol static je naša čarovnija, ki naloži sezname predpon in naslovov IP (ki so dejansko predpone /32, seveda) iz datotek za naknadno objavo. Od kod izvirajo ti seznami, bomo razpravljali v nadaljevanju. Upoštevajte, da je nalaganje naslovov IP privzeto komentirano, razlog za to je velik obseg nalaganja. Za primerjavo, v času pisanja je na seznamu predpon 78 vrstic, na seznamu naslovov IP pa 85898. Močno priporočam, da začnete in odpravljate napake samo na seznamu predpon in ali omogočite nalaganje IP v prihodnost je na vas, da se odločite po eksperimentiranju z usmerjevalnikom. Vsak od njih ne more zlahka prebaviti 85 tisoč vnosov v usmerjevalni tabeli.
Protocol bgp dejansko vzpostavi bgp peering z vašim usmerjevalnikom. IP naslov je naslov zunanjega vmesnika usmerjevalnika (oz. naslov tunelskega vmesnika na strani usmerjevalnika), 64998 in 64999 sta številki avtonomnih sistemov. V tem primeru jih je mogoče dodeliti v obliki poljubnih 16-bitnih številk, vendar je dobra praksa, da uporabite številke AS iz zasebnega obsega, ki ga določa RFC6996 – vključno z 64512-65534 (obstaja oblika za 32-bitne ASN, ampak v našem primeru je to vsekakor pretirano). Opisana konfiguracija uporablja peering eBGP, pri katerem morata biti številki avtonomnih sistemov storitve usmerjanja in usmerjevalnika različni.
Kot lahko vidite, mora storitev poznati naslov IP usmerjevalnika, tako da, če imate dinamičen ali nepreusmerljiv zasebni (RFC1918) ali skupni (RFC6598) naslov, nimate možnosti dvigniti peering na zunanjem vmesnik, vendar bo storitev še vedno delovala znotraj tunela.
Prav tako je povsem jasno, da lahko iz ene storitve zagotovite poti do več različnih usmerjevalnikov - samo podvojite nastavitve zanje tako, da kopirate razdelek protokola bgp in spremenite sosedov IP naslov. Zato so v primeru prikazane nastavitve za kukanje izven tunela, kot najbolj univerzalne. Enostavno jih je odstraniti v tunel tako, da ustrezno spremenite naslove IP v nastavitvah.
Obdelava registra za storitev usmerjanja
Zdaj moramo dejansko ustvariti sezname predpon in naslovov IP, ki so bili omenjeni v statiki protokola v prejšnji fazi. Če želite to narediti, vzamemo datoteko registra in iz nje naredimo datoteke, ki jih potrebujemo, z uporabo naslednjega skripta, ki je vstavljen /root/črni seznam/makebgp
Zdaj ga lahko zaženete ročno in opazujete videz datotek v /etc/bird.
Najverjetneje vam ptica v tem trenutku ne dela, ker ste jo v prejšnji fazi pozvali, naj poišče datoteke, ki še ne obstajajo. Zato ga zaženemo in preverimo, ali se je začel:
systemctl start bird
birdc show route
Izhod drugega ukaza bi moral pokazati približno 80 zapisov (to je zaenkrat, ko pa nastavite, bo vse odvisno od vneme RKN pri blokiranju omrežij) približno takole:
bo prikazal status protokolov znotraj storitve. Dokler usmerjevalnika ne konfigurirate (glej naslednjo točko), bo protokol OurRouter v začetnem stanju (Connect ali Active phase), po uspešni povezavi pa preide v stanje up (Established phase). Na primer, v mojem sistemu je rezultat tega ukaza videti takole:
BIRD 1.6.3 ready.
name proto table state since info
kernel1 Kernel master up 2018-04-19
device1 Device master up 2018-04-19
static_bgp Static master up 2018-04-19
direct1 Direct master up 2018-04-19
RXXXXXx1 BGP master up 13:10:22 Established
RXXXXXx2 BGP master up 2018-04-24 Established
RXXXXXx3 BGP master start 2018-04-22 Connect Socket: Connection timed out
RXXXXXx4 BGP master up 2018-04-24 Established
RXXXXXx5 BGP master start 2018-04-24 Passive
Povezovanje usmerjevalnika
Verjetno so vsi že naveličani branja te krpice, a bodite pogumni – konec je blizu. Poleg tega v tem razdelku ne bom mogel dati navodil po korakih - za vsakega proizvajalca bo drugače.
Lahko pa vam pokažem nekaj primerov. Glavna logika je dvigniti BGP peering in dodeliti nexthop vsem prejetim predponam, ki kažejo na naš tunel (če moramo poslati promet prek vmesnika p2p) ali IP naslov nexthop, če bo promet šel v ethernet).
Na primer na Mikrotiku v RouterOS je to rešeno takole
router bgp 64999
neighbor 194.165.22.146 remote-as 64998
neighbor 194.165.22.146 route-map BGP_NEXT_HOP in
neighbor 194.165.22.146 ebgp-multihop 250
!
route-map BGP_NEXT_HOP permit 10
set ip next-hop 172.30.1.1
Če se isti tunel uporablja za enakovredno BGP in za prenos koristnega prometa, ni treba nastaviti nexthop; pravilno bo nastavljen z uporabo protokola. Toda če ga nastavite ročno, tudi to ne bo poslabšalo.
Na drugih platformah boste morali sami ugotoviti konfiguracijo, če pa imate kakršne koli težave, napišite v komentarje, poskušal vam bom pomagati.
Ko se je vaša seja BGP začela, so poti do velikih omrežij prispele in nameščene v tabeli, je promet stekel do naslovov z njih in je sreča blizu, se lahko vrnete v storitev ptic in poskusite odkomentirati tamkajšnji vnos, ki povezuje seznam naslovov IP, izvedite za tem
systemctl reload bird
in poglejte, kako je vaš usmerjevalnik prenesel teh 85 tisoč poti. Bodite pripravljeni, da se odklopite in razmislite, kaj storiti s tem :)
Skupno
Čisto teoretično, po zaključku zgoraj opisanih korakov, imate zdaj storitev, ki samodejno preusmeri promet na naslove IP, prepovedane v Ruski federaciji, mimo sistema filtriranja.
Seveda se da izboljšati. Na primer, z rešitvami perl ali python je zelo enostavno povzeti seznam naslovov IP. Preprost skript Perl, ki to naredi z uporabo Net::CIDR::Lite, spremeni 85 tisoč predpon v 60 (ne tisoč), vendar seveda pokriva veliko večji obseg naslovov, kot je blokiran.
Ker storitev deluje na tretji ravni modela ISO/OSI, vas ne bo rešila pred blokiranjem spletnega mesta/strani, če se odpravi na napačen naslov, kot je zapisan v registru. Toda skupaj z registrom iz githuba prispe datoteka nxdomain.txt, ki se z nekaj potezami skripte zlahka spremeni v vir naslovov za na primer vtičnik SwitchyOmega v Chromu.
Omeniti je treba tudi, da rešitev zahteva dodatno dodelavo, če niste le uporabnik interneta, ampak tudi sami objavljate nekatere vire (na tej povezavi teče npr. spletna stran ali poštni strežnik). S sredstvi usmerjevalnika je potrebno strogo vezati odhodni promet te storitve na vaš javni naslov, sicer boste izgubili povezljivost s tistimi viri, ki jih pokriva seznam predpon, ki jih prejme usmerjevalnik.
Če imate kakršna koli vprašanja, vprašajte, pripravljen sem odgovoriti.
UPD. Hvala vam navion и TerAnYu za parametre za git, ki omogočajo zmanjšanje količine prenosov.
UPD2. Kolegi, očitno sem naredil napako, ker v članek nisem dodal navodil za nastavitev tunela med VPS in routerjem. Ob tem se odpira veliko vprašanj.
Za vsak slučaj bom še enkrat omenil, da ste pred začetkom tega vodnika že konfigurirali tunel VPN v smeri, ki jo potrebujete, in preverili njegovo funkcionalnost (na primer tako, da ste tja preusmerili promet privzeto ali statično). Če te faze še niste zaključili, ni smiselno slediti korakom v članku. O tem še nimam svojega besedila, toda če v Googlu vnesete »nastavitev strežnika OpenVPN« skupaj z imenom operacijskega sistema, nameščenega na VPS, in »nastavitev odjemalca OpenVPN« z imenom vašega usmerjevalnika , boste najverjetneje našli številne članke o tej temi, tudi na Habréju.
UPD3. Nežrtvovan Napisal sem kodo, ki spremeni dump.csv v nastalo datoteko za ptico z neobveznim povzemanjem naslovov IP. Zato lahko razdelek »Obdelava registra za storitev usmerjanja« nadomestite s klicem njegovega programa. https://habr.com/post/354282/#comment_10782712
UPD4. Malo dela na napakah (nisem jih dodal v besedilo):
1) namesto tega systemctl znova naloži ptico je smiselno uporabiti ukaz konfiguracija birdc.
2) v usmerjevalniku Mikrotik, namesto da bi nexthop spremenili v IP druge strani tunela /routing filter add action=accept chain=dynamic-in protocol=bgp comment=»Set nexthop» set-in-nexthop=172.30.1.1 smiselno je določiti pot neposredno do vmesnika tunela, brez naslova /routing filter add action=accept chain=dynamic-in protocol=bgp comment=»Set nexthop» set-in-nexthop-direct=<ime vmesnika>
UPD5. Pojavila se je nova storitev https://antifilter.download, kjer lahko vzamete že pripravljene sezname naslovov IP. Posodobljeno vsake pol ure. Na strani odjemalca ostane le, da zapise uokvirimo z ustrezno »route... reject«.
In na tej točki je verjetno dovolj, da raztrgate svojo babico in posodobite članek.
UPD6. Prenovljena različica članka za tiste, ki tega ne želijo ugotoviti, vendar želijo začeti - tukaj.