Sestavení routeru v SOCKS na notebooku Debian 10

Celý rok (nebo dva) odkládám zveřejnění tohoto článku z hlavního důvodu - publikoval jsem již dva články, ve kterých jsem popisoval postup tvorby routeru v SOCKS z nejobyčejnějšího notebooku s Debianem.

Od doby, kdy byla stabilní verze Debianu upgradována na Buster, se na mě obrátilo velké množství lidí s žádostí o pomoc s nastavením, což znamená, že mé předchozí články nejsou vyčerpávající. Sám jsem uhádl, že metody v nich nastíněné plně neodhalují všechny jemnosti nastavení Linuxu pro směrování do SOCKS. Navíc jsou napsané pro Debian Stretch a po upgradu na Buster jsem v systemd init systému zaznamenal mírnou změnu v interakci služeb. A v samotných článcích jsem nepoužil systemd-networkd, i když se nejlépe hodí pro složité konfigurace sítě.

Kromě výše uvedených změn byly do mé konfigurace přidány následující služby: hostapd - služba pro virtualizaci přístupového bodu, ntp synchronizovat čas klientů místní sítě, dnscrypt-proxy k šifrování připojení přes protokol DNS a zakázání reklamy na klientech místní sítě a také, jak jsem již zmínil, systemd-networkd pro konfiguraci síťových rozhraní.

Zde je nejjednodušší blokové schéma vnitřní struktury takového routeru.

Sestavení routeru v SOCKS na notebooku Debian 10

Připomenu vám tedy, jaké cíle sleduje série těchto článků:

  1. Nasměrujte všechna připojení OS na SOCKS a také připojení všech zařízení, která jsou ve stejné síti jako notebook.
  2. Notebook v mém případě musí zůstat plně mobilní. Tedy dát možnost používat desktopové prostředí a nebý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, samozřejmě, vytvoření vyčerpávajícího průvodce, stejně jako rozbor příslušných technologií podle mého nejlepšího skromného vědomí.

O čem bude tento článek:

  1. git - stáhnout repozitáře projektů tun2sockspotřebné pro směrování provozu TCP do SOCKS a create_ap - skript pro automatizaci konfigurace virtuálního přístupového bodu pomocí hostapd.
  2. tun2socks - vytvořit a nainstalovat službu systemd v systému.
  3. systemd-networkd - konfigurovat bezdrátová a virtuální rozhraní, statické směrovací tabulky a předávání paketů.
  4. create_ap - nainstalovat službu systemd do systému, nakonfigurovat a spustit virtuální přístupový bod.

Volitelné kroky:

  • ntp - nainstalovat a nakonfigurovat server pro synchronizaci času na klientech virtuálních přístupových bodů.
  • dnscrypt-proxy - šifrovat požadavky DNS, směrovat je do SOCKS a zakázat reklamní domény pro místní síť.

K čemu to všechno je?

Toto je jeden ze způsobů, jak organizovat ochranu TCP spojení v lokální síti. Hlavní výhodou je, že všechna připojení jdou do SOCKS, pokud pro ně není vybudována statická trasa přes původní bránu. To znamená, že nemusíte zapisovat nastavení serveru SOCKS ani jednotlivým programům, ani klientům v místní síti – všechna jdou standardně na SOCKS, protože se jedná o výchozí bránu, dokud neurčíme jinak.

V podstatě přidáme druhý šifrovací router jako notebook před původní router a použijeme internetové připojení původního routeru pro již SOCKS šifrované požadavky notebooku, které zase směrují a šifrují požadavky od LAN klientů.

Z pohledu poskytovatele jsme neustále připojeni ke stejnému serveru s šifrovaným provozem.

V souladu s tím jsou všechna zařízení připojena k virtuálnímu přístupovému bodu notebooku.

Nainstalujte tun2socks do vašeho systému

Dokud máte na svém počítači internet, stáhněte si všechny potřebné nástroje.

apt update
apt install git make cmake

Stáhněte si balíček badvpn

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

Ve vašem systému se objeví složka badvpn. Vytvořte samostatnou složku sestavení

mkdir badvpn-build

Jděte do toho

cd badvpn-build

Sbírat tun2socks

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

Nainstalujte do systému

make install
  • Parametr -DBUILD_NOTHING_BY_DEFAULT=1 zakáže sestavení všech součástí úložiště badvpn.
  • -DBUILD_TUN2SOCKS=1 zahrnuje součást v sestavě tun2socks.
  • make install - nainstaluje binární soubor tun2socks do vašeho systému na adrese /usr/local/bin/badvpn-tun2socks.

Nainstalujte službu tun2socks v 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řevezme název virtuálního rozhraní, které inicializujeme pomocí systemd-networkd.
  • --netif-ipaddr - síťová adresa "routeru" tun2socks, ke kterému je virtuální rozhraní připojeno. Lepší oddělit vyhrazená podsíť.
  • --socks-server-addr - přijímá zásuvku (адрес:порт SOCKS server).

Pokud váš server SOCKS vyžaduje ověření, můžete zadat možnosti --username и --password.

Dále službu zaregistrujte

systemctl daemon-reload

A zapnout

systemctl enable tun2socks

Před spuštěním služby jí poskytneme virtuální síťové rozhraní.

Přechod na systemd-networkd

Zapněte systemd-networkd:

systemctl enable systemd-networkd

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

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-čekej-online je služba, která čeká na funkční připojení k síti, než systemd bude pokračovat ve spouštění dalších služeb závislých na síti. Při přechodu na analogový systém systemd ho deaktivujeme.

Pojďme to hned povolit:

systemctl enable systemd-networkd-wait-online

Nastavte rozhraní bezdrátové sítě

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

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Příjmení je název vašeho bezdrátového rozhraní. Identifikujte jej pomocí příkazu ip a.
  • Přesměrování IP je direktiva, která umožňuje předávání paketů na síťovém rozhraní.
  • Adresa je zodpovědný za přidělení IP adresy bezdrátovému rozhraní. Specifikujeme ji staticky, protože ekvivalentní direktivou DHCP=yes, systemd-networkd vytvoří v systému výchozí bránu. Veškerý provoz pak půjde přes původní bránu a ne přes budoucí virtuální rozhraní v jiné podsíti. Aktuální výchozí bránu můžete zkontrolovat pomocí příkazu ip r

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

Pokud váš server SOCKS není lokální, ale vzdálený, musíte pro něj vytvořit statickou trasu. Chcete-li to provést, 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 je výchozí brána nebo adresa vašeho původního přístupového bodu.
  • Destination - Adresa serveru SOCKS.

Nastavte wpa_supplicant pro systemd-networkd

systemd-networkd používá wpa_supplicant k připojení k zabezpečenému přístupovému bodu. Při pokusu o „vyvolání“ bezdrátového rozhraní systemd-networkd spustí službu wpa_supplicant@имяKde Název je název bezdrátového rozhraní. Pokud jste až do tohoto bodu nepoužívali systemd-networkd, pak pravděpodobně tuto službu ve vašem systému nemáte.

Vytvořte jej tedy příkazem:

systemctl enable wpa_supplicant@wlp6s0

Použil jsem wlp6s0 jako název vašeho bezdrátového rozhraní. Vaše jméno může být jiné. Poznáte to pomocí příkazu ip l.

Nyní vytvořená služba wpa_supplicant@wlp6s0 se spustí, když je bezdrátové rozhraní „up“, ale naopak bude v souboru hledat nastavení SSID a hesla přístupového bodu /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Proto jej musíte vytvořit pomocí nástroje wpa_passphrase.

Chcete-li to provést, spusťte příkaz:

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

kde SSID je název vašeho přístupového bodu, heslo je heslo a wlp6s0 je název 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
  • Příjmení je název, který systemd-networkd přiřadí budoucímu virtuálnímu rozhraní při jeho inicializaci.
  • Druh je typ virtuálního rozhraní. Podle názvu služby tun2socks můžete hádat, že používá rozhraní jako tun.
  • netdev je přípona souborů, které systemd-networkd používá k inicializaci virtuálních síťových rozhraní. Adresa a další síťová nastavení pro tato rozhraní jsou specifikována v .síť-soubory.

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
  • Name je název virtuálního rozhraní, které jste zadali v netdev-soubor.
  • Address — IP adresa, která bude přidělena virtuálnímu rozhraní. Musí být ve stejné síti jako adresa, kterou jste uvedli ve službě tun2socks
  • Gateway - IP adresa "routeru" tun2socks, který jste zadali při vytváření služby systemd.

Takže rozhraní tun2socks má adresu 172.16.1.2a službu tun2socks - 172.16.1.1, to znamená, že je to brána pro všechna připojení z virtuálního rozhraní.

Nastavte virtuální hotspot

Instalovat závislosti:

apt install util-linux procps hostapd iw haveged

Stáhněte si úložiště create_ap do vašeho auta:

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

Přejděte do složky úložiště na vašem počítači:

cd create_ap

Nainstalujte do systému:

make install

config se objeví ve vašem systému /etc/create_ap.conf. Zde jsou hlavní možnosti úprav:

  • GATEWAY=10.0.0.1 - je lepší vytvořit samostatnou vyhrazenou podsíť.
  • NO_DNS=1 - vypnout, protože tento parametr bude řízen virtuálním rozhraním systemd-networkd.
  • NO_DNSMASQ=1 - vypněte ze stejného důvodu.
  • WIFI_IFACE=wlp6s0 — bezdrátové rozhraní notebooku.
  • INTERNET_IFACE=tun2socks je virtuální rozhraní vytvořené pro tun2socks.
  • SSID=hostapd — název virtuálního přístupového bodu.
  • PASSPHRASE=12345678 - Heslo.

Nezapomeňte povolit službu:

systemctl enable create_ap

Povolte server DHCP v systemd-networkd

Služby create_ap inicializuje virtuální rozhraní v systému ap0. Teoreticky dnsmasq „visí“ na tomto rozhraní, ale proč instalovat další služby, pokud systemd-networkd obsahuje vestavěný server DHCP?

Chcete-li to povolit, definujme nastavení sítě pro virtuální bod. Chcete-li to provést, 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

Poté, co služba create_ap inicializuje virtuální rozhraní ap0, systemd-networkd mu automaticky přiřadí IP adresu a povolí DHCP server.

Struny EmitDNS=yes и DNS=10.0.0.1 přenést nastavení serveru DNS do zařízení připojených k přístupovému bodu.

Pokud neplánujete používat místní DNS server - v mém případě je to dnscrypt-proxy - můžete nainstalovat DNS=10.0.0.1 в DNS=192.168.1.1Kde 192.168.1.1 je adresa vaší původní brány. Dotazy DNS vašeho hostitele a místní sítě pak projdou nešifrované přes servery poskytovatele.

EmitNTP=yes и NTP=192.168.1.1 předat nastavení NTP.

Totéž platí pro linku NTP=10.0.0.1.

Nainstalujte a nakonfigurujte server NTP

Nainstalujte do systému:

apt install ntp

Upravte konfiguraci /etc/ntp.conf. Do komentáře uveďte adresy standardních bazénů:

#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ů, jako je Google Public NTP:

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

Udělte přístup k serveru klientům z vaší sítě:

restrict 10.0.0.0 mask 255.255.255.0

Povolte vysílání ve vaší síti:

broadcast 10.0.0.255

Nakonec přidejte adresy těchto serverů do statické směrovací tabulky. Chcete-li to provést, otevřete konfigurační soubor bezdrátového rozhraní /etc/systemd/network/25-wlp6s0.network a přidejte na konec oddílu 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

Adresy vašich NTP serverů můžete zjistit pomocí nástroje host takto:

host time1.google.com

Nainstalujte dnscrypt-proxy, odstraňte reklamy a skryjte provoz DNS od ISP

apt install dnscrypt-proxy

Chcete-li obsluhovat dotazy DNS na hostiteli a místní síti, upravte soket /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 konfiguraci /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Chcete-li směrovat připojení dnscrypt-proxy přes tun2socks, přidejte následující:

force_tcp = true

Upravte konfiguraci /etc/resolv.conf, který sdělí serveru DNS hostiteli.

nameserver 127.0.0.1
nameserver 192.168.1.1

První řádek umožňuje použití dnscrypt-proxy, druhý využívá původní bránu v případě nedostupnosti dnscrypt-proxy serveru.

Hotovo!

Restartujte nebo zastavte spouštění síťových služeb:

systemctl stop networking NetworkManager NetworkManager-wait-online

A restartujte vše potřebné:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Po restartu nebo restartu budete mít druhý přístupový bod, který směruje hostitele a zařízení LAN do SOCKS.

Výstup vypadá takto ip a běžný notebook:

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

V důsledku toho,

  1. Poskytovatel vidí pouze šifrované připojení k vašemu serveru SOCKS, což znamená, že nevidí nic.
  2. Stále vidí vaše požadavky NTP, abyste tomu zabránili, odstraňte statické trasy pro servery NTP. Není však jisté, že váš server SOCKS umožňuje protokol NTP.

Berlička viděná na Debain 10

Pokud se pokusíte restartovat síťovou službu z konzoly, dojde k jejímu selhání s chybou. Je to dáno tím, že jeho část v podobě virtuálního rozhraní je vázána na službu tun2socks, tedy je využívána. Chcete-li restartovat síťovou službu, musíte nejprve zastavit službu tun2socks. Ale myslím, že pokud jste dočetli až do konce, rozhodně to pro vás není problém!

reference

  1. Statické směrování na Linuxu - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks ambrop72/badvpn Wiki GitHub
  4. oblique/create_ap: Tento skript vytvoří NATed nebo Bridged WiFi Access Point.
  5. dnscrypt-proxy 2 – Flexibilní DNS proxy s podporou šifrovaných DNS protokolů.

Zdroj: www.habr.com