Kuanzisha BGP ili kukwepa kuzuia, au "Jinsi nilivyoacha kuogopa na nikapenda RKN"

Naam, sawa, kuhusu "kupendwa" ni kuzidisha. Badala yake, “aliweza kuishi pamoja.”

Kama mnajua nyote, tangu Aprili 16, 2018, Roskomnadzor imekuwa ikizuia ufikiaji wa rasilimali kwenye Mtandao kwa njia pana sana, na kuongeza kwenye "Daftari la Pamoja la majina ya kikoa, orodha za kurasa za tovuti kwenye mtandao na anwani za mtandao zinazoruhusu kutambua tovuti. kwenye mtandao," iliyo na habari ambayo usambazaji wake ni marufuku katika Shirikisho la Urusi" (katika maandishi - rejista tu) na / 10 wakati mwingine. Matokeo yake, wananchi wa Shirikisho la Urusi na wafanyabiashara wanateseka, wamepoteza upatikanaji wa rasilimali za kisheria kabisa wanazohitaji.

Baada ya kusema katika maoni kwa moja ya makala kuhusu Habre kwamba nilikuwa tayari kusaidia wahasiriwa kwa kuanzisha mpango wa kupita, watu kadhaa walikuja kwangu wakiomba msaada kama huo. Wakati kila kitu kilifanya kazi kwao, mmoja wao alipendekeza kuelezea mbinu hiyo katika makala. Baada ya mawazo fulani, niliamua kuvunja ukimya wangu kwenye tovuti na kujaribu mara moja kuandika kitu cha kati kati ya mradi na chapisho la Facebook, i.e. habrapost. Matokeo ni mbele yako.

Onyo

Kwa kuwa sio halali sana kuchapisha njia za kupitisha kuzuia ufikiaji wa habari iliyokatazwa kwenye eneo la Shirikisho la Urusi, madhumuni ya kifungu hiki itakuwa kuzungumza juu ya njia ambayo hukuruhusu kupata ufikiaji wa rasilimali ambazo zinaruhusiwa kwenye eneo la Shirikisho la Urusi, lakini kutokana na vitendo vya mtu mwingine hazipatikani moja kwa moja kupitia mtoa huduma wako. Na ufikiaji wa rasilimali zingine zilizopatikana kama matokeo ya vitendo kutoka kwa kifungu ni athari mbaya na sio kusudi la kifungu hicho.

Pia, kwa kuwa mimi kimsingi ni mbunifu wa mtandao kwa taaluma, wito na njia ya maisha, programu na Linux sio hoja zangu kali. Kwa hiyo, bila shaka, maandiko yanaweza kuandikwa vizuri zaidi, masuala ya usalama katika VPS yanaweza kufanyiwa kazi kwa undani zaidi, nk. Mapendekezo yako yatakubaliwa kwa shukrani, ikiwa yana maelezo ya kutosha - nitafurahi kuwaongeza kwenye maandishi ya kifungu hicho.

TL; DR

Tunaboresha ufikiaji wa rasilimali kiotomatiki kupitia handaki lako lililopo kwa kutumia nakala ya sajili na itifaki ya BGP. Lengo ni kuondoa trafiki yote inayoelekezwa kwa rasilimali zilizozuiwa kwenye handaki. Maelezo ya chini, zaidi maagizo ya hatua kwa hatua.

Unahitaji nini kwa hili?

Kwa bahati mbaya, chapisho hili sio la kila mtu. Ili kutumia mbinu hii, utahitaji kuweka vipengele kadhaa pamoja:

  1. Lazima uwe na seva ya linux mahali pengine nje ya uwanja wa kuzuia. Au angalau hamu ya kuwa na seva kama hiyo - kwa bahati nzuri sasa inagharimu kutoka $ 9 / mwaka, na ikiwezekana chini. Njia hiyo pia inafaa ikiwa una handaki tofauti ya VPN, basi seva inaweza kupatikana ndani ya uwanja wa kuzuia.
  2. Kipanga njia chako kinapaswa kuwa mahiri vya kutosha kuweza
    • mteja wowote wa VPN unayependa (Napendelea OpenVPN, lakini inaweza kuwa PPTP, L2TP, GRE+IPSec au chaguo jingine lolote linalounda kiolesura cha handaki);
    • Itifaki ya BGPv4. Inayomaanisha kuwa kwa SOHO inaweza kuwa Mikrotik au kipanga njia chochote kilicho na OpenWRT/LEDE/sawa na programu maalum inayokuruhusu kusakinisha Quagga au Ndege. Kutumia router ya PC pia sio marufuku. Kwa upande wa biashara, tafuta usaidizi wa BGP katika hati za kipanga njia chako cha mpaka.
  3. Unapaswa kuwa na ufahamu wa matumizi ya Linux na teknolojia za mitandao, ikiwa ni pamoja na itifaki ya BGP. Au angalau unataka kupata wazo hilo. Kwa kuwa siko tayari kukumbatia ukuu wakati huu, itabidi usome baadhi ya vipengele ambavyo hueleweki kwako peke yako. Hata hivyo, bila shaka, nitajibu maswali maalum katika maoni na siwezekani kuwa peke yangu kujibu, hivyo usisite kuuliza.

Ni nini kinachotumika katika mfano

  • Nakala ya rejista - kutoka https://github.com/zapret-info/z-i 
  • VPS - Ubuntu 16.04
  • Huduma ya uelekezaji - ndege 1.6.3   
  • Kipanga njia - Mikrotik hAP ac
  • Folda za kufanya kazi - kwa kuwa tunafanya kazi kama mzizi, zaidi ya kila kitu kitakuwa kwenye folda ya nyumbani ya mizizi. Mtawalia:
    • /root/blacklist - folda ya kufanya kazi na hati ya mkusanyiko
    • /mzizi/zi - nakala ya Usajili kutoka kwa github
    • / nk/ndege - folda ya kawaida kwa mipangilio ya huduma ya ndege
  • Anwani ya IP ya nje ya VPS yenye seva ya uelekezaji na mahali pa kukomesha handaki ni 194.165.22.146, ASN 64998; Anwani ya IP ya nje ya kipanga njia - 81.177.103.94, ASN 64999
  • Anwani za IP ndani ya handaki ni 172.30.1.1 na 172.30.1.2, kwa mtiririko huo.

Kuanzisha BGP ili kukwepa kuzuia, au "Jinsi nilivyoacha kuogopa na nikapenda RKN"

Bila shaka, unaweza kutumia routers nyingine yoyote, mifumo ya uendeshaji na bidhaa za programu, kurekebisha suluhisho kwa mantiki yao.

Kwa kifupi - mantiki ya suluhisho

  1. Vitendo vya maandalizi
    1. Kupata VPS
    2. Kuinua handaki kutoka kwa kipanga njia hadi VPS
  2. Tunapokea na kusasisha mara kwa mara nakala ya Usajili
  3. Kufunga na kusanidi huduma ya uelekezaji
  4. Tunaunda orodha ya njia tuli za huduma ya uelekezaji kulingana na Usajili
  5. Tunaunganisha router kwenye huduma na kusanidi kutuma trafiki yote kupitia handaki.

Suluhisho halisi

Vitendo vya maandalizi

Kuna huduma nyingi kwenye Mtandao ambazo hutoa VPS kwa bei nzuri sana. Kufikia sasa nimepata na ninatumia chaguo kwa $ 9 / mwaka, lakini hata ikiwa haujisumbui sana, kuna chaguo nyingi kwa 1E / mwezi kwenye kila kona. Swali la kuchagua VPS liko mbali zaidi ya upeo wa makala hii, hivyo ikiwa mtu haelewi kitu kuhusu hili, uulize katika maoni.

Ikiwa unatumia VPS sio tu kwa huduma ya uelekezaji, lakini pia kusitisha handaki juu yake, unahitaji kuinua handaki hii na, kwa hakika, usanidi NAT kwa hiyo. Kuna idadi kubwa ya maagizo juu ya vitendo hivi kwenye mtandao, sitarudia hapa. Sharti kuu la handaki kama hiyo ni kwamba lazima itengeneze kiolesura tofauti kwenye kipanga njia chako kinachounga mkono handaki kuelekea VPS. Teknolojia nyingi za VPN zinazotumika hutimiza mahitaji haya - kwa mfano, OpenVPN katika hali ya tun ni kamili.

Kupata nakala ya Usajili

Kama Jabrail alivyosema, “Atakayetuzuia atatusaidia. Kwa kuwa RKN inaunda rejista ya rasilimali zilizopigwa marufuku, itakuwa dhambi kutotumia rejista hii kutatua shida yetu. Tutapokea nakala ya Usajili kutoka kwa github.

Tunaenda kwa seva yako ya Linux, tuanguke kwenye muktadha wa mizizi (sudo su -) na usakinishe git ikiwa haijasanikishwa tayari.

apt install git

Nenda kwenye saraka yako ya nyumbani na utoe nakala ya Usajili.

cd ~ && git clone --depth=1 https://github.com/zapret-info/z-i 

Tunaweka sasisho la cron (mimi hufanya hivyo mara moja kila dakika 20, lakini unaweza kuchagua muda wowote unaokuvutia). Ili kufanya hivyo tunazindua crontab -e na ongeza laini ifuatayo kwake:

*/20 * * * * cd ~/z-i && git pull && git gc

Tunaunganisha ndoano ambayo itaunda faili za huduma ya uelekezaji baada ya kusasisha Usajili. Ili kufanya hivyo, tengeneza faili /root/zi/.git/hooks/post-merge na maudhui yafuatayo:

#!/usr/bin/env bash
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"
check_run() {
    echo "$changed_files" | grep --quiet "$1" && eval "$2"
}
check_run dump.csv "/root/blacklist/makebgp"

na usisahau kuifanya itekelezwe

chmod +x /root/z-i/.git/hooks/post-merge

Tutaunda maandishi ya makebgp ambayo ndoano inarejelea baadaye kidogo.

Kufunga na kusanidi huduma ya uelekezaji

Weka ndege. Kwa bahati mbaya, toleo la ndege lililotumwa kwa sasa kwenye hazina za Ubuntu linalinganishwa na hali mpya ya kinyesi cha Archeopteryx, kwa hivyo tunahitaji kwanza kuongeza PPA rasmi ya wasanidi programu kwenye mfumo.

add-apt-repository ppa:cz.nic-labs/bird
apt update
apt install bird

Baada ya hayo, tunazima ndege mara moja kwa IPv6 - hatutahitaji katika usakinishaji huu.

systemctl stop bird6
systemctl disable bird6

Hapo chini kuna faili ndogo ya usanidi wa huduma ya ndege (/etc/bird/bird.conf), ambayo inatutosha kabisa (na ninakukumbusha tena kwamba hakuna mtu anayekataza kukuza na kurekebisha wazo ili kuendana na mahitaji yako mwenyewe)

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;
}

kitambulisho cha router - kitambulisho cha router, ambayo inaonekana kama anwani ya IPv4, lakini sio moja. Kwa upande wetu, inaweza kuwa nambari yoyote ya 32-bit katika umbizo la anwani ya IPv4, lakini ni fomu nzuri kuashiria haswa anwani ya IPv4 ya kifaa chako (katika kesi hii, VPS).

itifaki moja kwa moja inafafanua ni miingiliano gani itafanya kazi na mchakato wa kuelekeza. Mfano unatoa mifano michache ya majina, unaweza kuongeza wengine. Unaweza kufuta laini tu; katika kesi hii, seva itasikiliza miingiliano yote inayopatikana na anwani ya IPv4.

itifaki tuli ni uchawi wetu ambao hupakia orodha za viambishi awali na anwani za IP (ambazo kwa hakika ni /32 viambishi awali, bila shaka) kutoka kwa faili kwa tangazo linalofuata. Orodha hizi zinatoka wapi zitajadiliwa hapa chini. Tafadhali kumbuka kuwa kupakia anwani za IP kunatolewa maoni kwa chaguo-msingi, sababu ya hii ni kiasi kikubwa cha upakiaji. Kwa kulinganisha, wakati wa kuandika, kuna mistari 78 katika orodha ya viambishi awali, na 85898 katika orodha ya anwani za IP. Ninapendekeza sana kuanza na kurekebisha tu kwenye orodha ya viambishi awali, na ikiwa au kuwezesha upakiaji wa IP. siku zijazo ni juu yako kuamua baada ya kujaribu na kipanga njia chako. Sio kila mmoja wao anayeweza kuchimba kwa urahisi maingizo elfu 85 kwenye jedwali la uelekezaji.

itifaki bgp, kwa kweli, husanidi kutazama kwa bgp na kipanga njia chako. Anwani ya IP ni anwani ya interface ya nje ya router (au anwani ya interface ya handaki kwenye upande wa router), 64998 na 64999 ni nambari za mifumo ya uhuru. Katika kesi hii, zinaweza kugawiwa kwa njia ya nambari zozote za 16-bit, lakini ni mazoezi mazuri kutumia nambari za AS kutoka safu ya kibinafsi iliyofafanuliwa na RFC6996 - 64512-65534 ikijumuisha (kuna umbizo la 32-bit ASNs, lakini kwa upande wetu hii ni dhahiri kupita kiasi). Usanidi ulioelezewa hutumia kutazama kwa eBGP, ambayo nambari za mifumo ya uhuru wa huduma ya uelekezaji na kipanga njia lazima ziwe tofauti.

Kama unavyoona, huduma inahitaji kujua anwani ya IP ya kipanga njia, kwa hivyo ikiwa una anwani ya faragha inayobadilika au isiyoweza kubadilika (RFC1918) au anwani ya pamoja (RFC6598), huna chaguo la kuongeza kutazama kwenye ya nje. interface, lakini huduma bado itafanya kazi ndani ya handaki.

Pia ni wazi kabisa kwamba kutoka kwa huduma moja unaweza kutoa njia kwa ruta kadhaa tofauti - tu nakala ya mipangilio kwao kwa kunakili sehemu ya bgp ya itifaki na kubadilisha anwani ya IP ya jirani. Ndio maana mfano unaonyesha mipangilio ya kutazama nje ya handaki, kama ya ulimwengu wote. Ni rahisi kuziondoa kwenye handaki kwa kubadilisha anwani za IP katika mipangilio ipasavyo.

Inachakata sajili kwa huduma ya uelekezaji

Sasa tunahitaji, kwa kweli, kuunda orodha za viambishi awali na anwani za IP, ambazo zilitajwa katika tuli ya itifaki katika hatua ya awali. Ili kufanya hivyo, tunachukua faili ya Usajili na kufanya faili tunazohitaji kutoka kwake kwa kutumia script ifuatayo, iliyowekwa ndani /root/blacklist/makebgp

#!/bin/bash
cut -d";" -f1 /root/z-i/dump.csv| tr '|' 'n' |  tr -d ' ' > /root/blacklist/tmpaddr.txt
cat /root/blacklist/tmpaddr.txt | grep / | sed 's_.*_route & reject;_' > /etc/bird/pfxlist.txt
cat /root/blacklist/tmpaddr.txt | sort | uniq | grep -Eo "([0-9]{1,3}[.]){3}[0-9]{1,3}" | sed 's_.*_route &/32 reject;_' > /etc/bird/iplist.txt
/etc/init.d/bird reload
logger 'bgp list compiled'

Usisahau kuifanya itekelezwe

chmod +x /root/blacklist/makebgp

Sasa unaweza kuiendesha kwa mikono na uangalie mwonekano wa faili kwenye /etc/bird.

Uwezekano mkubwa zaidi, ndege haifanyi kazi kwako kwa wakati huu, kwa sababu katika hatua ya awali uliiuliza itafute faili ambazo hazikuwepo. Kwa hivyo, tunaizindua na kuangalia ikiwa imeanza:

systemctl start bird
birdc show route

Matokeo ya amri ya pili inapaswa kuonyesha kuhusu rekodi 80 (hii ni kwa sasa, lakini unapoiweka, kila kitu kitategemea bidii ya RKN katika kuzuia mitandao) kitu kama hiki:

54.160.0.0/12      unreachable [static_bgp 2018-04-19] * (200)

Timu

birdc show protocol

itaonyesha hali ya itifaki ndani ya huduma. Mpaka umesanidi router (angalia hatua inayofuata), itifaki ya OurRouter itakuwa katika hali ya kuanza (Unganisha au Awamu ya Active), na baada ya kuunganisha kwa mafanikio itaenda kwenye hali ya juu (Awamu iliyoanzishwa). Kwa mfano, kwenye mfumo wangu matokeo ya amri hii yanaonekana kama hii:

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

Kuunganisha kipanga njia

Labda kila mtu amechoka kusoma kitambaa hiki cha miguu, lakini jipe ​​moyo - mwisho umekaribia. Aidha, katika sehemu hii sitaweza kutoa maelekezo ya hatua kwa hatua - itakuwa tofauti kwa kila mtengenezaji.

Walakini, naweza kukuonyesha mifano michache. Mantiki kuu ni kuinua utazamaji wa BGP na kukabidhi nexthop kwa viambishi awali vyote vilivyopokewa, ikielekeza kwenye handaki yetu (ikiwa tunahitaji kutuma trafiki kupitia kiolesura cha p2p) au anwani ya IP ya nexthop ikiwa trafiki itaenda kwenye ethaneti).

Kwa mfano, kwenye Mikrotik katika RouterOS hii inatatuliwa kama ifuatavyo

/routing bgp instance set default as=64999 ignore-as-path-len=yes router-id=172.30.1.2
/routing bgp peer add in-filter=dynamic-in multihop=yes name=VPS remote-address=194.165.22.146 remote-as=64998 ttl=default
/routing filter add action=accept chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop=172.30.1.1

na katika Cisco IOS - kama hii

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

Iwapo handaki sawa linatumika kwa kutazama kwa BGP na kwa kusambaza trafiki muhimu, si lazima kuweka nexthop; itawekwa kwa usahihi kwa kutumia itifaki. Lakini ikiwa utaiweka kwa mikono, haitakuwa mbaya zaidi.

Kwenye majukwaa mengine, utalazimika kufikiria usanidi mwenyewe, lakini ikiwa una shida yoyote, andika kwenye maoni, nitajaribu kusaidia.

Baada ya kikao chako cha BGP kuanza, njia za mitandao mikubwa zimefika na zimewekwa kwenye meza, trafiki imetiririka kwa anwani kutoka kwao na furaha iko karibu, unaweza kurudi kwenye huduma ya ndege na ujaribu kufuta kiingilio hapo kinachounganisha orodha ya anwani za IP, tekeleza baada ya hapo

systemctl reload bird

na uone jinsi kipanga njia chako kilihamisha njia hizi 85. Kuwa tayari kuchomoa na ufikirie cha kufanya nayo :)

Katika jumla ya

Kinadharia, baada ya kukamilisha hatua zilizoelezwa hapo juu, sasa una huduma ambayo inaelekeza kiotomatiki trafiki kwa anwani za IP zilizopigwa marufuku katika Shirikisho la Urusi kabla ya mfumo wa kuchuja.

Inaweza, bila shaka, kuboreshwa. Kwa mfano, ni rahisi kufupisha orodha ya anwani za IP kwa kutumia suluhisho za perl au python. Hati rahisi ya Perl inayofanya hivi kwa kutumia Net::CIDR::Lite hugeuza viambishi awali elfu 85 kuwa 60 (si elfu), lakini, bila shaka, inashughulikia safu kubwa zaidi ya anwani kuliko iliyozuiwa.

Kwa kuwa huduma inafanya kazi katika kiwango cha tatu cha muundo wa ISO/OSI, haitakuokoa kutokana na kuzuia tovuti/ukurasa ikiwa itatatua kwa anwani isiyo sahihi kama ilivyorekodiwa kwenye sajili. Lakini pamoja na Usajili, faili nxdomain.txt inafika kutoka kwa github, ambayo kwa viboko vichache vya hati hugeuka kwa urahisi kuwa chanzo cha anwani kwa, kwa mfano, Plugin ya SwitchyOmega katika Chrome.

Pia ni lazima kutaja kwamba suluhisho linahitaji uboreshaji wa ziada ikiwa wewe si mtumiaji wa mtandao tu, lakini pia kuchapisha rasilimali fulani peke yako (kwa mfano, tovuti au seva ya barua inaendesha kwenye uhusiano huu). Kutumia njia za router, ni muhimu kufunga trafiki inayotoka kutoka kwa huduma hii kwa anwani yako ya umma, vinginevyo utapoteza muunganisho na rasilimali hizo ambazo zimefunikwa na orodha ya viambishi awali vilivyopokelewa na router.

Ikiwa una maswali yoyote, uliza, niko tayari kujibu.

UPD. Asante baharini и TerAnYu kwa vigezo vya git vinavyoruhusu kupunguza viwango vya upakuaji.

UPD2. Wenzangu, inaonekana nilifanya makosa kwa kutoongeza maagizo ya kusanidi handaki kati ya VPS na kipanga njia kwenye kifungu. Maswali mengi yanafufuliwa na hii.
Ikiwezekana, nitakumbuka tena kwamba kabla ya kuanza mwongozo huu, tayari umesanidi handaki ya VPN katika mwelekeo unaohitaji na kuangalia utendaji wake (kwa mfano, kwa kugeuza trafiki huko kwa chaguo-msingi au kwa hesabu). Ikiwa haujakamilisha awamu hii bado, haina maana sana kufuata hatua katika makala. Bado sina maandishi yangu mwenyewe juu ya hili, lakini ikiwa utatumia google "kusanidi seva ya OpenVPN" pamoja na jina la mfumo wa uendeshaji uliowekwa kwenye VPS, na "kusanidi mteja wa OpenVPN" kwa jina la kipanga njia chako. , kuna uwezekano mkubwa kupata idadi ya makala kuhusu somo hili , ikiwa ni pamoja na kuhusu Habré.

UPD3. Haijatolewa Niliandika msimbo unaogeuza dump.csv kuwa faili inayotokana na ndege yenye muhtasari wa hiari wa anwani za IP. Kwa hivyo, sehemu ya "Kusindika Usajili kwa huduma ya uelekezaji" inaweza kubadilishwa kwa kupiga programu yake. https://habr.com/post/354282/#comment_10782712

UPD4. Kazi kidogo juu ya makosa (sikuwaongeza kwenye maandishi):
1) badala yake systemctl pakia tena ndege inaleta maana kutumia amri usanidi wa ndege.
2) kwenye kipanga njia cha Mikrotik, badala ya kubadilisha nexthop kuwa IP ya upande wa pili wa handaki. /kichujio cha kuelekeza ongeza action=kubali mnyororo=itifaki-inayobadilika=bgp maoni=»Weka nexthop» set-in-nexthop=172.30.1.1 ni mantiki kutaja njia moja kwa moja kwenye kiolesura cha handaki, bila anwani /kichujio cha kuelekeza ongeza action=kubali chain=dynamic-in protocol=bgp comment=»Weka nexthop» set-in-nexthop-direct=<interface name>

UPD5. Huduma mpya imeonekana https://antifilter.download, kutoka ambapo unaweza kuchukua orodha zilizotengenezwa tayari za anwani za IP. Inasasishwa kila nusu saa. Kwa upande wa mteja, kilichobaki ni kuweka rekodi na "njia ... kukataa" inayolingana.
Na katika hatua hii, pengine, inatosha kumtukana bibi yako na kusasisha makala.

UPD6. Toleo lililorekebishwa la kifungu kwa wale ambao hawataki kuijua, lakini wanataka kuanza - hapa.

Chanzo: mapenzi.com

Kuongeza maoni