Ndërtojmë një router SOCKS në një laptop me Debian 10

Tërë vitin (ose dy) kam shtyrë publikimin e këtij artikulli për arsye kryesore - tashmë kam botuar dy artikuj, në të cilët përshkruaj procesin e ndërtimit të një routeri SOCKS nga një laptop i zakonshëm me Debian.

Megjithatë, që nga atëherë versioni stabil i Debian u përditësua në Buster, më janë drejtuar mjaft njerëz në privat për ndihmë në konfigurim, që do të thotë se artikujt e mi të mëparshëm nuk janë shterues. Çfarë do, unë vetë e kisha parasysh se metodat e përshkruara në to nuk zbulojnë plotësisht të gjitha hollësitë e konfigurimit të Linux për orientimin në SOCKS. Për më tepër, ato janë shkruar për Debian Stretch, dhe pas përditësimit në Buster, në sistemin e inicializimit systemd, kam vënë re disa ndryshime të vogla në bashkëveprimin e shërbimeve. Po ashtu, në artikujt e vetë nuk kam përdorur systemd-networkd, ndonëse ajo është më e përshtatshme për konfigurime komplekse të rrjetit.

Përveç ndryshimeve të përmendura më lart, në konfigurimin tim janë shtuar shërbime si hostapd — një shërbim për virtualizimin e pikës së qasjes, ntp për sinkronizimin e kohës së klientëve në rrjetin lokal, dnscrypt-proxy për enkriptimin e lidhjeve përmes protokollit DNS dhe mbajtjen nën kontroll të reklamave në klientët e rrjetit lokal, si dhe, siç përmenda më parë, systemd-networkd për konfigurimin e ndërfaqeve të rrjetit.

Këtu është një skemë e thjeshtë, e brendshme e funksionimit të një routeri të tillë.

Ndërtojmë një router SOCKS në një laptop me Debian 10

Pra, le të rikujtojmë cilat janë objektivat e këtij cikli artikujsh:

  1. Të orientojmë në SOCKS të gjitha lidhjet e OS-së, si dhe lidhjet e të gjitha pajisjeve që janë në të njëjtin rrjet me laptopin.
  2. Laptopi në rastin tim duhet të mbetet plotësisht mobil. Që do të thotë, të ofrojë mundësinë për të përdorur mjedisin e tryezës së punës dhe të mos jetë i lidhur me një vendndodhje fizike.
  3. Pika e fundit nënkupton lidhjen dhe orientojning vetëm përmes ndërfaqes së integruar të pa kabllit.
  4. Po ashtu, të krijoj një udhëzues të plotë, si dhe të analizoj teknologjitë përkatëse sa më shumë që të jetë e mundur nga njohuritë e mia të skromta.

Çfarë do të shqyrtohet në këtë artikull:

  1. git — do të shkarkojmë repository-t e projekteve tun2socks, e nevojshme për orientoimin e trafikut TCP në SOCKS, dhe create_ap — skripti për automatizimin e konfigurimit të pikës virtuale të qasjes duke përdorur hostapd.
  2. tun2socks — do të ndërtomë dhe instalojmë shërbimin systemd në sistem.
  3. systemd-networkd — do të konfiguroni ndërfaqet pa tela dhe virtuale, tabelat e rrugëzimit statik dhe redirektimin e paketave.
  4. create_ap — do të instaloni shërbimin systemd në sistem, do të konfiguroni dhe aktivizoni pikën virtuale të aksesit.

Hapat opsionale:

  • ntp — do të instaloni dhe konfiguroni serverin për sinkronizimin e kohës në klientët e pikës virtuale të aksesit.
  • dnscrypt-proxy — do të kriptoni kërkesat DNS, do t'i rrugëzoni ato në SOCKS dhe do të çaktivizoni domenet e reklamave për rrjetin lokal.

Pse duhet të bëjmë këtë?

Ky është një nga mënyrat për të organizuar mbrojtjen e lidhjeve TCP në rrjetin lokal. Avantazhi kryesor është se të gjitha lidhjet shkojnë në SOCKS, nëse për to nuk është ndërtuar një rrugëzim statik përmes gateway-së origjinale. Kjo do të thotë se nuk është e nevojshme t'i jepni konfigurimet SOCKS serverëve individualë apo klientëve në rrjetin lokal - të gjithë shkojnë në SOCKS me parazgjedhje, pasi ai është gateway standard, derisa ne të specifikojmë ndryshe.

Dhe në thelb, ne po shtojmë një router të dytë të kriptuar si laptopin përpara router-it origjinal dhe po përdorim lidhjen e internetit të router-it origjinal për kërkesat SOCKS që tashmë janë të kriptuara nga laptopi, i cili, në këndvështrim, rrugëzon dhe kripton kërkesat e klientëve në rrjetin lokal.

Nga këndvështrimi i ofruesit, ne jemi vazhdimisht të lidhur me një server me trafik të kriptuar.

Për pasojë, të gjitha pajisjet lidhen me pikën virtuale të aksesit të laptopit.

Instaloni tun2socks në sistemin tuaj

Sa herë që keni internet në makinën tuaj, shkarkoni të gjitha mjetet e nevojshme.

apt update
apt install git make cmake

Shkarkoni paketën badvpn

git clone https://github.com/ambrop72/badvpn

Një folder do të shfaqet në sistemin tuaj badvpn. Krijoni një folder të veçantë për ndërtimin

mkdir badvpn-build

Shkoni në të

cd badvpn-build

Ndërtoni tun2socks

cmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1

Instaloni në sistem

make install
  • Parametri -DBUILD_NOTHING_BY_DEFAULT=1 çaktivizon ndërtimin e të gjitha komponenteve të depozitës badvpn.
  • DBUILD_TUN2SOCKS=1 aktivizon ndërtimin e komponentit tun2socks.
  • make install — do të instalohet binari tun2socks në sistemin tuaj në adresën /usr/local/bin/badvpn-tun2socks.

Instaloni shërbimin tun2socks në systemd

Krijoni një skedar /etc/systemd/system/tun2socks.service me përmbajtjen e mëposhtme:

[Unit]
Description=SOCKS TCP Relay

[Service]
ExecStart=/usr/local/bin/badvpn-tun2socks --tundev tun2socks --netif-ipaddr 172.16.1.1 --netif-netmask 255.255.255.0 --socks-server-addr 127.0.0.1:9050

[Install]
WantedBy=multi-user.target
  • --tundev — merr emrin e ndërfaqes virtuale, të cilën ne e inicializojmë me systemd-networkd.
  • --netif-ipaddr — adresa rrjetit "routerit" tun2socks, në të cilin lidhet ndërfaqja virtuale. Më mirë të krijoni një nënrrjet të rezervuar.
  • --socks-server-addr — merr një soket (adresë:port i serverit SOCKS).

Nëse serveri juaj SOCKS kërkon autentifikim, mund të specifikoni parametrat --username dhe --password.

Pastaj regjistroni shërbimin

systemctl daemon-reload

Dhe aktivizoni

systemctl enable tun2socks

Para se të filloni shërbimin, sigurohuni që të kenë një ndërfaqe virtuale rrjeti.

Kaloni te systemd-networkd

Aktivizoni systemd-networkd:

systemctl enable systemd-networkd

Çaktivizoni shërbimet aktuale të rrjetit.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wait-online — është një shërbim që pret që të jetë një lidhje rrjeti e funksionshme para se systemd të vazhdojë me ngarkimin e shërbimeve të tjera që varen nga existencia e rrjetit. Ne e çaktivizojmë këtë, pasi do të kalojmë në një alternativë të systemd-networkd.

Le të aktivizojmë atë menjëherë:

systemctl enable systemd-networkd-wait-online

Konfiguroni ndërfaqen rrjetësore pa tela

Krijoni një skedar konfigurimi për systemd-networkd për ndërfaqen rrjetësore pa tela /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Emri — është emri i ndërfaqes suaj pa tela. Identifikoni atë me komandën ip a.
  • IPForward — është një direktivë që aktivizon ridrejtimin e paketave në ndërfaqen rrjetësore.
  • Adresa dhe i jep një IP ndërfaqes suaj pa tela. Ne e specifikojmë atë statikisht sepse me direktivën e barabartë DHCP=yes, systemd-networkd krijon një derë në sistemin tuaj si derë të paracaktuar. Pastaj gjithë trafik do të kalojë përmes derës origjinale dhe jo përmes ndërfaqes virtuale që do të krijojmë në një nënrrjet të ndryshëm. Mund të kontrolloni derën aktuale të paracaktuar me komandën ip r

Krijoni një rrugë statike për serverin tuaj SOCKS

Nëse serveri juaj SOCKS nuk është lokal, por i largët, do t'ju nevojitet të krijoni një rrugë statike për të. Për këtë, shtoni seksionin Rrugë në fund të skedarit tuaj të konfigurimit për ndërfaqen pa tela me përmbajtje si më poshtë:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Derë — është dera e paracaktuar ose adresa e pikës suaj origjinale të qasjes.
  • Destinacioni — është adresa e serverit SOCKS.

Konfiguroni wpa_supplicant për systemd-networkd

systemd-networkd përdor wpa_supplicant për t'u lidhur me një pikë qasjeje të mbrojtur. Gjatë përpjekjes për të "ngjitur" ndërfaqen pa tela, systemd-networkd aktivizon shërbimin wpa_supplicant@emriindex emri — është emri i interfaces së wireless. Nëse nuk e keni përdorur systemd-networkd deri tani, atëherë, sigurisht, ky shërbim do të mungojë në sistemin tuaj.

Prandaj krijoni atë me komandën:

systemctl enable wpa_supplicant@wlp6s0

Kam përdorur wlp6s0 si emrin e interfaces time wireless. Ju mund të keni një emër ndryshe. Mund ta mësoni atë me komandën ip l.

Tani shërbimi i krijuar wpa_supplicant@wlp6s0 do të ngrihet kur "ngrihet" interface i wireless, megjithatë, ajo, nga ana e saj, do të kërkojë cilësimet e SSID dhe fjalëkalimin e pikës së qasjes në skedarin /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Prandaj është e nevojshme ta krijoni atë me ndihmën e utilitarit wpa_passphrase.

Për këtë, ekzekutoni komandën:

wpa_passphrase SSID fjalëkalim>\/etc\/wpa_supplicant\/wpa_supplicant-wlp6s0.conf

ku SSID — është emri i pikës suaj të qasjes, fjalëkalim — fjalëkalimi, dhe wlp6s0 — emri i interfaces tuaj wireless.

Inicioni interface virtual për tun2socks

Krijoni një skedar për inicimin e një interface të ri virtual në sistemin/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Emri — është emri që systemd-networkd do t'i caktojë të ardhmes interface virtual kur të inicohet.
  • Kind — është tipi i interface virtual. Duke u bazuar në emrin e shërbimit tun2socks, mund të arrini të merrni me mend se ajo përdor një interface të tipit tun.
  • netdev — është shtrirja e skedarëve që systemd-networkd përdor për të inicuar interface të virtuale të rrjetit. Adresa dhe cilësimet e tjera të rrjetit për këto interface përcaktohen në .network-skedarët.

Krijoni një skedar të tillë /etc/systemd/network/25-tun2socks.network me përmbajtjen e mëposhtme:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2\/24
Gateway=172.16.1.1
  • Emri — emri i interface virtuale që keni caktuar në netdev-skedarin.
  • Adresa — IP adresa që do të caktohet interface virtuale. Duhet të jetë në të njëjtën rrjet me adresën që keni caktuar në shërbimin tun2socks
  • Derë — IP adresa "router" tun2socks, të cilin keni caktuar gjatë krijimit të shërbimit systemd.

Kështu, interface tun2socks ka adresën 172.16.1.2, dhe shërbimi tun2socks172.16.1.1, pra është gateway për të gjitha lidhjet nga interface virtuale.

Konfiguroni pikën virtuale të qasjes

Instaloni varësitë:

apt install util-linux procps hostapd iw haveged

Shkarkoni depozita create_ap në makinën tuaj:

git clone https:\/\/github.com\/oblique\/create_ap

Shkoni në dosjen e depozitës në makinën tuaj:

cd create_ap

Instaloni në sistem:

make install

Në sistemin tuaj do të shfaqet një konfigurim /etc/create_ap.conf. Ja opsionet kryesore për rregullim:

  • GATEWAY=10.0.0.1 — është më mirë ta bëni një subnet të rezervuar të veçantë.
  • NO_DNS=1 — çaktivizoni, pasi ky parametër do të kontrollohet nga interface-i virtual i systemd-networkd.
  • NO_DNSMASQ=1 — çaktivizoni për të njëjtën arsye.
  • WIFI_IFACE=wlp6s0 — ndërfaqja pa tela e laptopit.
  • INTERNET_IFACE=tun2socks — ndërfaqja virtuale e krijuar për tun2socks.
  • SSID=hostapd — emri i pikës virtuale të qasjes.
  • PASSPHRASE=12345678 — fjalëkalimi.

Mos harroni të aktivizoni shërbimin:

systemctl enable create_ap

Aktivizoni shërbimin DHCP në systemd-networkd

Shërbimi create_ap krijon në sistem ndërfaqen virtuale ap0. Idealisht, në këtë ndërfaqe "varët" dnsmasq, por përse të instaloni shërbime të panevojshme, nëse systemd-networkd ka një shërbim DHCP të integruar?

Për ta aktivizuar atë, do të përcaktojmë përputhjen rrjetore për pikën virtuale. Për këtë, krijoni një skedar /etc/systemd/network/25-ap0.network me përmbajtjen e mëposhtme:

[Match]
Name=ap0

[Network]
Address=10.0.0.1/24
DHCPServer=yes

[DHCPServer]
EmitDNS=yes
DNS=10.0.0.1
EmitNTP=yes
NTP=10.0.0.1

Pas aktivizimit të shërbimit create_ap, ap0, systemd-networkd automatikisht do t'i japë një IP dhe do të aktivizojë shërbimin DHCP.

Rreshtat EmitDNS=yes dhe DNS=10.0.0.1 kalojnë konfigurimet e serverit DNS te pajisjet e lidhura me pikën e qasjes.

Nëse nuk planifikoni të përdorni një server lokal DNS — në rastin tim është dnscrypt-proxy — mund të vendosni DNS=10.0.0.1DNS=192.168.1.1index 192.168.1.1 — adresa e gateways tuaj origjinal. Atëherë kërkesat DNS të hostit tuaj dhe rrjetit lokal do të kalojnë në mënyrë të pa enkriptuar përmes serverëve të ofruesit.

EmitNTP=yes dhe NTP=192.168.1.1 kalojnë konfigurimet NTP.

E njëjta gjë vlen për rreshtin NTP=10.0.0.1.

Instaloni dhe konfiguroni serverin NTP

Instaloni në sistem:

apt install ntp

Rregulloni konfigun /etc/ntp.conf. Komentoni adresat e grupeve standarde:

#pool 0.debian.pool.ntp.org iburst
#pool 1.debian.pool.ntp.org iburst
#pool 2.debian.pool.ntp.org iburst
#pool 3.debian.pool.ntp.org iburst

Shtoni adresat e serverëve publikë, për shembull, Google Public NTP:

server time1.google.com iburst
server time2.google.com iburst
server time3.google.com iburst
server time4.google.com iburst

Ofroni akses në server për klientët nga rrjeti juaj:

restrict 10.0.0.0 mask 255.255.255.0

Aktivizoni transmetimin në rrjetin tuaj:

broadcast 10.0.0.255

Së fundi, shtoni adresat e këtyre serverëve në tabelën e маршрутизimi statik. Për këtë, hapni skedarin e konfigurimit të ndërfaqes pa tela /etc/systemd/network/25-wlp6s0.network dhe shtoni në fund të seksionit Rrugë.

[Route]
Gateway=192.168.1.1
Destination=216.239.35.0

[Route]
Gateway=192.168.1.1
Destination=216.239.35.4

[Route]
Gateway=192.168.1.1
Destination=216.239.35.8

[Route]
Gateway=192.168.1.1
Destination=216.239.35.12

Mund të zbuloni adresat e serverëve tuaj NTP duke përdorur mjetin host në mënyrë të tillë:

host time1.google.com

Instaloni dnscrypt-proxy, hiqni reklamën dhe fshehni trafikun DNS nga ofruesi

apt install dnscrypt-proxy

Për të shërbyer kërkesat DNS të hostit dhe rrjetit lokal, rregulloni socketin /lib/systemd/system/dnscrypt-proxy.socket. Ndryshoni rreshtat e mëposhtme:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Rinisni systemd:

systemctl daemon-reload

Rregulloni konfigun /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Për të drejtuar lidhjet dnscrypt-proxy përmes tun2socks, shtoni më poshtë:

force_tcp = true

Rregulloni konfigun /etc/resolv.conf, i cili njofton serverin DNS të hostit.

nameserver 127.0.0.1
nameserver 192.168.1.1

Rreshti i parë përfshin përdorimin e dnscrypt-proxy, i dyti përdor portin origjinal, në rast se serveri dnscrypt-proxy nuk është i aksesueshëm.

Gati!

Rinovoni ose ndaloni shërbimet aktive të rrjetit:

systemctl stop networking NetworkManager NetworkManager-wait-online

Dhe rinisni të gjitha të nevojshmet:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Pas rinovimit ose rinisjes do të keni një pikë të dytë qasje, e cila do të drejtojë hostin dhe pajisjet e rrjetit lokal në SOCKS.

Ja si duket dalja ip a e një laptopi normal:

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: tun2socks:  mtu 1500 qdisc pfifo_fast state UP group default qlen 500
    link/none 
    inet 172.16.1.2/24 brd 172.16.1.255 scope global tun2socks
       valid_lft forever preferred_lft forever
    inet6 fe80::122b:260:6590:1b0e/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever
3: enp4s0:  mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether e8:11:32:0e:01:50 brd ff:ff:ff:ff:ff:ff
4: wlp6s0:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 4c:ed:de:cb:cf:85 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global wlp6s0
       valid_lft forever preferred_lft forever
    inet6 fe80::4eed:deff:fecb:cf85/64 scope link 
       valid_lft forever preferred_lft forever
5: ap0:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 4c:ed:de:cb:cf:86 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/24 brd 10.0.0.255 scope global ap0
       valid_lft forever preferred_lft forever
    inet6 fe80::4eed:deff:fecb:cf86/64 scope link 
       valid_lft forever preferred_lft forever

Në fund

  1. Ofertuesi sheh vetëm një lidhje të enkriptuar me serverin tuaj SOCKS, ndaj nuk sheh asgjë.
  2. Megjithatë, ai sheh kërkesat tuaja NTP, për të parandaluar këtë, fshini rrugët statike për serverat NTP. Sidoqoftë, nuk është e garantuar që serveri juaj SOCKS lejon protokollin NTP.

Një zgjidhje, e vërejtur në Debian 10

Nëse provoni të rinisni shërbimin e rrjetit nga konsola, ai do të bjerë me një gabim. Kjo lidhet me faktin se një pjesë e tij në formën e një ndërfaqeje virtuale është e lidhur me shërbimin tun2socks, kështu që është e përdorur. Për të rinisur shërbimin e rrjetit, së pari duhet të ndaloni shërbimin tun2socks. Por, mendoj se nëse e keni lexuar deri në fund, kjo sigurisht që nuk është një problem për ju!

Linket

  1. Rrugëzimi statik në Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Ky kyçja e këtij skripti krijon një Pikë Qaccess WiFi të NATuar ose të Urës.
  5. dnscrypt-proxy 2 — Një proxy DNS fleksibël, me mbështetje për protokollet DNS të enkriptuara.

Burimi: habr.com

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster