Un an (sau două) de zile am amânat publicarea acestui articol dintr-un motiv principal — publicasem deja două articole în care am descris procesul de creare a unui router SOCKS dintr-un laptop obișnuit cu Debian.
Cu toate acestea, între timp versiunea stabilă a Debian-ului s-a actualizat la Buster, iar un număr suficient de mare de persoane m-au contactat pentru ajutor în configurare, ceea ce înseamnă că articolele mele anterioare nu sunt exhaustive. Ei bine, mă gândeam deja că metodele expuse în ele nu dezvăluie pe deplin toate nuanțele configurării Linux pentru rutarea în SOCKS. În plus, acestea sunt scrise pentru Debian Stretch, iar după actualizarea la Buster, în sistemul de inițializare systemd, am observat mici schimbări în interacțiunea serviciilor. De asemenea, în articolele mele nu am folosit systemd-networkd, deși este cea mai potrivită pentru configurații de rețea complexe.
În plus față de schimbările menționate mai sus, în configurația mea s-au adăugat următoarele servicii: hostapd — un serviciu pentru virtualizarea punctelor de acces, ntp pentru sincronizarea timpului clienților din rețeaua locală, dnscrypt-proxy pentru criptarea conexiunilor prin protocolul DNS și blocarea publicității pe clienții din rețeaua locală, precum și, așa cum am menționat anterior, systemd-networkd pentru configurarea interfețelor de rețea.
Iată o diagramă simplă a structurii interne a unui astfel de router.

Așadar, vă reamintesc care sunt obiectivele acestui ciclu de articole:
- A ruga toate conexiunile OS prin SOCKS, precum și conexiunile tuturor dispozitivelor din aceeași rețea cu laptopul.
- Laptopul meu, în acest caz, trebuie să rămână complet mobil. Asta înseamnă că trebuie să permită utilizarea unui mediu desktop și să nu fie legat de o locație fizică.
- Ultimul punct implică conectarea și rutarea doar prin intermediul interfeței wireless integrate.
- Și, bineînțeles, crearea unui ghid cuprinzător, precum și analiza tehnologiilor corespunzătoare în măsura cunoștințelor mele modeste.
Ce va fi discutat în acest articol:
- git — vom descărca repositoarele proiectelor tun2socks, necesar pentru rutarea traficului TCP în SOCKS, și create_ap — un script pentru automatizarea configurării punctului de acces virtual utilizând hostapd.
- tun2socks — vom construi și instala serviciul systemd în sistem.
- systemd-networkd — vom configura interfețele wireless și virtuale, tabelele de rutare statică și redirecționarea pachetelor.
- create_ap — vom instala serviciul systemd în sistem, vom configura și vom lansa punctul de acces virtual.
Pași opționali:
- ntp — vom instala și configura un server pentru sincronizarea timpului la clienții punctului de acces virtual.
- dnscrypt-proxy — vom cripta cererile DNS, le vom ruga în SOCKS și vom dezactiva domeniile publicitare pentru rețeaua locală.
De ce toate acestea?
Aceasta este una dintre modalitățile de organizare a protecției conexiunilor TCP ale rețelei locale. Principalul avantaj este că toate conexiunile trec prin SOCKS, dacă pentru ele nu a fost construit un traseu static prin gateway-ul original. Asta înseamnă că nu trebuie să configurăm setările serverului SOCKS nici pentru programele individuale, nici pentru clienții din rețeaua locală — toate merg în SOCKS implicit, deoarece acesta este gateway-ul implicit, până când specificăm altul.
Practic, adăugăm un al doilea router de criptare sub forma unui laptop înaintea routerului original și folosim conexiunea de internet a routerului original pentru cererile SOCKS deja criptate ale laptopului, care, la rândul său, rutează și criptează cererile clienților din rețeaua locală.
Din punctul de vedere al furnizorului, suntem conectați constant la un singur server cu trafic criptat.
Prin urmare, toate dispozitivele se conectează la punctul de acces virtual al laptopului.
Instalați tun2socks în sistem
Atâta timp cât mașina dvs. are internet, descărcați toate uneltele necesare.
apt updateapt install git make cmakeDescărcați pachetul badvpn
git clone https://github.com/ambrop72/badvpn
Va apărea un folder în sistemul dumneavoastră badvpn. Creați un folder separat pentru compilare
mkdir badvpn-build
Accesați-l
cd badvpn-build
Compilați tun2socks
cmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1
Instalați în sistem
make install
- Parametru
-DBUILD_NOTHING_BY_DEFAULT=1dezactivează compilarea tuturor componentelor din repository-ul badvpn. - —
DBUILD_TUN2SOCKS=1includează componenta în compilare tun2socks. make install— va instala binarul tun2socks în sistemul dumneavoastră la adresă/usr/local/bin/badvpn-tun2socks.
Instalați serviciul tun2socks în systemd
Creați un fișier /etc/systemd/system/tun2socks.service cu următorul conținut:
[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— primește numele interfeței virtuale, pe care o inițializăm cu systemd-networkd.--netif-ipaddr— adresa de rețea a „routerului” tun2socks, la care se conectează interfața virtuală. Este mai bine să fie un subrețea rezervată separată .--socks-server-addr— acceptă un socket (adresă:portal serverului SOCKS).
Dacă serverul dumneavoastră SOCKS necesită autentificare, puteți specifica parametrii --username și --password.
În continuare, înregistrați serviciul
systemctl daemon-reloadȘi activați
systemctl enable tun2socksÎnainte de a porni serviciul, asigurăm o interfață de rețea virtuală pentru acesta.
Trecem la systemd-networkd
Activăm systemd-networkd:
systemctl enable systemd-networkdDezactivăm serviciile de rețea curente.
systemctl disable networking NetworkManager NetworkManager-wait-online- NetworkManager-wait-online — este un serviciu care așteaptă existența unei conexiuni de rețea funcționale înainte ca systemd să continue să pornească alte servicii care depind de existența rețelei. Îl dezactivăm, deoarece vom trece la echivalentul systemd-networkd.
Să-l activăm imediat:
systemctl enable systemd-networkd-wait-onlineConfigurați interfața de rețea wireless
Creați un fișier de configurare systemd-networkd pentru interfața de rețea wireless /etc/systemd/network/25-wlp6s0.network.
[Match]
Name=wlp6s0
[Network]
Address=192.168.1.2/24
IPForward=yes
- Name — acesta este numele interfeței dumneavoastră wireless. Identificați-l cu comanda
ip a. - IPForward — directiva care activează redirecționarea pachetelor pe interfața de rețea.
- Address răspunde de atribuirea adresei IP interfeței wireless. O specificăm static, deoarece în cazul directivei echivalente
DHCP=yes, systemd-networkd creează în sistem o poartă implicită. Atunci tot traficul va merge prin poarta originală, și nu prin viitoarea interfață virtuală dintr-o subrețea diferită. Puteți verifica poarta implicită curentă cu comandaip r
Creați o rută statică pentru serverul SOCKS la distanță
Dacă serverul dumneavoastră SOCKS nu este local, ci la distanță, va trebui să creați o rută statică pentru acesta. În acest scop, adăugați o secțiune Route la finalul fișierului de configurare a interfeței wireless creat de dumneavoastră cu următorul conținut:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gateway— aceasta este poarta implicită sau adresa punctului de acces original.Destination— adresa serverului SOCKS.
Configurați wpa_supplicant pentru systemd-networkd
systemd-networkd folosește wpa_supplicant pentru a se conecta la un punct de acces securizat. Atunci când încearcă să „ridice” interfața wireless, systemd-networkd pornește serviciul wpa_supplicant@nume, unde nume — este numele interfeței wireless. Dacă nu ați folosit systemd-networkd până acum, este probabil ca acest serviciu să nu fie disponibil în sistemul dvs.
Prin urmare, creați-l cu comanda:
systemctl enable wpa_supplicant@wlp6s0Am folosit wlp6s0 ca nume al interfeței dvs. wireless. Acest nume poate diferi. Îl puteți afla cu comanda ip l.
Acum, serviciul creat wpa_supplicant@wlp6s0 va porni la activarea interfeței wireless, însă, la rândul său, va căuta setările SSID și parola punctului de acces în fișierul /etc/wpa_supplicant/wpa_supplicant-wlp6s0. De aceea, este necesar să-l creați folosind utilitarul wpa_passphrase.
Pentru aceasta, rulați comanda:
wpa_passphrase SSID password>\/etc\/wpa_supplicant\/wpa_supplicant-wlp6s0.confunde SSID — este numele punctului dvs. de acces, password — parola, iar wlp6s0 — este numele interfeței dvs. wireless.
Inițializați interfața virtuală pentru tun2socks
Creați un fișier pentru inițializarea noii interfețe virtuale în sistem/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
- Name — acesta este numele pe care systemd-networkd îl va atribui viitoarei interfețe virtuale la inițializare.
- Kind — este tipul interfeței virtuale. Din denumirea serviciului tun2socks, puteți deduce că folosește interfața de tip
tun. - netdev — este extensia fișierelor pe care
systemd-networkdle folosește pentru a inițializa interfețele de rețea virtuale. Adresa și alte setări de rețea pentru aceste interfețe sunt specificate în .network-fișiere.
Creați un astfel de fișier /etc/systemd/network/25-tun2socks.network cu următorul conținut:
[Match]
Name=tun2socks
[Network]
Address=172.16.1.2\/24
Gateway=172.16.1.1
Name— numele interfeței virtuale pe care l-ați specificat în netdev-fișier.Address— adresa IP care va fi atribuită interfeței virtuale. Trebuie să fie în aceeași rețea cu adresa pe care ați specificat-o în serviciul tun2socksGateway— adresa IP a «routerului» tun2socks, pe care ați specificat-o la crearea serviciului systemd.
Astfel, interfața tun2socks are adresa 172.16.1.2, iar serviciul tun2socks — 172.16.1.1, adică este gateway pentru toate conexiunile de la interfața virtuală.
Configurați punctul de acces virtual
Instalați dependențele:
apt install util-linux procps hostapd iw havegedDescărcați repository-ul create_ap pe mașina dvs.:
git clone https:\/\/github.com\/oblique\/create_apNavigați în folderul repository-ului pe mașina dvs.:
cd create_apInstalați-l în sistem:
make installÎn sistemul dvs. va apărea un fișier de configurare /etc/create_ap.conf. Iată opțiunile principale pentru modificare:
GATEWAY=10.0.0.1— ar fi mai bine să creați o subrețea rezervată separată.NO_DNS=1— dezactivați-l, deoarece acest parametru va fi gestionat de interfața virtuală systemd-networkd.NO_DNSMASQ=1— dezactivați din același motiv.WIFI_IFACE=wlp6s0— interfața wireless a laptopului.INTERNET_IFACE=tun2socks— interfața virtuală creată pentru tun2socks.SSID=hostapd— numele punctului de acces virtual.PASSPHRASE=12345678— parola.
Nu uitați să activați serviciul:
systemctl enable create_apActivați serverul DHCP în systemd-networkd
Serviciul create_ap inițiază în sistem interfața virtuală ap0. Teoretic, pe această interfață trebuie să ruleze dnsmasq, dar de ce să instalăm servicii suplimentare, când systemd-networkd are un server DHCP încorporat?
Pentru a-l activa, vom defini setările de rețea pentru punctul de acces virtual. Pentru aceasta, creați un fișier /etc/systemd/network/25-ap0.network cu următorul conținut:
[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
După ce serviciul create_ap inițiază interfața virtuală ap0, systemd-networkd îi va asigna automat o adresă IP și va activa serverul DHCP.
Liniile EmitDNS=yes și DNS=10.0.0.1 transmit setările serverului DNS dispozitivelor conectate la punctul de acces.
Dacă nu intenționați să folosiți un server DNS local — în cazul meu, acesta este dnscrypt-proxy — puteți seta DNS=10.0.0.1 în DNS=192.168.1.1, unde 192.168.1.1 — adresa gateway-ului original. Atunci, cererile DNS ale gazdei și ale rețelei locale vor trece în mod necriptat prin serverele furnizorului.
EmitNTP=yes și NTP=192.168.1.1 transmit setările NTP.
Același lucru este valabil și pentru linia NTP=10.0.0.1.
Instalați și configurați serverul NTP
Instalați-l în sistem:
apt install ntp
Editați configurația /etc/ntp.conf. Comentați adresele pool-urilor standard:
#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
Adăugați adresele serverelor publice, de exemplu, NTP Public de la Google:
server time1.google.com iburst
server time2.google.com iburst
server time3.google.com iburst
server time4.google.com iburst
Oferiți acces la server clienților din rețeaua dvs.:
restrict 10.0.0.0 mask 255.255.255.0
Activați difuzarea în rețeaua dvs.:
broadcast 10.0.0.255
În cele din urmă, adăugați adresele acestor servere în tabelul de rutare statică. Pentru aceasta, deschideți fișierul de configurare al interfeței wireless /etc/systemd/network/25-wlp6s0.network și adăugați la sfârșitul secțiunii 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.12Puteți afla adresele serverelor dvs. NTP folosind utilitarul host în următorul mod:
host time1.google.comInstalați dnscrypt-proxy, eliminați reclamele și ascundeți traficul DNS de la furnizor
apt install dnscrypt-proxyPentru a gestiona cererile DNS ale gazdei și ale rețelei locale, editați socket-ul /lib/systemd/system/dnscrypt-proxy.socket. Modificați următoarele linii:
ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53Repornți systemd:
systemctl daemon-reloadEditați configurația /etc/dnscrypt-proxy/dnscrypt-proxy.toml:
server_names = ['adguard-dns']
Pentru a redirecționa conexiunile dnscrypt-proxy prin tun2socks, adăugați mai jos:
force_tcp = true
Editați configurația /etc/resolv.conf, care informează serverul DNS gazdă.
nameserver 127.0.0.1
nameserver 192.168.1.1Prima linie include utilizarea dnscrypt-proxy, iar a doua folosește gateway-ul original, în cazul în care serverul dnscrypt-proxy nu este disponibil.
Gata!
Reporniți sau opriți serviciile de rețea active:
systemctl stop networking NetworkManager NetworkManager-wait-onlineȘi reporniți toate cele necesare:
systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntpDupă repornire sau restart, veți avea un al doilea punct de acces, care va dirija gazda și dispozitivele din rețeaua locală către SOCKS.
Iată cum arată ieșirea ip a pentru un laptop obișnuit:
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 concluzie
- Providerul vede doar conexiunea criptată către serverul dvs. SOCKS, deci nu vede nimic.
- Cu toate acestea, el vede solicitările dvs. NTP, pentru a preveni acest lucru, eliminați rutele statice pentru serverele NTP. Totuși, nu este sigur că serverul dvs. SOCKS permite protocolul NTP.
Soluție observată pe Debain 10
Dacă încercați să reporniți serviciul de rețea din consolă, acesta va cădea cu o eroare. Acest lucru se datorează faptului că o parte din el, sub formă de interfață virtuală, este legată de serviciul tun2socks, deci este utilizată. Pentru a reporni serviciul de rețea, trebuie mai întâi să opriți serviciul tun2socks. Dar, cred că dacă ați citit până aici, aceasta nu va fi o problemă pentru dvs.!
Linkuri
Sursa: habr.com
