Cijelu godinu (dvije) odgađam objavljivanje ovog članka iz glavnog razloga - već sam objavio dva članka u kojima sam opisao proces kreiranja rutera u SOCKS-u od najobičnijeg laptopa s Debianom.
Međutim, otkako je Debian stabilna nadograđena na Buster, imao sam priličan broj ljudi koji su mi se obratili tražeći pomoć oko postavljanja, što znači da moji prethodni članci nisu iscrpni. Pa, i sam sam pretpostavio da metode opisane u njima ne otkrivaju u potpunosti sve suptilnosti podešavanja Linuxa za rutiranje na SOCKS. Osim toga, napisane su za Debian Stretch, a nakon nadogradnje na Buster, u sistemu systemd init, primijetio sam blagu promjenu u interakciji servisa. A u samim člancima nisam koristio systemd-networkd, iako je najprikladniji za složene mrežne konfiguracije.
Pored gore navedenih promjena, u moju konfiguraciju su dodane sljedeće usluge: hostapd - servis za virtuelizaciju pristupne tačke, ntp za sinhronizaciju vremena klijenata lokalne mreže, dnscrypt-proxy šifrirati veze putem DNS protokola i onemogućiti oglašavanje na klijentima lokalne mreže, a također, kao što sam ranije spomenuo, systemd-networkd za konfigurisanje mrežnih interfejsa.
Evo najjednostavnijeg blok dijagrama unutrašnje strukture takvog rutera.
Dakle, podsjetit ću vas koje ciljeve ima serija ovih članaka:
Usmjerite sve OS konekcije na SOCKS, kao i veze svih uređaja koji su na istoj mreži kao i laptop.
Laptop u mom slučaju mora ostati potpuno mobilan. Odnosno, dati mogućnost korištenja desktop okruženja i ne biti vezan za fizičku lokaciju.
Posljednja tačka podrazumijeva povezivanje i rutiranje samo preko ugrađenog bežičnog interfejsa.
Pa, naravno, izrada iscrpnog vodiča, kao i analiza relevantnih tehnologija po mom najboljem znanju.
Šta će biti pokriveno u ovom članku:
git - preuzimanje repozitorija projekta tun2sockspotrebno za usmjeravanje TCP prometa na SOCKS, i create_ap - skripta za automatizaciju konfiguracije virtuelne pristupne tačke koristeći hostapd.
tun2socks - izgraditi i instalirati systemd servis na sistemu.
systemd-networkd - konfigurirati bežična i virtuelna sučelja, statičke tablice rutiranja i prosljeđivanje paketa.
create_ap - instalirati systemd servis u sistem, konfigurisati i pokrenuti virtuelnu pristupnu tačku.
Opcioni koraci:
ntp - instalirati i konfigurisati server za vremensku sinhronizaciju na klijentima virtuelne pristupne tačke.
dnscrypt-proxy - šifrirajte DNS zahtjeve, usmjerite ih na SOCKS i onemogućite reklamne domene za lokalnu mrežu.
Čemu ovo sve služi?
Ovo je jedan od načina organiziranja zaštite TCP veza na lokalnoj mreži. Glavna prednost je da sve veze idu na SOCKS osim ako se za njih ne izgradi statična ruta kroz originalni gateway. To znači da ne morate pisati postavke SOCKS servera bilo pojedinačnim programima ili klijentima na lokalnoj mreži - svi oni idu na SOCKS po defaultu, pošto je to zadani gateway, dok ne odredimo drugačije.
U osnovi, dodajemo drugi ruter za enkripciju kao laptop ispred originalnog rutera i koristimo internetsku vezu originalnog rutera za već SOCKS šifrovane zahtjeve laptopa, koji zauzvrat usmjerava i šifrira zahtjeve od LAN klijenata.
Sa stanovišta provajdera, stalno smo povezani na isti server sa šifrovanim saobraćajem.
Shodno tome, svi uređaji su povezani na virtuelnu pristupnu tačku laptopa.
Instalirajte tun2socks na svoj sistem
Sve dok imate internet na svom računaru, preuzmite sve potrebne alate.
apt update
apt install git make cmake
Preuzmite badvpn paket
git clone https://github.com/ambrop72/badvpn
Na vašem sistemu će se pojaviti fascikla badvpn. Kreirajte posebnu fasciklu za izgradnju
NetworkManager-čekaj-online je usluga koja čeka ispravnu mrežnu vezu prije nego što systemd nastavi s pokretanjem drugih usluga zavisnih od mreže. Onemogućavamo ga dok prelazimo na analogni sistem systemd-networkd.
Omogućimo odmah:
systemctl enable systemd-networkd-wait-online
Podesite interfejs bežične mreže
Kreirajte konfiguracionu datoteku systemd-networkd za interfejs bežične mreže /etc/systemd/network/25-wlp6s0.network.
Ime je naziv vašeg bežičnog interfejsa. Identifikujte ga komandom ip a.
IP Forward je direktiva koja omogućava prosljeđivanje paketa na mrežnom sučelju.
Adresa je odgovoran za dodeljivanje IP adrese bežičnom interfejsu. Navodimo ga statički jer s ekvivalentnom direktivom DHCP=yes, systemd-networkd kreira default gateway na sistemu. Tada će sav promet ići kroz originalni gateway, a ne kroz budući virtuelni interfejs na drugoj podmreži. Možete provjeriti trenutni default gateway pomoću naredbe ip r
Kreirajte statičku rutu za udaljeni SOCKS server
Ako vaš SOCKS server nije lokalni, već udaljen, tada morate kreirati statičku rutu za njega. Da biste to učinili, dodajte odjeljak Route do kraja konfiguracijske datoteke bežičnog sučelja koju ste kreirali sa sljedećim sadržajem:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gateway je podrazumevani gateway ili adresa vaše originalne pristupne tačke.
Destination - Adresa servera SOCKS.
Postavite wpa_supplicant za systemd-networkd
systemd-networkd koristi wpa_supplicant za povezivanje na sigurnu pristupnu tačku. Prilikom pokušaja "dozvanja" bežičnog interfejsa, systemd-networkd pokreće uslugu wpa_supplicant@имяgde Ime je naziv bežičnog interfejsa. Ako do sada niste koristili systemd-networkd, onda vjerovatno nemate ovu uslugu na svom sistemu.
Zato ga kreirajte naredbom:
systemctl enable wpa_supplicant@wlp6s0
koristio sam wlp6s0 kao naziv vašeg bežičnog interfejsa. Vaše ime može biti drugačije. Možete ga prepoznati pomoću naredbe ip l.
Sada kreirana usluga wpa_supplicant@wlp6s0 će se pokrenuti kada je bežično sučelje „gore“, međutim, zauzvrat će tražiti postavke SSID-a i lozinke pristupne točke u datoteci /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Stoga ga morate kreirati pomoću uslužnog programa wpa_passphrase.
gdje SSID je naziv vaše pristupne tačke, lozinka je lozinka i wlp6s0 je naziv vašeg bežičnog interfejsa.
Inicijalizirajte virtuelni interfejs za tun2socks
Kreirajte fajl za inicijalizaciju novog virtuelnog interfejsa na sistemu/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
Ime je ime koje će systemd-networkd dodijeliti budućem virtuelnom sučelju kada se inicijalizira.
vrsta je tip virtuelnog interfejsa. Iz naziva usluge tun2socks možete pretpostaviti da koristi sučelje poput tun.
netdev je ekstenzija datoteka koje systemd-networkd koristi za inicijalizaciju virtualnih mrežnih sučelja. Adresa i druge mrežne postavke za ova sučelja su specificirane u .mreža-fajlovi.
Napravite takav fajl /etc/systemd/network/25-tun2socks.network sa sljedećim sadržajem:
Name je naziv virtuelnog interfejsa koji ste naveli netdev-file.
Address — IP adresa koja će biti dodeljena virtuelnom interfejsu. Mora biti na istoj mreži kao adresa koju ste naveli u tun2socks servisu
Gateway - IP adresa "rutera" tun2socks, koji ste naveli prilikom kreiranja systemd usluge.
Dakle, interfejs tun2socks ima adresu 172.16.1.2, i usluga tun2socks - 172.16.1.1, odnosno, to je gateway za sve veze sa virtuelnog interfejsa.
Postavite virtuelnu pristupnu tačku
Instalirajte ovisnosti:
apt install util-linux procps hostapd iw haveged
Preuzmite spremište create_ap do vašeg automobila:
git clone https://github.com/oblique/create_ap
Idite do foldera spremišta na vašem računaru:
cd create_ap
Instalirajte u sistem:
make install
config će se pojaviti na vašem sistemu /etc/create_ap.conf. Evo glavnih opcija za uređivanje:
GATEWAY=10.0.0.1 - bolje je napraviti zasebnu rezervisanu podmrežu.
NO_DNS=1 - isključite, jer će ovaj parametar biti kontrolisan od strane virtuelnog interfejsa systemd-networkd.
NO_DNSMASQ=1 - isključite iz istog razloga.
WIFI_IFACE=wlp6s0 — bežični interfejs za laptop.
INTERNET_IFACE=tun2socks je virtuelni interfejs kreiran za tun2socks.
SSID=hostapd — naziv virtuelne pristupne tačke.
PASSPHRASE=12345678 - lozinka.
Ne zaboravite da omogućite uslugu:
systemctl enable create_ap
Omogućite DHCP server u systemd-networkd
Servis create_ap inicijalizira virtuelni interfejs u sistemu ap0. U teoriji, dnsmasq "visi" na ovom interfejsu, ali zašto instalirati dodatne usluge ako systemd-networkd sadrži ugrađeni DHCP server?
Da bismo to omogućili, definirajmo mrežne postavke za virtuelnu tačku. Da biste to učinili, kreirajte datoteku /etc/systemd/network/25-ap0.network sa sljedećim sadržajem:
Nakon što usluga create_ap inicijalizira virtuelni interfejs ap0, systemd-networkd će mu automatski dodijeliti IP adresu i omogućiti DHCP server.
Strings EmitDNS=yes и DNS=10.0.0.1 prenijeti postavke DNS servera na uređaje povezane na pristupnu tačku.
Ako ne planirate koristiti lokalni DNS server - u mom slučaju to je dnscrypt-proxy - možete instalirati DNS=10.0.0.1 в DNS=192.168.1.1gde 192.168.1.1 je adresa vašeg originalnog gatewaya. Tada će DNS upiti vašeg hosta i lokalne mreže ići nešifrirani kroz servere provajdera.
Dodajte adrese javnih servera, kao što je Google javni NTP:
server time1.google.com ibrust
server time2.google.com ibrust
server time3.google.com ibrust
server time4.google.com ibrust
Odobrite pristup serveru klijentima sa vaše mreže:
restrict 10.0.0.0 mask 255.255.255.0
Omogućite emitiranje na vašoj mreži:
broadcast 10.0.0.255
Na kraju, dodajte adrese ovih servera u statičku tabelu usmjeravanja. Da biste to učinili, otvorite konfiguracijsku datoteku bežičnog interfejsa /etc/systemd/network/25-wlp6s0.network i dodajte na kraj odjeljka Route.
Nakon ponovnog pokretanja ili ponovnog pokretanja, imat ćete drugu pristupnu tačku koja usmjerava host i LAN uređaje na SOCKS.
Izlaz izgleda ovako ip a običan laptop:
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
Kao rezultat toga,
Provajder vidi samo šifrovanu vezu sa vašim SOCKS serverom, što znači da ne vidi ništa.
I dalje vidi vaše NTP zahtjeve, da biste to spriječili, uklonite statičke rute za NTP servere. Međutim, nije sigurno da vaš SOCKS server dozvoljava NTP protokol.
Štaka viđena na Debainu 10
Ako pokušate ponovo pokrenuti mrežnu uslugu s konzole, ona će se srušiti s greškom. To je zbog činjenice da je njegov dio u obliku virtuelnog interfejsa vezan za tun2socks uslugu, što znači da se koristi. Da biste ponovo pokrenuli mrežnu uslugu, prvo morate zaustaviti uslugu tun2socks. Ali, mislim da ako pročitate do kraja, to vam definitivno nije problem!