ProHoster > Blog > Pangangasiwa > Pagse-set up ng BGP para i-bypass ang pag-block, o "Paano ako tumigil sa takot at umibig sa RKN"
Pagse-set up ng BGP para i-bypass ang pag-block, o "Paano ako tumigil sa takot at umibig sa RKN"
Well, okay, tungkol sa "mahal" ay isang pagmamalabis. Sa halip, "nakakasamang mabuhay kasama."
Tulad ng alam mo, mula noong Abril 16, 2018, hinaharangan ng Roskomnadzor ang pag-access sa mga mapagkukunan sa Internet sa napakalawak na mga stroke, pagdaragdag sa "Pinag-isang Rehistro ng mga pangalan ng domain, mga index ng pahina ng mga site sa Internet at mga address ng network na nagpapahintulot sa pagtukoy ng mga site. sa Internet," na naglalaman ng impormasyon na ipinagbabawal ang pamamahagi sa Russian Federation" (sa teksto - isang rehistro lamang) ng /10 minsan. Bilang resulta, ang mga mamamayan ng Russian Federation at mga negosyo ay naghihirap, na nawalan ng access sa ganap na legal na mga mapagkukunan na kailangan nila.
Dahil hindi masyadong legal na mag-publish ng mga paraan upang i-bypass ang pag-block sa pag-access sa impormasyon na ipinagbabawal sa teritoryo ng Russian Federation, ang layunin ng artikulong ito ay pag-usapan ang tungkol sa isang paraan na nagbibigay-daan sa iyo upang i-automate ang pagkakaroon ng access sa mga mapagkukunan na pinapayagan sa teritoryo ng Russian Federation, ngunit dahil sa mga aksyon ng isang tao ay hindi direktang naa-access sa pamamagitan ng iyong provider. At ang pag-access sa iba pang mga mapagkukunan na nakuha bilang isang resulta ng mga aksyon mula sa artikulo ay isang kapus-palad na epekto at hindi sa anumang paraan ang layunin ng artikulo.
Gayundin, dahil pangunahin akong isang arkitekto ng network ayon sa propesyon, bokasyon at landas ng buhay, ang programming at Linux ay hindi ang aking malakas na punto. Samakatuwid, siyempre, ang mga script ay maaaring maisulat nang mas mahusay, ang mga isyu sa seguridad sa VPS ay maaaring malutas nang mas malalim, atbp. Ang iyong mga mungkahi ay tatanggapin nang may pasasalamat, kung ang mga ito ay sapat na detalyado - ikalulugod kong idagdag ang mga ito sa teksto ng artikulo.
Tl; DR
I-automate namin ang pag-access sa mga mapagkukunan sa pamamagitan ng iyong umiiral na tunnel gamit ang isang kopya ng registry at ang BGP protocol. Ang layunin ay alisin ang lahat ng trapikong naka-address sa mga naka-block na mapagkukunan sa tunnel. Minimum na mga paliwanag, karamihan sa mga sunud-sunod na tagubilin.
Ano ang kailangan mo para dito?
Sa kasamaang palad, ang post na ito ay hindi para sa lahat. Upang magamit ang diskarteng ito, kakailanganin mong pagsamahin ang ilang mga elemento:
Dapat ay mayroon kang linux server sa isang lugar sa labas ng blocking field. O hindi bababa sa pagnanais na magkaroon ng ganoong server - sa kabutihang palad ay nagkakahalaga na ito mula $9/taon, at posibleng mas mababa. Ang pamamaraan ay angkop din kung mayroon kang isang hiwalay na VPN tunnel, kung gayon ang server ay maaaring matatagpuan sa loob ng blocking field.
Dapat sapat na matalino ang iyong router upang magawa ito
anumang kliyente ng VPN na gusto mo (mas gusto ko ang OpenVPN, ngunit maaari itong maging PPTP, L2TP, GRE+IPSec o anumang iba pang opsyon na lumilikha ng interface ng tunnel);
BGPv4 protocol. Na nangangahulugan na para sa SOHO maaaring ito ay Mikrotik o anumang router na may OpenWRT/LEDE/katulad na custom firmware na nagbibigay-daan sa iyong mag-install ng Quagga o Bird. Hindi rin ipinagbabawal ang paggamit ng PC router. Sa kaso ng isang negosyo, hanapin ang suporta ng BGP sa dokumentasyon para sa iyong border router.
Dapat kang magkaroon ng pag-unawa sa paggamit ng Linux at mga teknolohiya sa networking, kabilang ang BGP protocol. O hindi bababa sa nais na makakuha ng ganoong ideya. Dahil hindi pa ako handang yakapin ang kalawakan sa pagkakataong ito, kailangan mong pag-aralan ang ilang aspeto na hindi mo maintindihan nang mag-isa. Gayunpaman, siyempre, sasagutin ko ang mga partikular na tanong sa mga komento at malamang na ako lang ang sasagot, kaya huwag mag-atubiling magtanong.
Mga gumaganang folder - dahil nagtatrabaho kami bilang root, karamihan sa lahat ay matatagpuan sa home folder ng root. Ayon sa pagkakabanggit:
/root/blacklist - gumaganang folder na may script ng compilation
/root/zi - kopya ng registry mula sa github
/etc/bird - karaniwang folder para sa mga setting ng serbisyo ng ibon
Ang panlabas na IP address ng VPS na may routing server at ang tunnel termination point ay 194.165.22.146, ASN 64998; panlabas na IP address ng router - 81.177.103.94, ASN 64999
Ang mga IP address sa loob ng tunnel ay 172.30.1.1 at 172.30.1.2, ayon sa pagkakabanggit.
Siyempre, maaari mong gamitin ang anumang iba pang mga router, operating system at mga produkto ng software, pag-aayos ng solusyon sa kanilang lohika.
Sa madaling sabi - ang lohika ng solusyon
Mga aksyong paghahanda
Pagkuha ng VPS
Pagtaas ng tunnel mula sa router patungo sa VPS
Nakatanggap kami at regular na nag-a-update ng kopya ng rehistro
Pag-install at pag-configure ng serbisyo sa pagruruta
Gumagawa kami ng listahan ng mga static na ruta para sa serbisyo sa pagruruta batay sa registry
Ikinonekta namin ang router sa serbisyo at i-configure ang pagpapadala ng lahat ng trapiko sa pamamagitan ng tunnel.
Ang aktwal na solusyon
Mga aksyong paghahanda
Mayroong maraming mga serbisyo sa Internet na nagbibigay ng VPS para sa lubhang makatwirang mga presyo. Sa ngayon ay natagpuan ko at ginagamit ko ang opsyon para sa $9/taon, ngunit kahit na hindi ka masyadong mag-abala, maraming mga opsyon para sa 1E/buwan sa bawat sulok. Ang tanong ng pagpili ng VPS ay higit pa sa saklaw ng artikulong ito, kaya kung ang isang tao ay hindi nakakaintindi ng isang bagay tungkol dito, magtanong sa mga komento.
Kung gumagamit ka ng VPS hindi lamang para sa serbisyo sa pagruruta, kundi pati na rin upang wakasan ang isang lagusan dito, kailangan mong itaas ang tunnel na ito at, halos tiyak, i-configure ang NAT para dito. Mayroong isang malaking bilang ng mga tagubilin sa mga pagkilos na ito sa Internet, hindi ko uulitin ang mga ito dito. Ang pangunahing kinakailangan para sa naturang tunnel ay dapat itong lumikha ng isang hiwalay na interface sa iyong router na sumusuporta sa tunnel patungo sa VPS. Karamihan sa mga ginagamit na teknolohiya ng VPN ay nakakatugon sa kinakailangang ito - halimbawa, ang OpenVPN sa tun mode ay perpekto.
Pagkuha ng kopya ng rehistro
Tulad ng sinabi ni Jabrail, "Siya na humahadlang sa atin ay tutulungan tayo." Dahil ang RKN ay gumagawa ng isang rehistro ng mga ipinagbabawal na mapagkukunan, isang kasalanan na hindi gamitin ang rehistrong ito upang malutas ang aming problema. Makakatanggap kami ng kopya ng registry mula sa github.
Pumunta kami sa iyong server ng Linux, nahuhulog sa konteksto ng ugat (sudo su -) at i-install ang git kung hindi pa ito naka-install.
apt install git
Pumunta sa iyong home directory at kumuha ng kopya ng registry.
cd ~ && git clone --depth=1 https://github.com/zapret-info/z-i
Nag-set up kami ng cron update (Ginagawa ko ito nang isang beses bawat 20 minuto, ngunit maaari kang pumili ng anumang agwat na interesado ka). Upang gawin ito, inilunsad namin crontab -e at idagdag ang sumusunod na linya dito:
*/20 * * * * cd ~/z-i && git pull && git gc
Ikinonekta namin ang isang hook na lilikha ng mga file para sa serbisyo sa pagruruta pagkatapos i-update ang registry. Upang gawin ito, lumikha ng isang file /root/zi/.git/hooks/post-merge na may sumusunod na nilalaman:
Gagawa kami ng makebgp script na tinutukoy ng hook sa ibang pagkakataon.
Pag-install at pag-configure ng serbisyo sa pagruruta
I-install ang ibon. Sa kasamaang palad, ang bersyon ng ibon na kasalukuyang naka-post sa mga repositoryo ng Ubuntu ay maihahambing sa pagiging bago sa mga dumi ng Archaeopteryx, kaya kailangan muna nating idagdag ang opisyal na PPA ng mga developer ng software sa system.
Pagkatapos nito, agad naming hindi pinagana ang ibon para sa IPv6 - hindi namin ito kakailanganin sa pag-install na ito.
systemctl stop bird6
systemctl disable bird6
Nasa ibaba ang isang minimalistic na file ng pagsasaayos ng serbisyo ng ibon (/etc/bird/bird.conf), na sapat na para sa amin (at ipinapaalala ko sa iyo muli na walang sinuman ang nagbabawal sa pagbuo at pag-tune ng ideya upang umangkop sa iyong sariling mga pangangailangan)
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 - router identifier, na biswal na mukhang isang IPv4 address, ngunit hindi isa. Sa aming kaso, maaari itong maging anumang 32-bit na numero sa format ng IPv4 address, ngunit magandang paraan upang eksaktong ipahiwatig ang IPv4 address ng iyong device (sa kasong ito, VPS).
Tinutukoy ng direktang protocol kung aling mga interface ang gagana sa proseso ng pagruruta. Ang halimbawa ay nagbibigay ng ilang halimbawa ng mga pangalan, maaari kang magdagdag ng iba. Maaari mo lamang tanggalin ang linya; sa kasong ito, pakikinggan ng server ang lahat ng magagamit na mga interface na may IPv4 address.
protocol static ang aming magic na naglo-load ng mga listahan ng mga prefix at IP address (na talagang /32 prefix, siyempre) mula sa mga file para sa kasunod na anunsyo. Kung saan nanggaling ang mga listahang ito ay tatalakayin sa ibaba. Pakitandaan na ang paglo-load ng mga IP address ay nikomento bilang default, ang dahilan nito ay ang malaking dami ng pag-upload. Para sa paghahambing, sa oras ng pagsulat, mayroong 78 na linya sa listahan ng mga prefix, at 85898 sa listahan ng mga IP address. Lubos kong inirerekomenda ang pagsisimula at pag-debug lamang sa listahan ng mga prefix, at kung paganahin o hindi ang pag-load ng IP sa ang hinaharap ay nasa iyo na magpasya pagkatapos mag-eksperimento sa iyong router. Hindi lahat ng mga ito ay madaling digest ng 85 thousand entries sa routing table.
protocol bgp, sa katunayan, set up bgp peering sa iyong router. Ang IP address ay ang address ng panlabas na interface ng router (o ang address ng tunnel interface sa gilid ng router), 64998 at 64999 ang mga numero ng mga autonomous system. Sa kasong ito, maaari silang italaga sa anyo ng anumang 16-bit na numero, ngunit magandang kasanayan na gumamit ng mga numero ng AS mula sa pribadong hanay na tinukoy ng RFC6996 - 64512-65534 kasama (mayroong format para sa 32-bit na mga ASN, ngunit sa aming kaso ito ay tiyak na overkill). Ang inilarawang configuration ay gumagamit ng eBGP peering, kung saan ang mga numero ng mga autonomous system ng routing service at ang router ay dapat na magkaiba.
Tulad ng nakikita mo, kailangang malaman ng serbisyo ang IP address ng router, kaya kung mayroon kang dynamic o non-routable private (RFC1918) o shared (RFC6598) address, wala kang opsyon na itaas ang peering sa external interface, ngunit gagana pa rin ang serbisyo sa loob ng tunnel.
Malinaw din na mula sa isang serbisyo maaari kang magbigay ng mga ruta sa maraming iba't ibang mga router - i-duplicate lamang ang mga setting para sa kanila sa pamamagitan ng pagkopya sa seksyon ng protocol bgp at pagbabago ng IP address ng kapitbahay. Iyon ang dahilan kung bakit ipinapakita ng halimbawa ang mga setting para sa pagsilip sa labas ng tunnel, bilang ang pinaka-unibersal. Madaling alisin ang mga ito sa tunnel sa pamamagitan ng pagbabago ng mga IP address sa mga setting nang naaayon.
Pinoproseso ang registry para sa serbisyo sa pagruruta
Ngayon kailangan namin, sa katunayan, upang lumikha ng mga listahan ng mga prefix at IP address, na binanggit sa protocol static sa nakaraang yugto. Upang gawin ito, kinuha namin ang registry file at ginagawa ang mga file na kailangan namin mula dito gamit ang sumusunod na script, na inilagay sa /root/blacklist/makebgp
Ngayon ay maaari mo na itong patakbuhin nang manu-mano at obserbahan ang hitsura ng mga file sa /etc/bird.
Malamang, ang ibon ay hindi gumagana para sa iyo sa sandaling ito, dahil sa nakaraang yugto hiniling mo ito upang maghanap ng mga file na hindi pa umiiral. Samakatuwid, inilunsad namin ito at tinitingnan kung nagsimula na ito:
systemctl start bird
birdc show route
Ang output ng pangalawang utos ay dapat magpakita ng humigit-kumulang 80 mga tala (ito ay sa ngayon, ngunit kapag na-set up mo ito, ang lahat ay depende sa kasigasigan ng RKN sa pagharang sa mga network) tulad nito:
ay magpapakita ng katayuan ng mga protocol sa loob ng serbisyo. Hanggang sa na-configure mo ang router (tingnan ang susunod na punto), ang OurRouter protocol ay nasa start state (Connect o Active phase), at pagkatapos ng matagumpay na koneksyon mapupunta ito sa up state (Established phase). Halimbawa, sa aking system ang output ng command na ito ay ganito ang hitsura:
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
Pagkonekta ng router
Marahil ay pagod na ang lahat sa pagbabasa ng footcloth na ito, ngunit lakasan ang loob - malapit na ang wakas. Bukod dito, sa seksyong ito hindi ako makakapagbigay ng sunud-sunod na mga tagubilin - ito ay magkakaiba para sa bawat tagagawa.
Gayunpaman, maaari kong ipakita sa iyo ang ilang mga halimbawa. Ang pangunahing lohika ay itaas ang BGP peering at magtalaga ng nexthop sa lahat ng natanggap na prefix, na tumuturo sa aming tunnel (kung kailangan naming magpadala ng trapiko sa pamamagitan ng p2p interface) o ang nexthop IP address kung ang trapiko ay mapupunta sa ethernet).
Halimbawa, sa Mikrotik sa RouterOS ito ay malulutas bilang mga sumusunod
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
Kung ang parehong tunnel ay ginagamit para sa BGP peering at para sa pagpapadala ng kapaki-pakinabang na trapiko, hindi kinakailangang itakda ang nexthop; ito ay itatakda nang tama gamit ang protocol. Ngunit kung itatakda mo ito nang manu-mano, hindi rin ito magpapalala.
Sa iba pang mga platform, kakailanganin mong malaman ang pagsasaayos sa iyong sarili, ngunit kung mayroon kang anumang mga paghihirap, sumulat sa mga komento, susubukan kong tumulong.
Matapos magsimula ang iyong session sa BGP, ang mga ruta patungo sa malalaking network ay dumating at na-install sa talahanayan, ang trapiko ay dumaloy sa mga address mula sa kanila at ang kaligayahan ay malapit na, maaari kang bumalik sa serbisyo ng ibon at subukang i-uncomment ang entry doon na nag-uugnay sa listahan ng mga IP address, isagawa pagkatapos nito
systemctl reload bird
at tingnan kung paano inilipat ng iyong router ang 85 libong rutang ito. Maging handa sa pag-unplug at pag-isipan kung ano ang gagawin dito :)
Sa kabuuan
Puro theoretically, pagkatapos makumpleto ang mga hakbang na inilarawan sa itaas, mayroon ka na ngayong isang serbisyo na awtomatikong nagre-redirect ng trapiko sa mga IP address na pinagbawalan sa Russian Federation lampas sa filtering system.
Siyempre, maaari itong mapabuti. Halimbawa, medyo madali ang pagbubuod ng isang listahan ng mga IP address gamit ang perl o python solution. Ang isang simpleng Perl script na gumagawa nito gamit ang Net::CIDR::Lite ay ginagawang 85 (hindi libo), ngunit, siyempre, sumasaklaw sa mas malaking hanay ng mga address kaysa sa na-block.
Dahil ang serbisyo ay tumatakbo sa ikatlong antas ng modelong ISO/OSI, hindi ka nito maililigtas mula sa pagharang sa isang site/pahina kung ito ay nalutas sa maling address tulad ng naitala sa registry. Ngunit kasama ng registry, ang file na nxdomain.txt ay dumating mula sa github, na sa ilang mga stroke ng script ay madaling nagiging mapagkukunan ng mga address para sa, halimbawa, ang SwitchyOmega plugin sa Chrome.
Kinakailangan din na banggitin na ang solusyon ay nangangailangan ng karagdagang hasa kung ikaw ay hindi lamang isang gumagamit ng Internet, ngunit nag-publish din ng ilang mga mapagkukunan sa iyong sarili (halimbawa, ang isang website o mail server ay tumatakbo sa koneksyon na ito). Gamit ang paraan ng router, kinakailangan na mahigpit na itali ang papalabas na trapiko mula sa serbisyong ito sa iyong pampublikong address, kung hindi, mawawalan ka ng koneksyon sa mga mapagkukunang iyon na sakop ng listahan ng mga prefix na natanggap ng router.
Kung mayroon kang anumang mga katanungan, magtanong, handa akong sagutin.
UPD. Salamat navion ΠΈ TerAnYu para sa mga parameter para sa git na nagbibigay-daan sa pagbawas ng dami ng pag-download.
UPD3. Hindi isinakripisyo Sumulat ako ng isang code na nagpapalit ng dump.csv sa isang resultang file para sa ibon na may opsyonal na pagbubuod ng mga IP address. Samakatuwid, ang seksyong "Pagproseso ng pagpapatala para sa serbisyo sa pagruruta" ay maaaring mapalitan sa pamamagitan ng pagtawag sa programa nito. https://habr.com/post/354282/#comment_10782712
UPD4. Isang maliit na gawain sa mga error (hindi ko sila idinagdag sa teksto):
1) sa halip systemctl i-reload ang ibon makatuwirang gamitin ang utos i-configure ang birdc.
2) sa Mikrotik router, sa halip na baguhin ang nexthop sa IP ng pangalawang bahagi ng tunnel /routing filter add action=accept chain=dynamic-in protocol=bgp comment=Β»Itakda ang nexthopΒ» set-in-nexthop=172.30.1.1 makatuwirang tukuyin ang ruta nang direkta sa interface ng tunnel, nang walang address /routing filter add action=accept chain=dynamic-in protocol=bgp comment=Β»Itakda ang nexthopΒ» set-in-nexthop-direct=<pangalan ng interface>
UPD5. May lumitaw na bagong serbisyo https://antifilter.download, mula sa kung saan maaari mong kunin ang mga nakahandang listahan ng mga IP address. Ina-update tuwing kalahating oras. Sa panig ng kliyente, ang natitira na lang ay i-frame ang mga talaan na may kaukulang "ruta... tanggihan".
At sa puntong ito, marahil, sapat na upang basahan ang iyong lola at i-update ang artikulo.
UPD6. Isang binagong bersyon ng artikulo para sa mga hindi gustong malaman ito, ngunit gustong magsimula - dito.