Celý rok (alebo dva) som odkladal publikáciu tohto článku z jedného hlavného dôvodu – už som publikoval dva články, v ktorých som opísal proces vytvárania smerovača v SOCKS z bežného laptopu s Debianom.
Avšak odvtedy stabilná verzia Debiana aktualizovala na Buster a dostal som dostatok žiadostí od ľudí, aby som im pomohol s nastavením, takže moje predchádzajúce články nie sú vyčerpávajúce. Mimochodom, sám som tušil, že metódy, ktoré sú v nich uvedené, neodhaľujú všetky nuansy nastavenia Linuxu pre smerovanie v SOCKS. Okrem toho sú napísané pre Debian Stretch, a po aktualizácii na Buster som si v systémovom init systéme systemd všimol malé zmeny vo vzájomnej interakcii služieb. V článkoch som dokonca nepoužil systemd-networkd, hoci je najvhodnejšia pre zložitú sieťovú konfiguráciu.
Okrem vyššie uvedených zmien sa do mojej konfigurácie pridali také služby ako hostapd – služba na virtualizáciu prístupového bodu, ntp pre synchronizáciu času klientov miestnej siete, dnscrypt-proxy na šifrovanie pripojení pomocou protokolu DNS a blokovanie reklamy na klientoch miestnej siete, a ako som už spomenul, systemd-networkd na konfiguráciu sieťových rozhraní.
Tu je najjednoduchšia bloková schéma vnútornej štruktúry takéhoto smerovača.

Takže, pripomeniem si, aké ciele sleduje cyklus týchto článkov:
- Smerovať všetky pripojenia OS cez SOCKS, ako aj pripojenia všetkých zariadení v jednej sieti s laptopom.
- Laptop by v mojom prípade mal zostať úplne prenosný. To znamená, že umožní používať prostredie pracovnej plochy a nebude viazaný na fyzickú polohu.
- Posledný bod naznačuje pripojenie a smerovanie iba cez zabudované bezdrôtové rozhranie.
- No a samozrejme, vytvorenie vyčerpávajúceho sprievodcu a rozobratie súvisiacej technológie v miere mojich skromných znalostí.
Čo bude uvedené v tomto článku:
- git – stiahnuť repozitáre projektov tun2socks, potrebné na smerovanie TCP prevádzky do SOCKS a create_ap – skript na automatizáciu nastavenia virtuálneho prístupového bodu pomocou hostapd.
- tun2socks – postavíme a nainštalujeme službu systemd do systému.
- systemd-networkd – nastavíme bezdrôtové a virtuálne rozhrania, tabuľky statického smerovania a preposielanie paketov.
- create_ap — nainštalujeme službu systemd do systému, nastavíme a spustíme virtuálny prístupový bod.
Nepovinné kroky:
- ntp — nainštalujeme a nastavíme server na synchronizáciu času na klientoch virtuálneho prístupového bodu.
- dnscrypt-proxy — zašifrujeme DNS požiadavky, smerujeme ich do SOCKS a deaktivujeme reklamné domény pre lokálnu sieť.
Prečo to všetko?
Je to jeden zo spôsobov, ako organizovať ochranu TCP pripojení lokálnej siete. Hlavná výhoda — všetky pripojenia idú do SOCKS, ak pre ne neexistuje statická cesta cez pôvodný bránu, čo znamená, že nie je potrebné nastavenie SOCKS servera pre jednotlivé programy alebo klientov v lokálnej sieti — všetky idú do SOCKS automaticky, pretože je to predvolené brána, pokiaľ nešpecifikujeme inak.
V podstate pridávame druhý šifrujúci router v podobe laptopu pred pôvodným routerom a používame internetové pripojenie pôvodného routera pre už zašifrované SOCKS požiadavky laptopu, ktorý následne smeruje a šifruje požiadavky klientov lokálnej siete.
Z pohľadu poskytovateľa sme neustále pripojení k jednému serveru so zašifrovaným prenosom.
Podľa toho sa všetky zariadenia pripájajú k virtuálnemu prístupovému bodu laptopu.
Nainštalujte tun2socks do systému
Pokiaľ máte na svojom zariadení internet, stiahnite si všetky potrebné nástroje.
apt updateapt install git make cmakeStiahnite balík badvpn
git clone https://github.com/ambrop72/badvpn
Vo vašom systéme sa vytvorí priečinok badvpn. Vytvorte samostatný priečinok pre zostavenie
mkdir badvpn-build
Prejdite do neho
cd badvpn-build
Zostavte tun2socks
cmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1
Nainštalujte do systému
make install
- Parameter
-DBUILD_NOTHING_BY_DEFAULT=1deaktivuje zostavenie všetkých komponentov repozitára badvpn. - —
DBUILD_TUN2SOCKS=1zapína zostavenie komponentu tun2socks. make install— nainštaluje binárku tun2socks do vášho systému na adrese/usr/local/bin/badvpn-tun2socks.
Nainštalujte službu tun2socks do systemd
Vytvorte súbor /etc/systemd/system/tun2socks.service s nasledujúcim obsahom:
[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— prijíma názov virtuálneho rozhrania, ktoré inicializujeme pomocou systemd-networkd.--netif-ipaddr— sieťová adresa «routera» tun2socks, ku ktorému sa pripája virtuálne rozhranie. Je lepšie to urobiť ako samostatnú .--socks-server-addr— prijíma socket (adresa:portservera SOCKS).
Ak váš SOCKS server vyžaduje autentifikáciu, môžete zadať parametre --username a --password.
Ďalej zaregistrujte službu
systemctl daemon-reloadA zapnite
systemctl enable tun2socksPredtým, ako spustíme službu, zabezpečíme jej virtuálnym sieťovým rozhraním.
Prejdeme na systemd-networkd
Zapneme systemd-networkd:
systemctl enable systemd-networkdVypneme súčasné sieťové služby.
systemctl disable networking NetworkManager NetworkManager-wait-online- NetworkManager-wait-online je služba, ktorá čaká na existenciu fungujúceho sieťového pripojenia, skôr ako systemd pokračuje v spúšťaní iných služieb závislých od siete. Vypneme ju, pretože prejdeme na ekvivalent systemd-networkd.
Poďme ho hneď zapnúť:
systemctl enable systemd-networkd-wait-onlineNakonfigurujte bezdrôtové sieťové rozhranie
Vytvorte súbor konfigurácie systemd-networkd pre bezdrôtové sieťové rozhranie /etc/systemd/network/25-wlp6s0.network.
[Match]
Name=wlp6s0
[Network]
Address=192.168.1.2/24
IPForward=yes
- Názov je názov vášho bezdrôtového rozhrania. Identifikujte ho pomocou príkazu
ip a. - IPForward je direktíva, ktorá zapína smerovanie paketov na sieťovom rozhraní.
- Address zodpovedá za priradenie IP adresy bezdrôtovému rozhraniu. Udávame ho staticky, pretože pri ekvivalentnej direktíve
DHCP=yes, systemd-networkd vytvára v systéme predvolenú bránu. Potom celý tráfik pôjde cez pôvodnú bránu, a nie cez budúce virtuálne rozhranie v odlišnej podsieti. Môžete skontrolovať aktuálnu predvolenú bránu pomocou príkazuip r
Vytvorte statickú trasu pre vzdialený SOCKS server
Ak váš SOCKS server nie je lokálny, ale vzdialený, potrebujete preň vytvoriť statickú trasu. Na to pridajte sekciu Route na koniec vytvoreného súboru konfigurácie bezdrôtového rozhrania s nasledujúcim obsahom:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Bránaje predvolená brána alebo adresa vašej pôvodnej prístupovej bod.Destinationje adresa SOCKS servera.
Nakonfigurujte wpa_supplicant pre systemd-networkd
systemd-networkd používa wpa_supplicant na pripojenie k zabezpečenej prístupovej bode. Pri pokuse o "zdvihnúť" bezdrôtové rozhranie systemd-networkd spúšťa službu wpa_supplicant@name, kde názov je názov bezdrôtového rozhrania. Ak ste doteraz nepoužívali systemd-networkd, pravdepodobne táto služba vo vašom systéme chýba.
Preto ju vytvorte príkazom:
systemctl enable wpa_supplicant@wlp6s0Použil som wlp6s0 ako názov vašej bezdrôtovej rozhrania. Môže sa líšiť. Môžete ho zistiť príkazom ip l.
Teraz vytvorená služba wpa_supplicant@wlp6s0 sa spustí pri „zdvihnutí“ bezdrôtového rozhrania, ale zároveň bude hľadať nastavenia SSID a hesla prístupového bodu v súbore /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Preto je potrebné ho vytvoriť pomocou nástroja wpa_passphrase.
Na to vykonajte príkaz:
wpa_passphrase SSID password>/etc/wpa_supplicant/wpa_supplicant-wlp6s0.confkde SSID je názov vášho prístupového bodu, password je heslo, a wlp6s0 je názov vášho bezdrôtového rozhrania.
Inicializujte virtuálne rozhranie pre tun2socks
Vytvorte súbor na inicializáciu nového virtuálneho rozhrania v systéme/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
- Názov je názov, ktorý systemd-networkd priradí budúcemu virtuálnemu rozhraniu pri jeho inicializácii.
- Kind je typ virtuálneho rozhrania. Na základe názvu služby tun2socks si môžete domyslieť, že používa rozhranie typu
tun. - netdev je prípona súborov, ktoré
systemd-networkdpoužíva na inicializáciu virtuálnych sieťových rozhraní. Adresa a ďalšie sieťové nastavenia pre tieto rozhrania sú uvedené v .*sieť-súboroch.
Vytvorte takýto súbor /etc/systemd/network/25-tun2socks.network s nasledujúcim obsahom:
[Match]
Name=tun2socks
[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
Názovje názov virtuálneho rozhrania, ktoré ste uviedli v netdev-súbore.Addressje IP adresa, ktorá bude priradená virtuálnemu rozhraniu. Musí byť v rovnakej sieti s adresou, ktorú ste uviedli v službe tun2socksBránaje IP adresa „routera“ tun2socks, ktorú ste uviedli pri vytváraní služby systemd.
Týmto má rozhranie tun2socks adresu 172.16.1.2, a služba tun2socks — 172.16.1.1, teda je bránou pre všetky spojenia z virtuálneho rozhrania.
Nastavte virtuálny prístupový bod
Nainštalujte závislosti:
apt install util-linux procps hostapd iw havegedStiahnite si repozitár create_ap na svoju stroj:
git clone https://github.com/oblique/create_apPrejdite do adresára repozitára na vašom stroji:
cd create_apNainštalujte do systému:
make installVo vašom systéme sa objaví konfiguračný súbor /etc/create_ap.conf. Tu sú hlavné možnosti na úpravu:
GATEWAY=10.0.0.1je lepšie robiť ako samostatnú rezervovanú podsieť.NO_DNS=1vypnite, pretože tento parameter bude spravovať virtuálne rozhranie systemd-networkd.NO_DNSMASQ=1vypnite z rovnakého dôvodu.WIFI_IFACE=wlp6s0je bezdrôtové rozhranie notebooku.INTERNET_IFACE=tun2socksje virtuálne rozhranie vytvorené pre tun2socks.SSID=hostapdje názov virtuálneho prístupového bodu.PASSPHRASE=12345678je heslo.
Nezabudnite zapnúť službu:
systemctl enable create_apZapnite DHCP server v systemd-networkd
Služba create_ap inicializuje vo virtuálnom rozhraní systému ap0. V zásade je na tomto rozhraní pripojený dnsmasq, ale prečo inštalovať nadbytočné služby, keď systemd-networkd obsahuje zabudovaný DHCP server?
Aby sme ho zapli, definujeme sieťové nastavenia pre virtuálny bod. Na to vytvorte súbor /etc/systemd/network/25-ap0.network s nasledujúcim obsahom:
[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
Akonáhle služba create_ap inicializuje virtuálne rozhranie ap0, systemd-networkd mu automaticky priradí IP adresu a zapne DHCP server.
Riadky EmitDNS=yes a DNS=10.0.0.1 poskytujú nastavenia DNS serveru zariadeniam pripojeným k prístupovému bodu.
Ak neplánujete používať lokálny DNS server — v mojom prípade je to dnscrypt-proxy — môžete nastaviť DNS=10.0.0.1 v DNS=192.168.1.1, kde 192.168.1.1 — adresa vášho pôvodného brány. Potom DNS požiadavky vášho hostiteľa a lokálnej siete pôjdu nešifrované cez servery poskytovateľa.
EmitNTP=yes a NTP=192.168.1.1 poskytujú nastavenia NTP.
To isté platí pre riadok NTP=10.0.0.1.
Nainštalujte a nastavte NTP server
Nainštalujte do systému:
apt install ntp
Upravte konfiguráciu /etc/ntp.conf. Zakomentujte adresy štandardných poolov:
#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
Pridajte adresy verejných serverov, ako napríklad Google Public NTP:
server time1.google.com iburst
server time2.google.com iburst
server time3.google.com iburst
server time4.google.com iburst
Poskytnite prístup k serveru klientom vo vašej sieti:
restrict 10.0.0.0 mask 255.255.255.0
Zapnite vysielanie vo vašej sieti:
broadcast 10.0.0.255
Nakoniec pridajte adresy týchto serverov do tabuľky statického smerovania. Na to otvorte súbor konfigurácie bezdrôtového rozhrania /etc/systemd/network/25-wlp6s0.network a pridajte na koniec sekcie 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.12Môžete zistiť adresy vašich NTP serverov pomocou nástroja host nasledovne:
host time1.google.comNainštalujte dnscrypt-proxy, odstráňte reklamu a skryte DNS prevádzku pred poskytovateľom
apt install dnscrypt-proxyAby sa spracovávali DNS požiadavky hostiteľa a lokálnej siete, upravte soket /lib/systemd/system/dnscrypt-proxy.socket. Zmeňte nasledujúce riadky:
ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53Reštartujte systemd:
systemctl daemon-reloadUpravte konfiguráciu /etc/dnscrypt-proxy/dnscrypt-proxy.toml:
server_names = ['adguard-dns']
Aby ste smerovali pripojenia dnscrypt-proxy cez tun2socks, pridajte nižšie:
force_tcp = true
Upravte konfiguráciu /etc/resolv.conf, ktorý oznamuje DNS serveru hostiteľ.
nameserver 127.0.0.1
nameserver 192.168.1.1Prvý riadok povoľuje používanie dnscrypt-proxy, druhý — používa pôvodný bránu, v prípade, že server dnscrypt-proxy nie je dostupný.
Hotovo!
Reštartujte sa alebo zastavte existujúce sieťové služby:
systemctl stop networking NetworkManager NetworkManager-wait-onlineA znovu spustite všetky potrebné:
systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntpPo reštarte alebo reštartovaní sa objaví druhý prístupový bod, ktorý smeruje hostiteľa a zariadenia lokálnej siete do SOCKS.
Takto vyzerá výstup ip a bežného notebooku:
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
Nakoniec
- Poskytovateľ vidí len šifrované spojenie k vášmu serveru SOCKS, a teda nič nevidí.
- A predsa vidí vaše NTP požiadavky, aby tomu zabránili, odstráňte statické trasy pre NTP servery. Avšak, nie je isté, že váš server SOCKS povoľuje NTP protokol.
Náplasť, pozorovaná na Debain 10
Ak sa pokúsite reštartovať sieťovú službu z konzoly, tak to zlyhá s chybou. Je to spôsobené tým, že jej časť v podobe virtuálneho rozhrania je viazaná na službu tun2socks, teda sa používa. Aby ste reštartovali sieťovú službu, musíte najprv zastaviť službu tun2socks. Ale myslím, že ak ste dočítali až sem, pre vás to určite nie je problém!
Odkazy
Zdroj: habr.com
