Budujeme směrovač v SOCKS na notebooku s Debian 10

Celý rok (nebo dva) jsem odkládal publikaci tohoto článku z jednoho hlavního důvodu — už jsem publikoval dva články, ve kterých popisuji proces vytvoření routeru SOCKS z obyčejného notebooku s Debianem.

Nicméně, od té doby byla stabilní verze Debiana aktualizována na Buster, dostal jsem dostatek zpráv od lidí, kteří mě žádali o pomoc s nastavením, což znamená, že mé předchozí články nejsou vyčerpávající. No, sám jsem tušil, že metody, které jsem v nich uvedl, neodhalují všechny nuance nastavení Linuxu pro směrování v SOCKS. Kromě toho jsou napsány pro Debian Stretch, a po aktualizaci na Buster jsem si všiml drobných změn ve spolupráci služeb v systému init systemd. A v samotných článcích jsem nepoužil systemd-networkd, ačkoli se nejlépe hodí pro složité síťové konfigurace.

Kromě výše uvedených změn se moje konfigurace doplnila o takové služby jako hostapd — služba pro virtualizaci přístupového bodu, ntp pro synchronizaci času klientů místní sítě, dnscrypt-proxy pro šifrování připojení pomocí protokolu DNS a blokování reklamy na klientech lokální sítě, a jak jsem zmínil dříve, systemd-networkd pro konfiguraci síťových rozhraní.

Tady je jednoduchý blokový diagram vnitřního uspořádání takového routeru.

Budujeme směrovač v SOCKS na notebooku s Debian 10

Takže, připomenu, jaké cíle sleduje tento cyklus článků:

  1. Směrovat do SOCKS všechna připojení OS a také připojení všech zařízení v jedné síti s notebookem.
  2. Notebook v mém případě by měl zůstat plně mobilní. To znamená, že by měl umožnit používat pracovní prostředí a neměl by být vázán na fyzické umístění.
  3. Poslední bod předpokládá připojení a směrování pouze přes vestavěné bezdrátové rozhraní.
  4. No a samozřejmě, vytvoření vyčerpávajícího průvodce a analýzu odpovídajících technologií v rámci mých skromných znalostí.

Co bude v tomto článku projednáno:

  1. git — stáhneme repozitáře projektů tun2socks, potřebného pro směrování TCP provozu do SOCKS, a create_ap — skript pro automatizaci nastavení virtuálního přístupového bodu pomocí hostapd.
  2. tun2socks — postavíme a nainstalujeme službu systemd do systému.
  3. systemd-networkd — nastavíme bezdrátová a virtuální rozhraní, tabulky statického směrování a přesměrování paketů.
  4. create_ap — nainstalujeme službu systemd do systému, nastavíme a spustíme virtuální přístupový bod.

Nepovinné kroky:

  • ntp — nainstalujeme a nastavíme server pro synchronizaci času na klientech virtuálního přístupového bodu.
  • dnscrypt-proxy — zašifrujeme DNS dotazy, směrujeme je do SOCKS a zakážeme reklamní domény pro místní síť.

Proč to všechno?

To je jeden ze způsobů, jak organizovat ochranu TCP spojení místní sítě. Hlavní výhodou je, že všechna spojení jdou do SOCKS, pokud pro ně není vybudována statická trasa přes originální bránu. To znamená, že není třeba konfigurovat nastavení SOCKS serveru ani jednotlivým programům, ani klientům v místní síti — všechny jdou do SOCKS výchozí cestou, protože je to výchozí brána, dokud neřekneme jinak.

V podstatě přidáváme druhý šifrovaný router jako notebook před originální router a používáme internetové spojení originálního routeru pro již zašifrované SOCKS dotazy notebooku, který na oplátku směruje a šifruje dotazy klientů místní sítě.

Z pohledu poskytovatele jsme neustále připojeni k jednomu serveru se zašifrovaným provozem.

Odpovídajícím způsobem se všechna zařízení připojují k virtuálnímu přístupovému bodu notebooku.

Nainstalujte do systému tun2socks

Pokud máte na svém zařízení internet, stáhněte si všechny potřebné nástroje.

apt update
apt install git make cmake

Stáhněte balík badvpn

git clone https://github.com/ambrop72/badvpn

V systému se objeví složka badvpn. Vytvořte samostatnou složku pro sestavení

mkdir badvpn-build

Přejděte do ní

cd badvpn-build

Sestavte tun2socks

cmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1

Nainstalujte do systému

make install
  • Parameter -DBUILD_NOTHING_BY_DEFAULT=1 zakazuje sestavení všech komponent repozitáře badvpn.
  • —DBUILD_TUN2SOCKS=1 zapíná sestavení komponenty tun2socks.
  • make install — nainstaluje binárku tun2socks do vašeho systému na adrese /usr/local/bin/badvpn-tun2socks.

Nainstalujte službu tun2socks do systemd

Vytvořte soubor /etc/systemd/system/tun2socks.service s následujícím obsahem:

[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 — přijímá jméno virtuálního rozhraní, které inicializujeme pomocí systemd-networkd.
  • --netif-ipaddr — síťová adresa "routeru" tun2socks, k němuž se připojuje virtuální rozhraní. Je lepší vytvořit samostatnou rezervovanou podsíť.
  • --socks-server-addr — přijímá socket (adresa:port SOCKS serveru).

Pokud váš SOCKS server vyžaduje autentizaci, můžete specifikovat parametry --uživatelské_jméno a --heslo.

Dále zaregistrujte službu

systemctl daemon-reload

A zapněte

systemctl enable tun2socks

Než spustíme službu, zajistíme jí virtuální síťové rozhraní.

Přejdeme na systemd-networkd

Aktivujeme systemd-networkd:

systemctl enable systemd-networkd

Deaktivujeme aktuální síťové služby.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wait-online — to je služba, která čeká na aktivní síťové připojení, než systemd pokračuje v aktivaci dalších služeb závislých na dostupnosti sítě. Deaktivujeme ji, protože přejdeme na analog systemd-networkd.

Pojďme ji rovnou zapnout:

systemctl enable systemd-networkd-wait-online

Nastavte bezdrátové síťové rozhraní

Vytvořte konfigurační soubor systemd-networkd pro bezdrátové síťové rozhraní /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Název — to je název vašeho bezdrátového rozhraní. Identifikujte ho příkazem ip a.
  • IPForward — direktiva, která povoluje přesměrování paketů na síťovém rozhraní.
  • Address odpovídá za přiřazení IP adresy bezdrátovému rozhraní. Stanovujeme ji staticky, protože při obdobné direktivě DHCP=yes, systemd-networkd vytvoří v systému výchozí bránu. Všechny provoz pak půjde přes původní bránu, nikoli přes budoucí virtuální rozhraní v jiné podsíti. Aktuální výchozí bránu můžete zkontrolovat příkazem ip r

Vytvořte statickou trasu pro vzdálený SOCKS server

Pokud není váš SOCKS server místní, ale vzdálený, je třeba vytvořit pro něj statickou trasu. K tomu přidejte sekci Route na konec vámi vytvořeného konfiguračního souboru bezdrátového rozhraní s následujícím obsahem:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway — to je výchozí brána nebo adresa vaší původní přístupové stanice.
  • Destination — adresa SOCKS serveru.

Nastavte wpa_supplicant pro systemd-networkd

systemd-networkd využívá wpa_supplicant pro připojení k zabezpečenému přístupovému bodu. Při snaze „aktivovat“ bezdrátové rozhraní systemd-networkd spouští službu wpa_supplicant@jméno, kde název — to je název bezdrátového rozhraní. Pokud jste dosud nepoužívali systemd-networkd, je pravděpodobné, že tato služba ve vašem systému chybí.

Proto ji vytvořte příkazem:

systemctl enable wpa_supplicant@wlp6s0

Použil jsem wlp6s0 jako název svého bezdrátového rozhraní. Může se u vás lišit. Můžete si ho zjistit příkazem ip l.

Nyní vytvořená služba wpa_supplicant@wlp6s0 bude spuštěna při "zvednutí" bezdrátového rozhraní, avšak samozřejmě bude hledat nastavení SSID a hesla přístupového bodu v souboru /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Proto je nutné ho vytvořit pomocí nástroje wpa_passphrase.

K tomu zadejte příkaz:

wpa_passphrase SSID password>/etc/wpa_supplicant/wpa_supplicant-wlp6s0.conf

kde SSID — je jméno vašeho přístupového bodu, password — heslo, a wlp6s0 — je jméno vašeho bezdrátového rozhraní.

Inicializujte virtuální rozhraní pro tun2socks

Vytvořte soubor pro inicializaci nového virtuálního rozhraní v systému/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Název — je název, který systemd-networkd přiřadí budoucímu virtuálnímu rozhraní při jeho inicializaci.
  • Kind — je typ virtuálního rozhraní. Jak už podle názvu služby tun2socks můžete odhadnout, používá rozhraní typu tun.
  • netdev — to jsou přípony souborů, které systemd-networkd používá pro inicializaci virtuálních síťových rozhraní. Adresa a další síťová nastavení pro tato rozhraní jsou uvedena v .*.network-souborech.

Vytvořte takový soubor /etc/systemd/network/25-tun2socks.network s následujícím obsahem:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Název — jméno virtuálního rozhraní, které jste uvedli v netdev-soubore.
  • Address — IP adresa, která bude přidělena virtuálnímu rozhraní. Měla by být ve stejné síti jako adresa, kterou jste uvedli ve službě tun2socks
  • Gateway — IP adresa "routeru" tun2socks, kterou jste uvedli při vytváření služby systemd.

Takže rozhraní tun2socks má adresu 172.16.1.2, a služba tun2socks — 172.16.1.1, což znamená, že je bránou pro všechna spojení z virtuálního rozhraní.

Nastavte virtuální přístupový bod

Nainstalujte závislosti:

apt install util-linux procps hostapd iw haveged

Stáhněte repozitář create_ap na svůj stroj:

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

Přejděte do složky repozitáře na vašem stroji:

cd create_ap

Nainstalujte do systému:

make install

Ve vašem systému se objeví konfigurace /etc/create_ap.conf. Zde jsou hlavní možnosti k úpravě:

  • GATEWAY=10.0.0.1 — je lepší vytvořit ji jako samostatnou rezervovanou podsíť.
  • NO_DNS=1 — vypněte, protože tímto parametrem bude řídit virtuální rozhraní systemd-networkd.
  • NO_DNSMASQ=1 — vypněte ze stejného důvodu.
  • WIFI_IFACE=wlp6s0 — bezdrátové rozhraní notebooku.
  • INTERNET_IFACE=tun2socks — virtuální rozhraní vytvořené pro tun2socks.
  • SSID=hostapd — jméno virtuálního přístupového bodu.
  • PASSPHRASE=12345678 — heslo.

Nezapomeňte zapnout službu:

systemctl enable create_ap

Zapněte DHCP server v systemd-networkd

Služba create_ap inicializuje v systému virtuální rozhraní ap0Ideálně by na tomto rozhraní měl běžet dnsmasq, ale proč instalovat zbytečné služby, když systemd-networkd obsahuje vestavěný DHCP server?

Abychom ho aktivovali, určíme síťová nastavení pro virtuální bod. K tomu vytvořte soubor /etc/systemd/network/25-ap0.network s následujícím obsahem:

[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

Po inicializaci virtuálního rozhraní službou create_ap ap0, systemd-networkd mu automaticky přiřadí IP adresu a aktivuje DHCP server.

Řádky EmitDNS=yes a DNS=10.0.0.1 přenášejí nastavení DNS serveru zařízením připojeným k přístupovému bodu.

Pokud neplánujete používat lokální DNS server — v mém případě je to dnscrypt-proxy — můžete nastavit DNS=10.0.0.1 v DNS=192.168.1.1, kde 192.168.1.1 — adresu vašeho původního brány. Poté DNS dotazy vašeho hostitele a lokální sítě půjdou nezabezpečeně přes servery poskytovatele.

EmitNTP=yes a NTP=192.168.1.1 přenášejí nastavení NTP.

Stejně tak to platí pro řádek NTP=10.0.0.1.

Nainstalujte a nastavte NTP server

Nainstalujte do systému:

apt install ntp

Upravte konfigurační soubor /etc/ntp.conf. Zakomentujte adresy standardních poolů:

#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

Přidejte adresy veřejných serverů, například Google Public NTP:

server time1.google.com iburst
server time2.google.com iburst
server time3.google.com iburst
server time4.google.com iburst

Umožněte přístup k serveru klientům z vaší sítě:

restrict 10.0.0.0 mask 255.255.255.0

Aktivujte broadcast do vaší sítě:

broadcast 10.0.0.255

Nakonec přidejte adresy těchto serverů do tabulky statického směrování. K tomu otevřete konfigurační soubor bezdrátového rozhraní /etc/systemd/network/25-wlp6s0.network a přidejte na konec sekce 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 zjistit adresy vašich NTP serverů pomocí nástroje host následujícím způsobem:

host time1.google.com

Nainstalujte dnscrypt-proxy, zbavte se reklamy a skryjte DNS provoz od poskytovatele

apt install dnscrypt-proxy

Abychom obsluhovali DNS dotazy hostitele a lokální sítě, upravte socket /lib/systemd/system/dnscrypt-proxy.socket. Změňte následující řádky:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Restartujte systemd:

systemctl daemon-reload

Upravte konfigurační soubor /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Aby se spojení dnscrypt-proxy nasměrovala přes tun2socks, přidejte níže:

force_tcp = true

Upravte konfigurační soubor /etc/resolv.conf, což říká DNS serveru o hostiteli.

nameserver 127.0.0.1
nameserver 192.168.1.1

První řádek zahrnuje použití dnscrypt-proxy, druhý používá původní bránu, pokud není server dnscrypt-proxy k dispozici.

Hotovo!

Restartujte nebo zastavte aktivní síťové služby:

systemctl stop networking NetworkManager NetworkManager-wait-online

A restartujte všechny potřebné:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Po restartu nebo restartování se vám objeví druhý přístupový bod, který směruje hostitele a zařízení v místní síti do SOCKS.

Takhle vypadá výstup ip a běž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

Nakonec

  1. Poskytovatel vidí pouze šifrované spojení k vašemu SOCKS serveru, což znamená, že nic nevidí.
  2. Přesto vidí vaše NTP dotazy, abyste tomu předešli, odstraňte statické směrování pro NTP servery. Nicméně, není jisté, zda váš SOCKS server podporuje NTP protokol.

Záplata pozorovaná na Debain 10

Pokud se pokusíte restartovat síťovou službu z konzole, dojde k chybě. Je to kvůli tomu, že její část ve formě virtuálního rozhraní je vázána na službu tun2socks, což znamená, že je používána. Aby bylo možné restartovat síťovou službu, je nejprve nutné zastavit službu tun2socks. Ale myslím, že pokud jste dočetli až sem, pro vás to určitě nebude problém!

Odkazy

  1. Statické směrování v Linuxu – IBM
  2. systemd-networkd.service – Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Tento skript vytváří NATovaný nebo bridged WiFi přístupový bod.
  5. dnscrypt-proxy 2 – Flexibilní DNS proxy s podporou šifrovaných DNS protokolů.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster