Gradimo usmjerivač u SOCKS na prijenosnom računalu s Debianom 10

Cijelu godinu (ili dvije) odgađao sam objavu ovog članka zbog glavnog razloga — već sam objavio dva članka u kojima sam opisao proces stvaranja usmjerivača u SOCKS iz običnog prijenosnog računala s Debianom.

Međutim, otkako je stabilna verzija Debiana ažurirana na Buster, dovoljno ljudi me kontaktiralo privatno tražeći pomoć u postavljanju, što znači da moji prethodni članci nisu iscrpni. Pa, i sam sam sumnjao da metode navedene u njima potpuno razrađuju sve nijanse postavki Linuxa za usmjeravanje u SOCKS. Osim toga, napisani su za Debian Stretch, a nakon ažuriranja na Buster, u sustavu inicijalizacije systemd primijetio sam male promjene u interakciji usluga. Osim toga, u samim člancima nisam koristio systemd-networkd, iako se najbolje uklapa u složene mrežne konfiguracije.

Uz gore navedene promjene, u moju konfiguraciju dodane su sljedeće usluge kao što su hostapd — usluga za virtualizaciju pristupne točke, ntp za sinkronizaciju vremena klijenata unutar lokalne mreže, dnscrypt-proxy za šifriranje veza putem DNS protokola i blokiranje reklama na klijentima lokalne mreže, a, kako sam spomenuo ranije, systemd-networkd za konfiguraciju mrežnih sučelja.

Evo jednostavne blok dijagram, unutarnje strukture takvog usmjerivača.

Gradimo usmjerivač u SOCKS na prijenosnom računalu s Debianom 10

Dakle, ponovit ću koje ciljeve ima ciklus ovih članaka:

  1. Usmjeriti u SOCKS sve veze operativnog sustava, kao i veze svih uređaja koji se nalaze u istoj mreži s prijenosnim računalom.
  2. Prijenosno računalo u mom slučaju mora ostati potpuno mobilno. Dakle, treba omogućiti korištenje radnog okruženja i ne smije biti vezano uz fizičku lokaciju.
  3. Zadnja točka podrazumijeva povezivanje i usmjeravanje isključivo putem ugrađenog bežičnog sučelja.
  4. Pa, i naravno, izraditi iscrpni vodič, kao i razmotriti odgovarajuće tehnologije u okviru mojih skromnih saznanja.

Što će biti predmet razmatranja u ovom članku:

  1. git — preuzmite repozitorije projekata tun2socks, potrebnog za usmjeravanje TCP prometa u SOCKS, i create_ap — skriptu za automatizaciju postavljanja virtualne pristupne točke uz pomoć hostapd.
  2. tun2socks — izgradit ćemo i instalirati systemd uslugu u sustav.
  3. systemd-networkd — postavit ćemo bežične i virtualne sučelja, statičke tablice usmjeravanja i preusmjeravanje paketa.
  4. create_ap — instalirat ćemo systemd uslugu u sustav, konfigurirati i pokrenuti virtualnu pristupnu točku.

Neobavezni koraci:

  • ntp — instalirati i postaviti server za sinkronizaciju vremena na klijentima virtualne pristupne točke.
  • dnscrypt-proxy — enkriptirati DNS upite, usmjeriti ih u SOCKS i onemogućiti reklamne domene za lokalnu mrežu.

Zašto sve ovo?

To je jedan od načina organiziranja zaštite TCP veza lokalne mreže. Glavna prednost je ta što sve veze idu u SOCKS, osim ako za njih nije postavljena statička ruta putem originalnog gatewaya. To znači da nije potrebno podešavati SOCKS server postavke ni za posebne programe, ni za klijente u lokalnoj mreži — svi idu u SOCKS prema zadanim postavkama, jer on postaje zadani gateway, dok ne navedemo suprotno.

U suštini dodajemo drugi enkripcijski usmjerivač kao laptop ispred originalnog usmjerivača i koristimo internetsku vezu originalnog usmjerivača za već enkriptirane SOCKS upite laptopa, koji zauzvrat usmjerava i šifrira upite klijenata lokalne mreže.

Iz perspektive davatelja usluga trajno smo povezani s jednim serverom uz enkriptani promet.

Shodno tome, svi uređaji se povezují s virtualnom pristupnom tačkom laptopa.

Instalirajte tun2socks u sustav

Dok vaša mašina ima internet, preuzmite sve potrebne alate.

apt update
apt install git make cmake

Preuzmite paket badvpn

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

U vašem sustavu će se pojaviti mapa badvpn. Stvorite posebnu mapu za gradnju

mkdir badvpn-build

Pređite u nju

cd badvpn-build

Sagradite tun2socks

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

Instalirajte u sustav

make install
  • Parametar -DBUILD_NOTHING_BY_DEFAULT=1 isključuje izgradnju svih komponenti repozitorija badvpn.
  • —DBUILD_TUN2SOCKS=1 uključuje izgradnju komponente tun2socks.
  • make install — instalirat će binarni tun2socks u vaš sustav na adresi /usr/local/bin/badvpn-tun2socks.

Postavite tun2socks uslugu u systemd

Stvorite datoteku /etc/systemd/system/tun2socks.service s sljedećim sadržajem:

[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 — prihvaća ime virtualnog sučelja koje inicijaliziramo putem systemd-networkd.
  • --netif-ipaddr — mrežna adresa «usmjerivača» tun2socks, na koju se povezuje virtualno sučelje. Bolje je napraviti odvojenu rezerviranu podmrežu.
  • --socks-server-addr — prima socket (adresa:port SOCKS servera).

Ako vaš SOCKS server zahtijeva autentifikaciju, možete navesti parametre --username i --password.

Zatim registrirajte uslugu

systemctl daemon-reload

I omogućite

systemctl enable tun2socks

Prije nego što pokrenete uslugu, osigurajte joj virtualno mrežno sučelje.

Prelazimo na systemd-networkd

Omogućujemo systemd-networkd:

systemctl enable systemd-networkd

Onemogućujemo trenutne mrežne usluge.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wait-online — to je usluga koja čeka dostupnost aktivne mrežne veze prije nego što systemd nastavi s pokretanjem drugih usluga koje ovise o mreži. Onemogućujemo je jer prelazimo na ekvivalentan systemd-networkd.

Odmah ga omogućimo:

systemctl enable systemd-networkd-wait-online

Postavite bežično mrežno sučelje

Izradite konfiguracijski datoteku systemd-networkd za bežično mrežno sučelje /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Name — to je ime vašeg bežičnog sučelja. Identificirajte ga s naredbom ip a.
  • IPForward — direktiva koja omogućuje preusmjeravanje paketa na mrežnom sučelju.
  • Address odgovara za dodjeljivanje IP adrese bežičnom sučelju. Navodimo ga statički jer sa ekvivalentnom direktivom DHCP=yes, systemd-networkd stvara u sustavu zadani gateway. Tada će sav promet ići preko originalnog gatewaya, a ne preko budućeg virtualnog sučelja u različitoj podmreži. Možete provjeriti trenutni zadani gateway s naredbom ip r

Stvorite statičku rutu za udaljeni SOCKS server

Ako vaš SOCKS server nije lokalni, već udaljeni, trebate stvoriti statičku rutu za njega. U tu svrhu dodajte odjeljak Route na kraj konfiguracijskog datoteka bežičnog sučelja koji ste stvorili s sljedećim sadržajem:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway — to je zadani gateway ili adresa vaše izvorne pristupne točke.
  • Destination — adresa SOCKS servera.

Postavite wpa_supplicant za systemd-networkd

systemd-networkd koristi wpa_supplicant za povezivanje s zaštićenom pristupnom točkom. Kada pokušava «podignuti» bežično sučelje, systemd-networkd pokreće uslugu wpa_supplicant@ime, gdje ime — to je ime bežične mrežne kartice. Ako do sada niste koristili systemd-networkd, ta usluga vjerojatno nije prisutna u vašem sustavu.

Stoga je stvorite s naredbom:

systemctl enable wpa_supplicant@wlp6s0

Koristio sam wlp6s0 kao ime svoje bežične mrežne kartice. Vaše ime se može razlikovati. Možete ga saznati naredbom ip l.

Sada će stvorena usluga wpa_supplicant@wlp6s0 biti pokrenuta prilikom 'podizanja' bežične mrežne kartice, no ona će, zauzvrat, tražiti postavke SSID-a i lozinke pristupne točke u datoteci /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Stoga ju je potrebno stvoriti uz pomoć alata wpa_passphrase.

Za to izvršite naredbu:

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

gdje SSID — to je ime vaše pristupne točke, password — lozinka, a wlp6s0 — ime vaše bežične kartice.

Inicijalizirajte virtualno sučelje za tun2socks

Stvorite datoteku za inicijalizaciju novog virtualnog sučelja u sustavu/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Name — to je ime koje će systemd-networkd dodijeliti budućem virtualnom sučelju prilikom njegove inicijalizacije.
  • Kind — to je tip virtualnog sučelja. Na temelju imena usluge tun2socks, možete pretpostaviti da koristi sučelje tipa tun.
  • netdev — to je ekstenzija datoteka koje systemd-networkd se koriste za inicijalizaciju virtualnih mrežnih sučelja. Adresa i druge mrežne postavke za ta sučelja navode se u .network-datotekama.

Stvorite takvu datoteku /etc/systemd/network/25-tun2socks.network s sljedećim sadržajem:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name — ime virtualnog sučelja koje ste naveli u netdev-datoteci.
  • Address — IP adresa koja će biti dodijeljena virtualnom sučelju. Mora biti u istoj mreži s adresom koju ste naveli u usluzi tun2socks
  • Gateway — IP adresa 'usmjerivača' tun2socks, koju ste naveli prilikom stvaranja usluge systemd.

Na taj način, sučelje tun2socks ima adresu 172.16.1.2, a usluga tun2socks — 172.16.1.1, odnosno je prolaz za sve veze s virtualnog sučelja.

Konfigurirajte virtualnu pristupnu točku

Instalirajte ovisnosti:

apt install util-linux procps hostapd iw haveged

Preuzmite repozitorij create_ap na svoju mašinu:

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

Pređite u mapu repozitorija na vašoj mašini:

cd create_ap

Instalirajte u sustav:

make install

Vašem sustavu će se dodati konfiguracija /etc/create_ap.conf. Ovo su glavne opcije za promjenu:

  • GATEWAY=10.0.0.1 — bolje je to učiniti kao zasebnu rezerviranu podmrežu.
  • NO_DNS=1 — isključite, jer će ovim parametrom upravljati virtualno sučelje systemd-networkd.
  • NO_DNSMASQ=1 — isključite iz istog razloga.
  • WIFI_IFACE=wlp6s0 — bežični interfejs laptopa.
  • INTERNET_IFACE=tun2socks — virtuelni interfejs kreiran za tun2socks.
  • SSID=hostapd — ime virtuelne tačke pristupa.
  • PASSPHRASE=12345678 — lozinka.

Ne zaboravite uključiti servis:

systemctl enable create_ap

Uključite DHCP server u systemd-networkd

Servis create_ap inicira virtuelni interfejs u sistemu ap0. Teoretski, na ovom interfejsu “visi” dnsmasq, ali zašto instalirati dodatne servise, kada systemd-networkd sadrži ugrađeni DHCP server?

Da biste ga uključili, definišite mrežne postavke za virtuelnu tačku. U tu svrhu kreirajte datoteku /etc/systemd/network/25-ap0.network s sljedećim sadržajem:

[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

Nakon što servis create_ap inicira virtuelni interfejs ap0, systemd-networkd automatski će mu dodeliti IP adresu i uključiti DHCP server.

Linije EmitDNS=yes i DNS=10.0.0.1 prosleđuju postavke DNS servera uređajima priključenim na tačku pristupa.

Ako ne planirate koristiti lokalni DNS server — u mom slučaju to je dnscrypt-proxy — možete postaviti DNS=10.0.0.1 u DNS=192.168.1.1, gdje 192.168.1.1 — adresu vašeg originalnog gateway-a. Tada će DNS zahtevi vašeg hosta i lokalne mreže ići u nezaštićenom obliku preko servera provajdera.

EmitNTP=yes i NTP=192.168.1.1 prosleđuju postavke NTP.

Isto važi i za liniju NTP=10.0.0.1.

Instalirajte i konfigurišite NTP server

Instalirajte u sustav:

apt install ntp

Uredite konfiguraciju /etc/ntp.conf. Zakomentarišite adrese standardnih pool-ova:

#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

Dodajte adrese javnih servera, na primer, Google Public NTP:

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

Odobrite pristup serveru klijentima iz vaše mreže:

restrict 10.0.0.0 mask 255.255.255.0

Uključite emitovanje u vašu mrežu:

broadcast 10.0.0.255

Na kraju, dodajte adrese ovih servera u tabelu statičkog rutiranja. Za to otvorite datoteku konfiguracije bežičnog interfejsa /etc/systemd/network/25-wlp6s0.network i dodajte na kraj sekcije 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

Možete saznati adrese vaših NTP servera koristeći alatku host na sljedeći način:

host time1.google.com

Instalirajte dnscrypt-proxy, uklonite reklame i sakrijte DNS saobraćaj od provajdera

apt install dnscrypt-proxy

Da biste obradili DNS zahteve hosta i lokalne mreže, uredite soket /lib/systemd/system/dnscrypt-proxy.socket. Izmenite sledeće linije:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Ponovo pokrenite systemd:

systemctl daemon-reload

Uredite konfiguraciju /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Da biste usmjerili dnscrypt-proxy veze preko tun2socks, dodajte dolje:

force_tcp = true

Uredite konfiguraciju /etc/resolv.conf, koji obavještava DNS server domaćina.

nameserver 127.0.0.1
nameserver 192.168.1.1

Prvi red uključuje korištenje dnscrypt-proxy, a drugi koristi izvorni prolaz, u slučaju da DNS server dnscrypt-proxy nije dostupan.

Gotovo!

Ponovo pokrenite ili zaustavite aktivne mrežne usluge:

systemctl stop networking NetworkManager NetworkManager-wait-online

I ponovo pokrenite sve potrebne:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Nakon ponovnog pokretanja ili restartovanja, dobit ćete drugu pristupnu tačku koja usmjerava domaćina i uređaje lokalne mreže u SOCKS.

Ovako otprilike izgleda izlaz ip a običnog laptopa:

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

U konačnici

  1. Provajder vidi samo šifrovanu vezu prema vašem SOCKS serveru, što znači da ništa ne vidi.
  2. Ipak, on može vidjeti vaše NTP upite, kako biste to spriječili, uklonite statičke rute za NTP servere. Međutim, nije sigurno da vaš SOCKS server omogućuje NTP protokol.

Zaobilazno rješenje, zapaženo na Debain 10

Ako pokušate ponovo pokrenuti mrežnu uslugu iz konzole, ona će se srušiti s greškom. To je zbog toga što je njen dio u obliku virtualnog sučelja vezan za tun2socks uslugu i stoga se koristi. Da biste ponovo pokrenuli mrežnu uslugu, prvo trebate zaustaviti tun2socks uslugu. No, mislim da to za vas sigurno nije problem, ako ste došli do kraja!

Linkovi

  1. Static Routing in Linux — IBM
  2. systemd-networkd.service — Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Ovaj skript stvara NATed ili Bridged WiFi pristupnu točku.
  5. dnscrypt-proxy 2 — Fleksibilni DNS proxy s podrškom za šifrirane DNS protokole.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster