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.

Dakle, ponovit ću koje ciljeve ima ciklus ovih članaka:
- Usmjeriti u SOCKS sve veze operativnog sustava, kao i veze svih uređaja koji se nalaze u istoj mreži s prijenosnim računalom.
- 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.
- Zadnja točka podrazumijeva povezivanje i usmjeravanje isključivo putem ugrađenog bežičnog sučelja.
- 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:
- 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.
- tun2socks — izgradit ćemo i instalirati systemd uslugu u sustav.
- systemd-networkd — postavit ćemo bežične i virtualne sučelja, statičke tablice usmjeravanja i preusmjeravanje paketa.
- 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 updateapt install git make cmakePreuzmite 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=1isključuje izgradnju svih komponenti repozitorija badvpn. - —
DBUILD_TUN2SOCKS=1uključ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 .--socks-server-addr— prima socket (adresa:portSOCKS servera).
Ako vaš SOCKS server zahtijeva autentifikaciju, možete navesti parametre --username i --password.
Zatim registrirajte uslugu
systemctl daemon-reloadI omogućite
systemctl enable tun2socksPrije nego što pokrenete uslugu, osigurajte joj virtualno mrežno sučelje.
Prelazimo na systemd-networkd
Omogućujemo systemd-networkd:
systemctl enable systemd-networkdOnemoguć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-onlinePostavite 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 naredbomip 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@wlp6s0Koristio 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.confgdje 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-networkdse 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 tun2socksGateway— 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 havegedPreuzmite repozitorij create_ap na svoju mašinu:
git clone https://github.com/oblique/create_apPređite u mapu repozitorija na vašoj mašini:
cd create_apInstalirajte u sustav:
make installVaš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_apUključ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.12Možete saznati adrese vaših NTP servera koristeći alatku host na sljedeći način:
host time1.google.comInstalirajte dnscrypt-proxy, uklonite reklame i sakrijte DNS saobraćaj od provajdera
apt install dnscrypt-proxyDa 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:53Ponovo pokrenite systemd:
systemctl daemon-reloadUredite 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.1Prvi 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-onlineI ponovo pokrenite sve potrebne:
systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntpNakon 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
- Provajder vidi samo šifrovanu vezu prema vašem SOCKS serveru, što znači da ništa ne vidi.
- 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
Izvor: habr.com
