ProHoster > Блог > Administrasi > Nyetel BGP kanggo ngliwati pamblokiran, utawa "Carane aku mandheg wedi lan tresna karo RKN"
Nyetel BGP kanggo ngliwati pamblokiran, utawa "Carane aku mandheg wedi lan tresna karo RKN"
Inggih, oke, bab "tresna" iku exaggeration. Nanging, "bisa urip bebarengan karo".
Kaya sing sampeyan ngerteni, wiwit tanggal 16 April 2018, Roskomnadzor wis ngalangi akses menyang sumber daya ing Internet kanthi stroke sing amba banget, nambahake menyang "Dhaptar jeneng domain terpadu, indeks kaca situs ing Internet lan alamat jaringan sing ngidini ngenali situs. ing Internet," ngemot informasi distribusi sing dilarang ing Federasi Rusia" (ing teks - mung ndhaftar) dening /10 kadhangkala. Akibaté, warga Federasi Rusia lan bisnis nandhang sangsara, wis ilang akses menyang sumber daya legal sing dibutuhake.
Sawise aku ujar ing komentar ing salah sawijining artikel babagan Habré manawa aku siap mbantu para korban kanthi nyetel skema bypass, sawetara wong teka aku njaluk bantuan kasebut. Nalika kabeh makarya kanggo wong-wong mau, salah siji saka wong-wong mau dianjurake kanggo njlèntrèhaké technique ing artikel. Sawise sawetara pamikiran, Aku mutusaké kanggo break kasepen ing situs lan nyoba kanggo sapisan kanggo nulis soko penengah antarane project lan kirim Facebook, i.e. habrapost. Asil ana ing ngarep sampeyan.
Nolak tanggung jawab
Amarga ora sah nerbitake cara kanggo ngliwati pamblokiran akses menyang informasi sing dilarang ing wilayah Federasi Rusia, tujuane artikel iki yaiku kanggo ngomong babagan cara sing ngidini sampeyan ngotomatisasi entuk akses menyang sumber daya sing diidini ing wilayah Federasi Rusia, nanging amarga tumindak wong liya ora bisa diakses langsung liwat panyedhiya sampeyan. Lan akses menyang sumber daya liyane sing dipikolehi minangka asil saka tumindak saka artikel kasebut minangka efek samping sing ora nyenengake lan ora dadi tujuan artikel kasebut.
Uga, amarga aku utamane dadi arsitek jaringan kanthi profesi, pakaryan lan dalan urip, pemrograman lan Linux dudu titik sing kuwat. Mulane, mesthine, skrip bisa ditulis luwih apik, masalah keamanan ing VPS bisa digarap luwih jero, lsp. Saran sampeyan bakal ditampa kanthi matur nuwun, yen cukup rinci - aku bakal seneng nambahake menyang teks artikel kasebut.
TL; DR
Kita ngotomatisasi akses menyang sumber daya liwat trowongan sing wis ana nggunakake salinan registri lan protokol BGP. Tujuane kanggo mbusak kabeh lalu lintas sing ditujokake menyang sumber daya sing diblokir menyang trowongan. Penjelasan minimal, biasane instruksi langkah demi langkah.
Apa sing sampeyan butuhake kanggo iki?
Sayange, kiriman iki ora kanggo kabeh wong. Kanggo nggunakake teknik iki, sampeyan kudu nggabungake sawetara unsur:
Sampeyan kudu duwe server linux nang endi wae ing njaba lapangan pamblokiran. Utawa paling ora kepinginan duwe server kaya ngono - untung saiki regane saka $ 9 / taun, lan bisa uga kurang. Cara kasebut uga cocog yen sampeyan duwe trowongan VPN sing kapisah, mula server kasebut bisa ditemokake ing lapangan pamblokiran.
Router sampeyan kudu cukup pinter supaya bisa
klien VPN apa wae sing disenengi (Aku luwih seneng OpenVPN, nanging bisa dadi PPTP, L2TP, GRE + IPSec utawa pilihan liyane sing nggawe antarmuka trowongan);
protokol BGPv4. Tegese kanggo SOHO bisa uga Mikrotik utawa router apa wae karo OpenWRT / LEDE / firmware khusus sing padha sing ngidini sampeyan nginstal Quagga utawa Bird. Nggunakake router PC uga ora dilarang. Ing kasus perusahaan, goleki dhukungan BGP ing dokumentasi kanggo router wates sampeyan.
Sampeyan kudu ngerti babagan panggunaan Linux lan teknologi jaringan, kalebu protokol BGP. Utawa ing paling pengin njaluk idea kuwi. Awit aku durung siyap ngrangkul immensity wektu iki, sampeyan kudu nyinaoni sawetara aspek sing ora bisa dingerteni sampeyan dhewe. Nanging, aku mesthi bakal mangsuli pitakon tartamtu ing komentar lan aku ora mung siji-sijine sing mangsuli, mula aja ragu-ragu takon.
Folder sing digunakake - amarga kita digunakake minangka root, umume kabeh bakal ana ing folder asal root. Mungguh:
/root/blacklist - folder kerja karo skrip kompilasi
/root/zi - salinan registri saka github
/etc/bird - folder standar kanggo setelan layanan manuk
Alamat IP eksternal VPS karo server routing lan titik mandap trowongan yaiku 194.165.22.146, ASN 64998; alamat IP eksternal router - 81.177.103.94, ASN 64999
Alamat IP ing jero trowongan yaiku 172.30.1.1 lan 172.30.1.2.
Mesthi, sampeyan bisa nggunakake router liyane, sistem operasi lan produk piranti lunak, nyetel solusi kanggo logika.
Sedhela - logika solusi
Kegiatan Nyiapkeun
Njupuk VPS
Ngunggahake trowongan saka router menyang VPS
Kita nampa lan ajeg nganyari salinan pendaptaran
Nginstal lan ngatur layanan nuntun
Kita nggawe dhaptar rute statis kanggo layanan nuntun adhedhasar pendaptaran
Kita nyambungake router menyang layanan lan ngatur ngirim kabeh lalu lintas liwat trowongan.
Solusi nyata
Kegiatan Nyiapkeun
Ana akeh layanan ing Internet sing nyedhiyakake VPS kanthi rega sing cukup terjangkau. Nganti saiki aku wis nemokake lan nggunakake pilihan kanggo $ 9 / taun, nanging sanajan sampeyan ora keganggu banget, ana akeh pilihan kanggo 1E / sasi ing saben pojok. Pitakonan kanggo milih VPS dumunung adoh ngluwihi ruang lingkup artikel iki, dadi yen ana sing ora ngerti babagan iki, takon ing komentar.
Yen sampeyan nggunakake VPS ora mung kanggo layanan nuntun, nanging uga kanggo mungkasi trowongan ing, sampeyan kudu ngunggahake trowongan iki lan, meh mesthi, ngatur NAT kanggo. Ana akeh pandhuan babagan tumindak kasebut ing Internet, aku ora bakal mbaleni maneh ing kene. Syarat utama kanggo trowongan kasebut yaiku kudu nggawe antarmuka sing kapisah ing router sampeyan sing ndhukung trowongan menyang VPS. Teknologi VPN sing paling akeh digunakake nyukupi syarat iki - contone, OpenVPN ing mode tun sampurna.
Njupuk salinan registri
Jabrail ngandika, "Sapa sing ngalangi kita bakal nulungi kita." Wiwit RKN nggawe registrasi sumber daya sing dilarang, dadi dosa yen ora nggunakake register iki kanggo ngatasi masalah kita. Kita bakal nampa salinan registri saka github.
Kita menyang server Linux sampeyan, mlebu ing konteks root (sudo su -) lan instal git yen durung diinstal.
apt install git
Pindhah menyang direktori ngarep lan tarik metu salinan pendaptaran.
cd ~ && git clone --depth=1 https://github.com/zapret-info/z-i
Kita nyiyapake nganyari cron (Aku nindakake sapisan saben 20 menit, nanging sampeyan bisa milih interval apa wae sing sampeyan minat). Kanggo nindakake iki, kita miwiti crontab -e lan tambahake baris ing ngisor iki:
*/20 * * * * cd ~/z-i && git pull && git gc
Kita nyambungake pancing sing bakal nggawe file kanggo layanan nuntun sawise nganyari pendaptaran. Kanggo nindakake iki, nggawe file /root/zi/.git/hooks/post-merge kanthi isi ing ngisor iki:
Kita bakal nggawe script makebgp sing pancing nuduhake sethitik mengko.
Nginstal lan ngatur layanan nuntun
Pasang manuk. Sayange, versi manuk sing saiki dikirim ing repositori Ubuntu padha karo kesegaran kanggo feces Archaeopteryx, mula kita kudu nambah PPA resmi pangembang piranti lunak menyang sistem kasebut.
Sawise iki, kita langsung mateni manuk kanggo IPv6 - kita ora perlu ing instalasi iki.
systemctl stop bird6
systemctl disable bird6
Ing ngisor iki minangka file konfigurasi layanan manuk minimalis (/etc/bird/bird.conf), sing cukup kanggo kita (lan aku ngelingake maneh yen ora ana sing nglarang ngembangake lan nyetel ide sing cocog karo kabutuhan sampeyan)
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 router - pengenal router, sing katon kaya alamat IPv4, nanging ora siji. Ing kasus kita, bisa dadi nomer 32-bit ing format alamat IPv4, nanging luwih becik kanggo nuduhake alamat IPv4 piranti sampeyan (ing kasus iki, VPS).
protokol langsung nemtokake antarmuka sing bakal bisa digunakake karo proses nuntun. Conto menehi saperangan conto jeneng, sampeyan bisa nambah liyane. Sampeyan mung bisa mbusak baris kasebut; ing kasus iki, server bakal ngrungokake kabeh antarmuka sing kasedhiya kanthi alamat IPv4.
Protokol statis yaiku sihir sing ngemot dhaptar prefiks lan alamat IP (sing bener / 32 prefiks, mesthi) saka file kanggo woro-woro sabanjure. Saka ngendi dhaptar kasebut bakal dirembug ing ngisor iki. Wigati dimangerteni manawa ngemot alamat IP dikomentari kanthi standar, alesan iki amarga volume unggahan sing akeh. Kanggo mbandhingake, nalika nulis, ana 78 baris ing dhaptar ater-ater, lan 85898 ing dhaptar alamat IP. Aku banget nyaranake miwiti lan debugging mung ing dhaptar ater-ater, lan apa utawa ora kanggo ngaktifake IP loading ing mangsa iku nganti sampeyan arep sawise nyobi karo router. Ora saben wong bisa gampang nyerna 85 ewu entri ing tabel routing.
protokol bgp, nyatane, nyetel bgp peering karo router. Alamat IP minangka alamat antarmuka eksternal router (utawa alamat antarmuka terowongan ing sisih router), 64998 lan 64999 minangka nomer sistem otonom. Ing kasus iki, padha bisa diutus ing wangun sembarang nomer 16-dicokot, nanging iku laku apik nggunakake nomer AS saka sawetara pribadi ditetepake dening RFC6996 - 64512-65534 klebu (ana format kanggo 32-dicokot ASNs, nanging ing kasus kita iki mesthi overkill). Konfigurasi sing diterangake nggunakake peering eBGP, sing nomer sistem otonomi layanan routing lan router kudu beda.
Kaya sing sampeyan ngerteni, layanan kasebut kudu ngerti alamat IP router, dadi yen sampeyan duwe alamat pribadi dinamis utawa non-routable (RFC1918) utawa bareng (RFC6598), sampeyan ora duwe pilihan kanggo ngunggahake peering eksternal. antarmuka, nanging layanan isih bakal bisa nang trowongan.
Sampeyan uga cukup jelas yen saka siji layanan sampeyan bisa nyedhiyakake rute menyang sawetara router sing beda - mung duplikat setelan kasebut kanthi nyalin bagean bgp protokol lan ngganti alamat IP pepadhamu. Pramila conto kasebut nuduhake setelan kanggo ndeleng ing njaba trowongan, minangka sing paling universal. Gampang kanggo nyopot menyang trowongan kanthi ngganti alamat IP ing setelan kasebut.
Ngolah pendaptaran kanggo layanan nuntun
Saiki kita kudu, nyatane, nggawe dhaptar awalan lan alamat IP, sing kasebut ing statis protokol ing tahap sadurunge. Kanggo nindakake iki, kita njupuk file pendaptaran lan nggawe file sing kita butuhake saka nggunakake script ing ngisor iki, diselehake ing /root/blacklist/makebgp
Saiki sampeyan bisa mbukak kanthi manual lan mirsani tampilan file ing /etc/bird.
Paling kamungkinan, manuk ora bisa digunakake kanggo sampeyan saiki, amarga ing tataran sadurunge sampeyan takon kanggo nggoleki file sing durung ana. Mula, kita miwiti lan priksa manawa wis diwiwiti:
systemctl start bird
birdc show route
Output saka printah kapindho kudu nuduhake babagan 80 cathetan (iki saiki, nanging yen sampeyan nyetel iku, kabeh bakal gumantung ing zealousness saka RKN ing mblokir jaringan) kaya iki:
bakal nuduhake status protokol ing layanan kasebut. Nganti sampeyan wis ngatur router (ndeleng titik sabanjure), protokol OurRouter bakal ing negara wiwitan (Sambungake utawa fase Aktif), lan sawise sambungan sukses bakal pindhah menyang negara munggah (Fase Madeg). Contone, ing sistemku, output printah iki katon kaya iki:
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
Nyambungake router
Saben uwong mesthi kesel maca footcloth iki, nanging ati-ati - pungkasane wis cedhak. Kajaba iku, ing bagean iki aku ora bakal bisa menehi pandhuan langkah-langkah - bakal beda kanggo saben pabrikan.
Nanging, aku bisa nuduhake sawetara conto. Logika utama yaiku ngunggahake peering BGP lan nemtokake nexthop kanggo kabeh prefiks sing ditampa, nuding menyang trowongan kita (yen kita kudu ngirim lalu lintas liwat antarmuka p2p) utawa alamat IP nexthop yen lalu lintas bakal menyang ethernet).
Contone, ing Mikrotik ing RouterOS iki ditanggulangi kaya ing ngisor iki
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
Yen trowongan sing padha digunakake kanggo peering BGP lan kanggo ngirim lalu lintas sing migunani, ora perlu nyetel nexthop; bakal disetel kanthi bener nggunakake protokol kasebut. Nanging yen sampeyan nyetel kanthi manual, ora bakal dadi luwih elek.
Ing platform liyane, sampeyan kudu nemtokake konfigurasi dhewe, nanging yen sampeyan duwe kesulitan, tulis ing komentar, aku bakal nyoba nulungi.
Sawise sesi BGP sampeyan wis diwiwiti, rute menyang jaringan gedhe wis teka lan diinstal ing meja, lalu lintas wis mili menyang alamat saka wong-wong mau lan rasa seneng cedhak, sampeyan bisa bali menyang layanan manuk lan nyoba uncomment entri ana sing nyambungake dhaptar alamat IP, eksekusi sawise iku
systemctl reload bird
lan deleng carane router sampeyan nransfer 85 ewu rute kasebut. Disiapake kanggo nyopot lan mikir babagan apa sing kudu ditindakake :)
Total
Secara teoritis, sawise ngrampungake langkah-langkah sing diterangake ing ndhuwur, sampeyan saiki duwe layanan sing kanthi otomatis ngarahake lalu lintas menyang alamat IP sing dilarang ing Federasi Rusia liwat sistem panyaring.
Bisa, mesthi, bisa ditingkatake. Contone, cukup gampang kanggo ngringkes dhaptar alamat IP nggunakake solusi perl utawa python. Skrip Perl prasaja sing nindakake iki nggunakake Net :: CIDR :: Lite ngowahi 85 ewu awalan dadi 60 (ora ewu), nanging, mesthi, kalebu sawetara alamat sing luwih gedhe tinimbang sing diblokir.
Wiwit layanan kasebut beroperasi ing tingkat katelu model ISO/OSI, ora bakal nylametake sampeyan saka mblokir situs/kaca yen alamat sing salah kaya sing dicathet ing registri. Nanging bebarengan karo registri, file nxdomain.txt teka saka github, sing kanthi sawetara stroke script gampang dadi sumber alamat, contone, plugin SwitchyOmega ing Chrome.
Sampeyan uga perlu kanggo sebutno solusi kasebut mbutuhake refinement tambahan yen sampeyan ora mung pangguna Internet, nanging uga nerbitake sawetara sumber daya dhewe (contone, situs web utawa server mail nganggo sambungan iki). Nggunakake sarana router, sampeyan kudu ngikat lalu lintas metu saka layanan iki menyang alamat umum sampeyan, yen ora, sampeyan bakal kelangan konektivitas karo sumber daya sing dilindhungi dening dhaptar prefiks sing ditampa dening router.
Yen sampeyan duwe pitakon, takon, aku siap mangsuli.
UPD. matur nuwun pandhu arah и TerAnYu kanggo paramèter kanggo git sing ngidini ngurangi volume download.
UPD2. Kanca-kanca, kayane aku salah amarga ora nambah instruksi kanggo nyetel trowongan antarane VPS lan router menyang artikel kasebut. A akèh pitakonan sing wungu dening iki.
Yen ngono, aku bakal nyathet maneh yen sadurunge miwiti pandhuan iki, sampeyan wis ngonfigurasi trowongan VPN menyang arah sing dibutuhake lan mriksa fungsine (contone, kanthi ngowahi lalu lintas ing kana kanthi standar utawa statis). Yen sampeyan durung ngrampungake tahap iki, ora ana gunane kanggo ngetutake langkah-langkah ing artikel kasebut. Aku durung duwe teks dhewe babagan iki, nanging yen sampeyan google "nyiyapake server OpenVPN" bebarengan karo jeneng sistem operasi sing diinstal ing VPS, lan "nyiyapake klien OpenVPN" kanthi jeneng router sampeyan. , sampeyan bakal nemokake sawetara artikel babagan topik iki, kalebu ing Habré.
UPD3. Ora dikurbanake Aku wrote kode sing dadi dump.csv menyang file asil kanggo manuk karo ringkesan opsional saka alamat IP. Mulane, bagean "Ngolah pendaptaran kanggo layanan rute" bisa diganti kanthi nelpon program kasebut. https://habr.com/post/354282/#comment_10782712
UPD4. A little work on errors (Aku ora nambah menyang teks):
1) tinimbang systemctl reload manuk iku ndadekake pangertèn kanggo nggunakake printah birdc ngatur.
2) ing router Mikrotik, tinimbang ngganti nexthop menyang IP sisih loro trowongan / routing filter add action=accept chain=dynamic-in protocol=bgp comment=»Setel nexthop»set-in-nexthop=172.30.1.1 iku ndadekake pangertèn kanggo nemtokake rute langsung menyang antarmuka trowongan, tanpa alamat / routing filter add action=accept chain=dynamic-in protocol=bgp comment=»Setel nexthop» set-in-nexthop-direct=<jeneng antarmuka>
UPD5. Layanan anyar wis katon https://antifilter.download, saka ngendi sampeyan bisa njupuk dhaptar alamat IP sing wis siap. Dianyari saben setengah jam. Ing sisih klien, kabeh sing isih ana yaiku pigura rekaman kanthi "rute ... nolak" sing cocog.
Lan ing wektu iki, mbokmenawa, cukup kanggo ngobong mbah putri lan nganyari artikel kasebut.
UPD6. Versi artikel sing wis diowahi kanggo wong sing ora pengin ngerti, nanging pengin miwiti - kene.