Ndërtimi i një ruteri në SOCKS në një laptop me Debian 10

Për një vit të tërë (ose dy) e shtyva botimin e këtij artikulli për arsyen kryesore - kisha botuar tashmë dy artikuj në të cilët përshkrova procesin e krijimit të një ruteri në SOCKS nga një laptop shumë i zakonshëm me Debian.

Megjithatë, që atëherë versioni i qëndrueshëm i Debian është përditësuar në Buster, një numër i mjaftueshëm njerëzish më kanë kontaktuar privatisht duke kërkuar ndihmë për konfigurimin, që do të thotë se artikujt e mi të mëparshëm nuk janë shterues. Epo, unë vetë mendova se metodat e përshkruara në to nuk zbulojnë plotësisht të gjitha ndërlikimet e konfigurimit të Linux për kursimin në SOCKS. Përveç kësaj, ato janë shkruar për Debian Stretch, dhe pas përmirësimit në Buster, në sistemin systemd init, vura re ndryshime të vogla në ndërveprimin e shërbimeve. Dhe në vetë artikujt, unë nuk përdora systemd-networkd, megjithëse është më i përshtatshmi për konfigurimet komplekse të rrjetit.

Përveç ndryshimeve të mësipërme, shërbimet e mëposhtme u shtuan në konfigurimin tim: hostapd - shërbim për virtualizimin e pikës së aksesit, ntp për të sinkronizuar kohën e klientëve të rrjetit lokal, dnscrypt-proxy për të enkriptuar lidhjet nëpërmjet DNS dhe për të çaktivizuar reklamat në klientët e rrjetit lokal, dhe gjithashtu, siç e përmenda më herët, systemd-networked për konfigurimin e ndërfaqeve të rrjetit.

Këtu është një bllok diagram i thjeshtë i strukturës së brendshme të një ruteri të tillë.

Ndërtimi i një ruteri në SOCKS në një laptop me Debian 10

Pra, më lejoni t'ju kujtoj se cilat janë qëllimet e kësaj serie artikujsh:

  1. Drejtoni të gjitha lidhjet e sistemit operativ te SOCKS, si dhe lidhjet nga të gjitha pajisjet në të njëjtin rrjet si laptopi.
  2. Laptopi në rastin tim duhet të mbetet plotësisht i lëvizshëm. Kjo do të thotë, për të dhënë mundësinë për të përdorur mjedisin e desktopit dhe të mos jetë i lidhur me një vendndodhje fizike.
  3. Pika e fundit nënkupton lidhjen dhe drejtimin vetëm përmes ndërfaqes së integruar pa tel.
  4. Epo, dhe sigurisht, krijimi i një udhëzuesi gjithëpërfshirës, ​​si dhe një analizë e teknologjive përkatëse sipas njohurive të mia modeste.

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

  1. git — shkarkoni depot e projektit tun2çorapekërkohet për të drejtuar trafikun TCP në SOCKS, dhe krijoj_ap — një skript për të automatizuar konfigurimin e një pike aksesi virtual duke përdorur hostapd.
  2. tun2çorape — ndërtoni dhe instaloni shërbimin systemd në sistem.
  3. systemd-networked — konfiguroni ndërfaqet me valë dhe virtuale, tabelat statike të rrugëtimit dhe ridrejtimin e paketave.
  4. krijoj_ap — instaloni shërbimin systemd në sistem, konfiguroni dhe hapni një pikë aksesi virtual.

Hapat opsionale:

  • ntp — instaloni dhe konfiguroni një server për të sinkronizuar kohën në klientët e pikave të aksesit virtual.
  • dnscrypt-proxy — ne do të kodojmë kërkesat DNS, do t'i drejtojmë ato në SOCKS dhe do të çaktivizojmë domenet e reklamimit për rrjetin lokal.

Për çfarë është e gjitha kjo?

Kjo është një nga mënyrat për të siguruar lidhjet TCP në një rrjet lokal. Avantazhi kryesor është se të gjitha lidhjet bëhen në SOCKS, përveç nëse ndërtohet një rrugë statike për ta përmes portës origjinale. Kjo do të thotë që ju nuk keni nevojë të specifikoni cilësimet e serverit SOCKS për programe individuale ose klientë në rrjetin lokal - të gjitha ato shkojnë te SOCKS si parazgjedhje, pasi është porta e paracaktuar derisa të tregojmë ndryshe.

Në thelb ne shtojmë një ruter të dytë enkriptues si laptop përpara ruterit origjinal dhe përdorim lidhjen e internetit të ruterit origjinal për kërkesat tashmë të koduara SOCKS të laptopit, i cili nga ana tjetër drejton dhe kripton kërkesat nga klientët LAN.

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

Prandaj, të gjitha pajisjet janë të lidhura me pikën e hyrjes virtuale të laptopit.

Instaloni tun2socks në sistem

Për sa kohë që kompjuteri juaj ka internet, 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ë dosje do të shfaqet në sistemin tuaj badvpn. Krijo një dosje të veçantë për ndërtimin

mkdir badvpn-build

Shkoni tek ajo

cd badvpn-build

Mblidhni tun2socks

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

Instaloni në sistem

make install
  • Parametër -DBUILD_NOTHING_BY_DEFAULT=1 çaktivizon ndërtimin e të gjithë komponentëve të depove badvpn.
  • -DBUILD_TUN2SOCKS=1 përfshin një komponent në asamble tun2çorape.
  • make install — do të instalojë binarin tun2socks në sistemin tuaj në /usr/local/bin/badvpn-tun2socks.

Instaloni shërbimin tun2socks në systemd

Krijo 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 që ne inicializojmë me systemd-networkd.
  • --netif-ipaddr — adresa e rrjetit të "ruterit" tun2socks me të cilin është lidhur ndërfaqja virtuale. Është më mirë ta bëni të ndarë nënrrjet i rezervuar.
  • --socks-server-addr - pranon prizën (адрес:порт serverët SOCKS).

Nëse serveri juaj SOCKS kërkon vërtetim, mund të specifikoni parametrat --username и --password.

Tjetra, regjistro shërbimin

systemctl daemon-reload

Dhe ndizeni

systemctl enable tun2socks

Para fillimit të shërbimit, ne do t'i ofrojmë atij një ndërfaqe rrjeti virtual.

Kalimi në systemd-networkd

Ndizeni systemd-networkd:

systemctl enable systemd-networkd

Çaktivizo shërbimet aktuale të rrjetit.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-prit-online është një shërbim që pret për një lidhje rrjeti funksionale përpara se systemd të vazhdojë të nisë shërbime të tjera që varen nga prania e një rrjeti. Ne po e çaktivizojmë atë ndërsa kalojmë në analogun e rrjetit të sistemit.

Le ta aktivizojmë menjëherë:

systemctl enable systemd-networkd-wait-online

Konfiguro ndërfaqen e rrjetit me valë

Krijoni një skedar konfigurimi të rrjetit systemd për ndërfaqen e rrjetit pa tel /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Emër është emri i ndërfaqes tuaj me valë. Identifikoni atë me komandën ip a.
  • IPForward - një direktivë që mundëson ridrejtimin e paketave në një ndërfaqe rrjeti.
  • Adresa është përgjegjës për caktimin e një adrese IP në ndërfaqen me valë. E specifikojmë në mënyrë statike sepse me direktivën ekuivalente DHCP=yes, systemd-networkd krijon një portë të paracaktuar në sistem. Pastaj i gjithë trafiku do të kalojë përmes portës origjinale, dhe jo përmes ndërfaqes së ardhshme virtuale në një nënrrjet tjetër. Ju mund të kontrolloni portën aktuale të paracaktuar me komandën ip r

Krijo një rrugë statike për serverin e largët SOCKS

Nëse serveri juaj SOCKS nuk është lokal, por i largët, atëherë duhet të krijoni një rrugë statike për të. Për ta bërë këtë, shtoni një seksion Route deri në fund të skedarit të konfigurimit të ndërfaqes me valë që keni krijuar me përmbajtjen e mëposhtme:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway — kjo është porta e paracaktuar ose adresa e pikës suaj fillestare të hyrjes.
  • Destination — Adresa e serverit SOCKS.

Konfiguro wpa_supplicant për systemd-networkd

systemd-networkd përdor wpa_supplicant për t'u lidhur me një pikë aksesi të sigurt. Kur përpiqeni të "ngritni" ndërfaqen me valë, systemd-networkd fillon shërbimin wpa_supplicant@имяKu имя është emri i ndërfaqes me valë. Nëse nuk e keni përdorur systemd-networkd përpara kësaj pike, atëherë ky shërbim me siguri mungon në sistemin tuaj.

Pra, krijoni atë me komandën:

systemctl enable wpa_supplicant@wlp6s0

une e perdora wlp6s0 si emri i ndërfaqes së tij pa tel. Emri juaj mund të jetë i ndryshëm. Ju mund ta njihni atë me komandën ip l.

Tani shërbimi i krijuar wpa_supplicant@wlp6s0 do të lansohet kur ndërfaqja me valë "të ngrihet", megjithatë, ajo, nga ana tjetër, do të kërkojë cilësimet SSID dhe fjalëkalimin e pikës së hyrjes në skedar /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Prandaj, duhet ta krijoni duke përdorur programin wpa_passphrase.

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

wpa_passphrase SSID password>/etc/wpa_supplicant/wpa_supplicant-wlp6s0.conf

ku SSID është emri i pikës suaj të hyrjes, fjalëkalimi është fjalëkalimi dhe wlp6s0 — emri i ndërfaqes tuaj me valë.

Inicializoni ndërfaqen virtuale për tun2socks

Krijoni një skedar për të inicializuar një ndërfaqe të re virtuale në sistem/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Emër është emri që systemd-networkd do t'i caktojë ndërfaqes virtuale të ardhshme kur të inicializohet.
  • Fëmijë është një lloj ndërfaqe virtuale. Nga emri i shërbimit tun2socks, mund të merrni me mend se ai përdor një ndërfaqe si tun.
  • netdev është zgjerimi i skedarëve që systemd-networkd Përdoret për të inicializuar ndërfaqet e rrjetit virtual. Adresa dhe cilësimet e tjera të rrjetit për këto ndërfaqe janë të specifikuara në .rjeta-skedarët.

Krijo një skedar si ky /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
  • Name — emri i ndërfaqes virtuale që keni specifikuar netdev- dosje.
  • Address — Adresa IP që do t'i caktohet ndërfaqes virtuale. Duhet të jetë në të njëjtin rrjet me adresën që keni specifikuar në shërbimin tun2socks
  • Gateway - Adresa IP e "ruterit" tun2çorape, të cilën e keni specifikuar gjatë krijimit të shërbimit systemd.

Pra ndërfaqja tun2çorape ka një adresë 172.16.1.2, dhe shërbimi tun2çorape - 172.16.1.1, domethënë është porta për të gjitha lidhjet nga ndërfaqja virtuale.

Vendosni një pikë aksesi virtual

Instaloni varësitë:

apt install util-linux procps hostapd iw haveged

Shkarkoni depon krijoj_ap në makinën tuaj:

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

Shkoni te dosja e depove në kompjuterin tuaj:

cd create_ap

Instaloni në sistem:

make install

Një konfigurim do të shfaqet në sistemin tuaj /etc/create_ap.conf. Këtu janë opsionet kryesore të redaktimit:

  • GATEWAY=10.0.0.1 - është më mirë ta bëni atë një nënrrjet të veçantë të rezervuar.
  • NO_DNS=1 - çaktivizoni, pasi ky parametër do të menaxhohet nga ndërfaqja virtuale e rrjetit systemd.
  • NO_DNSMASQ=1 - fikeni për të njëjtën arsye.
  • WIFI_IFACE=wlp6s0 — Ndërfaqja pa tel e laptopit.
  • INTERNET_IFACE=tun2socks - një ndërfaqe virtuale e krijuar për tun2socks.
  • SSID=hostapd — emri i pikës së hyrjes virtuale.
  • PASSPHRASE=12345678 - fjalëkalimi.

Mos harroni të aktivizoni shërbimin:

systemctl enable create_ap

Aktivizo serverin DHCP në systemd-networkd

zyrë create_ap inicializon një ndërfaqe virtuale në sistem ap0. Në teori, dnsmasq varet në këtë ndërfaqe, por pse të instaloni shërbime shtesë nëse systemd-networkd përmban një server të integruar DHCP?

Për ta aktivizuar, ne do të përcaktojmë cilësimet e rrjetit për pikën virtuale. Për ta bë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

Pasi shërbimi create_ap inicializon ndërfaqen virtuale ap0, systemd-networkd do t'i caktojë automatikisht një adresë IP dhe do të aktivizojë serverin DHCP.

Vargjet EmitDNS=yes и DNS=10.0.0.1 transmetoni cilësimet e serverit DNS në pajisjet e lidhura me pikën e hyrjes.

Nëse nuk planifikoni të përdorni një server lokal DNS - në rastin tim është dnscrypt-proxy - mund të instaloni DNS=10.0.0.1 в DNS=192.168.1.1Ku 192.168.1.1 — adresa e portës suaj origjinale. Më pas kërkesat DNS për hostin tuaj dhe rrjetin lokal do të kalojnë të pakriptuara përmes serverëve të ofruesit.

EmitNTP=yes и NTP=192.168.1.1 transferoni cilësimet NTP.

E njëjta gjë vlen edhe për linjën NTP=10.0.0.1.

Instaloni dhe konfiguroni serverin NTP

Instaloni në sistem:

apt install ntp

Redaktoni konfigurimin /etc/ntp.conf. Komentoni adresat e pishinave 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 serverit publik, për shembull Google Public NTP:

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

Siguroni akses në server për klientët në rrjetin tuaj:

restrict 10.0.0.0 mask 255.255.255.0

Aktivizo transmetimin në rrjetin tënd:

broadcast 10.0.0.255

Së fundi, shtoni adresat e këtyre serverëve në tabelën statike të rrugëtimit. Për ta bërë këtë, hapni skedarin e konfigurimit të ndërfaqes me valë /etc/systemd/network/25-wlp6s0.network dhe shtoni në fund të seksionit Route.

[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

Ju mund të gjeni adresat e serverëve tuaj NTP duke përdorur programin host si më poshtë:

host time1.google.com

Instaloni dnscrypt-proxy, hiqni reklamat dhe fshihni trafikun DNS nga ofruesi juaj

apt install dnscrypt-proxy

Për të shërbyer pyetjet DNS të hostit dhe rrjetit lokal, modifikoni prizën /lib/systemd/system/dnscrypt-proxy.socket. Ndryshoni linjat e mëposhtme:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Rifillo, fillo përsëri systemd:

systemctl daemon-reload

Redaktoni konfigurimin /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

Redaktoni konfigurimin /etc/resolv.conf, i cili i tregon serverit DNS hostit.

nameserver 127.0.0.1
nameserver 192.168.1.1

Rreshti i parë mundëson përdorimin e dnscrypt-proxy, rreshti i dytë përdor portën origjinale në rast se serveri dnscrypt-proxy nuk është i disponueshëm.

Done!

Rinisni ose ndaloni ekzekutimin e shërbimeve të rrjetit:

systemctl stop networking NetworkManager NetworkManager-wait-online

Dhe rinisni gjithçka që është e nevojshme:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Pas një rindezjeje ose rinisjeje, do të keni një pikë të dytë aksesi që i drejton pajisjet host dhe LAN te SOCKS.

Kështu duket dalja ip a laptop i rregullt:

1: lo: <LOOPBACK,UP,LOWER_UP> 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: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> 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: <NO-CARRIER,BROADCAST,MULTICAST,UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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

Si rezultat i kësaj,

  1. Ofruesi sheh vetëm lidhjen e koduar me serverin tuaj SOCKS, që do të thotë se ata nuk shohin asgjë.
  2. E megjithatë sheh kërkesat tuaja NTP, për ta parandaluar këtë, hiqni rrugët statike për serverët NTP. Megjithatë, nuk është e sigurt që serveri juaj SOCKS lejon protokollin NTP.

Paterica e dalluar në Debain 10

Nëse përpiqeni të rinisni shërbimin e rrjetit nga tastiera, ai do të dështojë me një gabim. Kjo për faktin se një pjesë e saj në formën e një ndërfaqe virtuale është e lidhur me shërbimin tun2socks, që do të thotë se përdoret. Për të rifilluar shërbimin e rrjetit, fillimisht duhet të ndaloni shërbimin tun2socks. Por, mendoj, nëse e lexoni deri në fund, kjo padyshim nuk është problem për ju!

Referencat

  1. Drejtimi statik në Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Ky skript krijon një pikë aksesi WiFi NATed ose Bridged.
  5. dnscrypt-proxy 2 — Një proxy fleksibël DNS, me mbështetje për protokollet e koduara DNS.

Burimi: www.habr.com