Stavíme router v SOCKS na notebooku s Debian 10

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.

Stavíme router v SOCKS na notebooku s Debian 10

Takže, pripomeniem si, aké ciele sleduje cyklus týchto článkov:

  1. Smerovať všetky pripojenia OS cez SOCKS, ako aj pripojenia všetkých zariadení v jednej sieti s laptopom.
  2. 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.
  3. Posledný bod naznačuje pripojenie a smerovanie iba cez zabudované bezdrôtové rozhranie.
  4. 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:

  1. 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.
  2. tun2socks – postavíme a nainštalujeme službu systemd do systému.
  3. systemd-networkd – nastavíme bezdrôtové a virtuálne rozhrania, tabuľky statického smerovania a preposielanie paketov.
  4. 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 update
apt install git make cmake

Stiahnite 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=1 deaktivuje zostavenie všetkých komponentov repozitára badvpn.
  • —DBUILD_TUN2SOCKS=1 zapí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ú rezervovanú podsieť.
  • --socks-server-addr — prijíma socket (adresa:port servera SOCKS).

Ak váš SOCKS server vyžaduje autentifikáciu, môžete zadať parametre --username a --password.

Ďalej zaregistrujte službu

systemctl daemon-reload

A zapnite

systemctl enable tun2socks

Predtý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-networkd

Vypneme 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-online

Nakonfigurujte 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íkazu ip 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ána je predvolená brána alebo adresa vašej pôvodnej prístupovej bod.
  • Destination je 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@wlp6s0

Použ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.conf

kde 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-networkd použí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ázov je názov virtuálneho rozhrania, ktoré ste uviedli v netdev-súbore.
  • Address je IP adresa, ktorá bude priradená virtuálnemu rozhraniu. Musí byť v rovnakej sieti s adresou, ktorú ste uviedli v službe tun2socks
  • Brána je 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 haveged

Stiahnite si repozitár create_ap na svoju stroj:

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

Prejdite do adresára repozitára na vašom stroji:

cd create_ap

Nainštalujte do systému:

make install

Vo 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.1 je lepšie robiť ako samostatnú rezervovanú podsieť.
  • NO_DNS=1 vypnite, pretože tento parameter bude spravovať virtuálne rozhranie systemd-networkd.
  • NO_DNSMASQ=1 vypnite z rovnakého dôvodu.
  • WIFI_IFACE=wlp6s0 je bezdrôtové rozhranie notebooku.
  • INTERNET_IFACE=tun2socks je virtuálne rozhranie vytvorené pre tun2socks.
  • SSID=hostapd je názov virtuálneho prístupového bodu.
  • PASSPHRASE=12345678 je heslo.

Nezabudnite zapnúť službu:

systemctl enable create_ap

Zapnite 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.12

Môžete zistiť adresy vašich NTP serverov pomocou nástroja host nasledovne:

host time1.google.com

Nainštalujte dnscrypt-proxy, odstráňte reklamu a skryte DNS prevádzku pred poskytovateľom

apt install dnscrypt-proxy

Aby 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:53

Reštartujte systemd:

systemctl daemon-reload

Upravte 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.1

Prvý 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-online

A znovu spustite všetky potrebné:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Po 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

  1. Poskytovateľ vidí len šifrované spojenie k vášmu serveru SOCKS, a teda nič nevidí.
  2. 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

  1. Statická routa v Linuxe - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Tento skript vytvára NATed alebo bridged WiFi prístupový bod.
  5. dnscrypt-proxy 2 - Flexibilný DNS proxy, s podporou pre šifrované DNS protokoly.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster