ProHoster > Blog > Amministrazione > Configurazione di BGP per scaccià u bluccatu, o "Cumu aghju cessatu di avè paura è mi sò innamuratu di RKN"
Configurazione di BGP per scaccià u bluccatu, o "Cumu aghju cessatu di avè paura è mi sò innamuratu di RKN"
Ebbè, va bè, di "innamurà" hè una esagerazione. Piuttostu "puderia coesiste cù".
Cum'è tutti sapete, da u 16 d'aprile di u 2018, Roskomnadzor hà bluccatu l'accessu à e risorse in a reta cù tratti estremamente largu, aghjunghjendu à u Registru Unificatu di nomi di duminiu, punters à pagine di siti in Internet è indirizzi di rete chì permettenu identificà siti in Internet, chì cuntenenu infurmazione, a diffusione di quale hè pruibita in a Federazione Russa "(in u testu - solu un registru) / 10 volte. In u risultatu, i citadini di a Federazione Russa è l'imprese soffrenu, avè persu l'accessu à e risorse assolutamente legale chì anu bisognu.
Dopu avè dettu in i cumenti à unu di l'articuli nantu à Habré chì eru prontu à aiutà e vittimi cù a creazione di un schema di bypass, parechje persone m'hà cuntattatu per dumandà un tali aiutu. Quandu tuttu hà travagliatu per elli, unu d'elli ricumandemu di descriverà a tecnica in un articulu. À a riflessione, aghju decisu di rompe u mo silenziu nantu à u situ è pruvà per una volta di scrive qualcosa intermediate trà un prughjettu è un postu in Facebook, i.e. abrapost. U risultatu hè davanti à voi.
Légales
Siccomu ùn hè micca assai legale per pubblicà modi per bypassà l'accessu à u bloccu di l'infurmazioni pruibiti nantu à u territoriu di a Federazione Russa, u scopu di questu articulu serà di parlà di un metudu chì vi permette di automatizà l'accessu à e risorse chì sò permessi nantu à u territoriu. di a Federazione Russa, ma per via di l'azzioni di qualcunu inaccessibili direttamente attraversu u vostru fornitore. È l'accessu à l'altri risorse, ottenutu com'è u risultatu di l'azzioni da l'articulu, hè un effettu latu disgraziatu è ùn hè micca u scopu di l'articulu.
Inoltre, postu chì sò principalmente un architettu di rete per professione, vocazione è percorsu di vita, a prugrammazione è Linux ùn sò micca i mo punti di forza. Dunque, sicuru, i script ponu esse scritti megliu, i prublemi di sicurezza in VPS ponu esse elaborati più profondamente, etc. I vostri suggerimenti seranu accettati cun gratitùdine, s'ellu sò abbastanza detallati - seraghju felice di aghjunghje à u testu di l'articulu.
TL; DR
Automatizemu l'accessu à e risorse attraversu u vostru tunnel esistente utilizendu una copia di u registru è u protocolu BGP. L'obiettivu hè di sguassà tuttu u trafficu indirizzatu à e risorse bluccate in u tunnel. Spiegazione minima, soprattuttu struzzioni passu à passu.
Chì avete bisognu per questu
Sfurtunatamente, stu postu ùn hè micca per tutti. Per aduprà sta tecnica, vi tuccherà à cullà uni pochi di elementi:
Duvete avè un servitore Linux in un locu fora di u campu di bloccu. O almenu u desideriu di inizià un tali servitore - postu chì avà costa da $ 9 / annu, è possibbilmente menu. U metudu hè ancu adattatu si avete un tunnel VPN separatu, allura u servitore pò esse situatu in u campu di bloccu.
U vostru router deve esse abbastanza intelligente per pudè
qualsiasi cliente VPN chì ti piace (preferite OpenVPN, ma pò esse PPTP, L2TP, GRE + IPSec, è qualsiasi altra opzione chì crea una interfaccia di tunnel);
protocolu BGPv4. Chì significa chì per SOHO pò esse Mikrotik o qualsiasi router cù OpenWRT / LEDE / firmware persunalizatu simili chì permette di installà Quagga o Bird. L'usu di un router per PC ùn hè ancu pruibitu. Per una impresa, vede a documentazione per u vostru router di fruntiera per u supportu BGP.
Duvete esse familiarizatu cù l'usu di Linux è e tecnulugia di rete, cumpresu BGP. O almenu vulete piglià sta idea. Siccomu ùn sò micca prontu à abbraccià l'immensità sta volta, avete da studià qualchi punti chì sò incomprensibili per voi da sè stessu. In ogni casu, naturalmente, risponderaghju à e dumande specifiche in i cumenti è hè improbabile di esse l'unicu chì risponde, dunque sentite liberu di dumandà.
Cartulari di travagliu - postu chì avemu travagliatu cum'è root, a maiò parte di tuttu serà piazzatu in u cartulare di casa radicali. Rispettivamente:
/root/blacklist - cartulare di travagliu cù script di compilazione
/root/zi - una copia di u registru da github
/etc/bird - cartulare di paràmetri di serviziu di uccelli standard
Accettamu 194.165.22.146, ASN 64998 cum'è l'indirizzu IP esternu di u VPS cù u servitore di routing è u puntu di terminazione di u tunnel; indirizzu IP esternu di u router - 81.177.103.94, ASN 64999
L'indirizzi IP in u tunnel sò 172.30.1.1 è 172.30.1.2, rispettivamente.
Di sicuru, pudete aduprà qualsiasi altri routers, sistemi operativi è prudutti di software, aghjustendu a suluzione per adattà à a so logica.
In breve - a logica di a suluzione
Attività preparatorii
Ottene un VPS
Aumentemu u tunnel da u router à u VPS
Ottene è aghjurnà regularmente una copia di u registru
Stallà è cunfigurà u serviziu di routing
Crea una lista di rotte statiche per u serviziu di routing basatu annantu à u registru
Cunnetteremu u router à u serviziu è cunfigurà l'inviu di tuttu u trafficu attraversu u tunnel.
A decisione vera
Attività preparatorii
In a vastità di a reta, ci sò parechji servizii chì furnisce VPS per soldi estremamente raghjone. Finu a ora, aghju trovu è aduprà l'opzione per $ 9 / annu, ma ancu s'ellu ùn avete micca veramente fastidiu, ci sò parechje scelte per 1E / mese in ogni angulu. A quistione di sceglie un VPS si trova assai fora di u scopu di stu articulu, perchè se qualcosa ùn hè micca chjaru à qualchissia nantu à questu, dumandate in i cumenti.
Se utilizate VPS micca solu per u serviziu di routing, ma ancu per finisce un tunnellu nantu à questu, avete bisognu di elevà stu tunnel è, quasi inequivocamente, cunfigurà NAT per questu. Ci hè un gran numaru d'istruzzioni nantu à a reta per queste azzioni, ùn aghju micca ripetutu quì. U requisitu principalu per un tali tunnel hè chì deve creà una interfaccia separata in u vostru router chì sustene u tunnel versu u VPS. A maiò parte di e tecnulugie VPN aduprate risponde à questu requisitu - per esempiu, OpenVPN in modu tun hè bè.
Ottene una copia di u registru
Cum'è Jabrail hà dettu: "Quellu chì ci impedisce ci aiuterà". Siccomu u RKN crea un registru di risorsi pruibiti, seria un peccatu per ùn aduprà stu registru per risolve u nostru prublema. Riceveremu una copia di u registru da github.
Andemu à u vostru servitore Linux, falà in u cuntestu di root'a (sudo su-) è installate git s'ellu ùn hè micca digià stallatu.
apt install git
Andate à u vostru cartulare di casa è tira fora una copia di u registru.
cd ~ && git clone --depth=1 https://github.com/zapret-info/z-i
Configurate un cron update (l'aghju ogni 20 minuti, ma pudete sceglie qualsiasi intervallu chì vi interessa). Per fà questu, lanciamu crontab -e è aghjunghje a seguente linea:
*/20 * * * * cd ~/z-i && git pull && git gc
Cunnetteremu un ganciu chì creà schedarii per u serviziu di routing dopu l'aghjurnà u registru. Per fà questu, creamu un schedariu /root/zi/.git/hooks/post-merge cù u seguenti cuntenutu:
U script makebgp riferitu da u ganciu serà creatu dopu.
Stallà è cunfigurà u serviziu di routing
Installa ucellu. Sfurtunatamente, a versione attualmente publicata di l'uccelli in i repositori di Ubuntu hè paragunabile in freschezza à i feci di Archeopteryx, cusì avemu bisognu di prima aghjunghje u PPA ufficiale di i sviluppatori di software à u sistema.
Dopu quì, disattivemu immediatamente bird per IPv6 - in questa installazione ùn avemu micca bisognu.
systemctl stop bird6
systemctl disable bird6
Quì sottu hè un schedariu di cunfigurazione minimalista per u serviziu di uccelli (/etc/bird/bird.conf), chì hè abbastanza per noi (è una volta vi ricurdò chì nimu pruibisce di sviluppà è sintonizza l'idea per adattà à i vostri bisogni)
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;
}
router id - identificatore di u router, visualmente chì pare un indirizzu IPv4, ma ùn hè micca. In u nostru casu, pò esse qualsiasi numeru 32-bit in u formatu di l'indirizzu IPv4, ma hè una bona pratica per specificà l'indirizzu IPv4 di u vostru dispositivu (in questu casu, VPS) quì.
protokollu direttu determina quale interfacce travaglià cù u prucessu di routing. L'esempiu dà un paru di esempi di nomi, pudete aghjunghje più. Pudete ancu sguassate a linea, in quale casu u servitore ascolterà tutte l'interfaccia dispunibuli cù un indirizzu IPv4.
protokollu static hè a nostra magia chì carica listi di prefissi è indirizzi IP (chì sò, sicuru, / 32 prefissi) da i schedarii per annunziu dopu. Da induve venenu sti listi seranu discututi quì sottu. Per piacè nutate chì a carica di l'indirizzi IP hè cummentata per automaticamente, u mutivu di questu hè a grande quantità di carica. Per paragunà, à u mumentu di a scrittura di l'articulu, ci sò 78 linii in a lista di prefissi, è 85898 in a lista di l'indirizzi IP. I ricumandemu fermamente chì avete principiatu è debug solu nantu à a lista di prefissi, è decide si o micca. per attivà a carica IP in u futuru dopu avè sperimentatu cù u vostru router. Micca tutti ponu facilmente digerirà 85 mila entrate in a tabella di routing.
protocolu bgp in realtà stabilisce bgp peering cù u vostru router. IP-address hè l'indirizzu di l'interfaccia esterna di u router (o l'indirizzu di l'interfaccia di u tunnel da u latu di u router), 64998 è 64999 sò i numeri di sistemi autonomi. In questu casu, ponu esse attribuiti in a forma di qualsiasi numeri di 16 bit, ma hè una bona pratica di utilizà numeri AS da a gamma privata definita da RFC6996 - 64512-65534 inclusive (ci hè un formatu ASN di 32 bit, ma in u nostru casu questu hè definitivamente eccessiva). A cunfigurazione descritta usa eBGP peering, in quale i numeri di u sistema autonomu di u serviziu di routing è u router devenu esse sfarenti.
Comu pudete vede, u serviziu hà bisognu di cunnosce l'indirizzu IP di u router, perchè s'è vo avete un indirizzu privatu dinamicu o non-routable (RFC1918) o spartutu (RFC6598), ùn avete micca opzione per elevà peering in l'interfaccia esterna, ma u serviziu hà da travaglià sempre in u tunnel.
Hè ancu abbastanza trasparente chì pudete furnisce parechji routers diffirenti cù rotte da un serviziu - basta duplicà i paràmetri per elli copiendu a sezione di protocolu bgp cù cambià l'indirizzu IP di u vicinu. Hè per quessa chì l'esempiu mostra i paràmetri per peering fora di u tunnel cum'è u più universale. Ùn hè micca difficiule di sguassà in u tunelu cambiendu l'indirizzi IP in i paràmetri in cunsequenza.
Trattamentu di u Registru per u serviziu di routing
Avà avemu bisognu, in fattu, di creà listi di prefissi è indirizzi ip, chì sò citati in u passu precedente in u protocolu static. Per fà questu, pigliamu u schedariu di registru è facemu i schedari chì avemu bisognu di ellu cù u script seguente, situatu in /root/blacklist/makebgp
Avà pudete eseguisce manualmente è osservà l'apparenza di i schedari in /etc/bird.
Hè assai prubabile, in questu mumentu l'uccello ùn viaghja micca per voi, perchè in u stadiu precedente avete suggeritu chì cercate i schedari chì ùn esistenu micca. Per quessa, u lanciamu è cuntrullemu chì principia:
systemctl start bird
birdc show route
L'output di u sicondu cumandamentu deve mostra circa 80 entrate (questu hè in u mumentu, è quandu avete stallatu, tuttu dipenderà da u zealousness di l'ILV in bluccatu rete) cusì:
mostrarà u statutu di i protokolli in u serviziu. Finu à cunfigurà u router (vede u prossimu paràgrafu), u protokollu OurRouter serà in u statu di iniziu (fasi di cunnessione o attiva), è dopu una cunnessione successu, andrà in u statu up (fase stabilita). Per esempiu, nantu à u mo sistema, l'output di stu cumandimu pare cusì:
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
Cunnettendu un router
Tutti sò prubabilmente digià stanchi di leghje stu tovagliolu, ma pigliate u core - a fine hè vicinu. Inoltre, in questa sezione ùn puderà micca dà struzzioni passu à passu - serà diversu per ogni fabricatore.
Tuttavia, vi possu mostrà un paru di esempi. A logica principale hè di elevà u peering BGP è aghjunghje nexthop à tutti i prefissi ricevuti, indicà à u nostru tunelu (se avete bisognu di u trafficu di u trafficu attraversu l'interfaccia p2p) o l'indirizzu ip nexthop se u trafficu và à ethernet).
Per esempiu, nantu à Mikrotik in RouterOS, questu hè risoltu cusì
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
In l'eventu chì u stessu tunnellu hè utilizatu sia per u peering BGP sia per a trasmissione di u trafficu utile, ùn hè micca necessariu di stabilisce nexthop, serà stabilitu currettamente per mezu di u protocolu. Ma s'ellu si mette manualmente, ùn sarà micca peghju.
Nant'à altre piattaforme, avete da capisce a cunfigurazione sè stessu, ma s'ellu avete qualchì difficultà, scrivite in i cumenti, pruvate d'aiutà.
Dopu chì a vostra sessione BGP hà risuscitatu, i percorsi à e grande rete sò ghjunti è sò stallati in a tavula, u trafficu à l'indirizzi da elli hè andatu è a felicità hè vicinu, pudete turnà à u serviziu di l'uccelli è pruvate à uncomment l'entrata quì chì cunnetta u lista di indirizzi IP, eseguite dopu
systemctl reload bird
è vede cumu u vostru router hà trasfirutu sti 85 mila rotte. Preparate à spegnellu è pensate à ciò chì fà cun ellu 🙂
Tuttu
Puramente teoricamente, dopu avè realizatu i passi sopra, avete un serviziu chì redirige automaticamente u trafficu à l'indirizzi IP pruibiti in a Federazione Russa passatu u sistema di filtrazione.
Si pò, sicuru, esse migliuratu. Per esempiu, hè abbastanza faciule per riassume una lista di indirizzi IP per solu solu perl o python. Un script perl simplice chì face questu cù Net::CIDR::Lite trasforma 85 mila prefissi in 60 (micca milla), ma naturalmente copre una gamma assai più larga di indirizzi chì hè bluccatu.
Siccomu u serviziu opera à u terzu livellu di u mudellu ISO / OSI, ùn vi salverà micca da u bloccu di u situ / pagina s'ellu ùn risolve micca à l'indirizzu chì hè registratu in u registru. Ma cù u registru da github, u schedariu nxdomain.txt ghjunghje, chì cù uni pochi colpi di u script si trasforma facilmente in una fonte di indirizzi per, per esempiu, u plugin SwitchyOmega in Chrome.
Ci vole ancu esse mintuatu chì a suluzione richiede un sharpening supplementu sè ùn site micca solu un utilizatore d'Internet, ma ancu pubblicà alcune risorse da sè stessu (per esempiu, un situ web o un servitore di mail corre nantu à sta cunnessione). Per mezu di u router, avete bisognu di ligà u trafficu in uscita da stu serviziu à u vostru indirizzu publicu, altrimente perderà a cunnessione cù quelli risorse chì sò cuparti da a lista di prefissi ricevuti da u router.
Sì avete qualchì quistione - dumandate, prontu à risponde.
UPD. Grazie navi и TerAnYu per l'opzioni per git per riduce i volumi di scaricamentu.
UPD2. Colleghi, pare ch'e aghju fattu un sbagliu per ùn aghjunghje struzzioni per a stallazione di un tunnel trà u VPS è u router à l'articulu. Un saccu di dumande sò causati da questu.
In casu, aghju nutatu di novu - si assume chì prima di principià i passi in questa guida, avete digià cunfiguratu u tunnel VPN in a direzzione chì avete bisognu è verificatu u so rendiment (per esempiu, impacchendu u trafficu quì per difettu o staticu). Se ùn avete micca finitu sta fase, ùn hè micca veramente sensu per seguità i passi da l'articulu. Ùn aghju micca u mo propiu testu annantu à questu, ma se cercate in Google "Configurazione di u servitore OpenVPN" cù u nome di u sistema operatore installatu nantu à u VPS, è "Configurazione di u cliente OpenVPN" cù u nome di u vostru router, probabilmente avete truverete una quantità di articuli nantu à questu sughjettu, ancu nantu à Habré.
UPD3. Unsacrifice hà scrittu un codice chì face u schedariu resultanti per l'uccello da dump.csv cù sommazione opzionale di l'indirizzi ip. Per quessa, a sezione "Trattamentu di u Registru per u serviziu di routing" pò esse rimpiazzata cù una chjama à u so prugramma. https://habr.com/post/354282/#comment_10782712
UPD4. Un pocu travagliu nantu à l'errori (ùn hà micca cuntribuitu in u testu):
1) invece systemctl reload bird hè sensu à aduprà u cumandamentu cunfigurazione birdc.
2) in u router Mikrotik, invece di cambià u prossimu-hop à l'IP di a seconda parte di u tunnel. / filtru di routing add action=accept chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop=172.30.1.1 hè sensu per specificà a strada direttamente à l'interfaccia di u tunnel, senza l'indirizzu / filtru di routing add action=accept chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop-direct=<nome di l'interfaccia>
UPD5. Un novu serviziu hè ghjuntu https://antifilter.download, da induve pudete piglià listi pronti di indirizzi ip. Aghjurnatu ogni meza ora. Da u latu di u cliente, tuttu ciò chì resta hè di frammentà e entrate cù u currispundente "route ... rifiutà".
E questu hè probabilmente abbastanza per chjappà a mo nanna è aghjurnà l'articulu.
UPD6. Una versione rivista di l'articulu per quelli chì ùn volenu micca capisce, ma volenu principià - ccà.