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.

Takže, připomenu, jaké cíle sleduje tento cyklus článků:
- Směrovat do SOCKS všechna připojení OS a také připojení všech zařízení v jedné síti s notebookem.
- 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í.
- Poslední bod předpokládá připojení a směrování pouze přes vestavěné bezdrátové rozhraní.
- 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:
- 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.
- tun2socks — postavíme a nainstalujeme službu systemd do systému.
- systemd-networkd — nastavíme bezdrátová a virtuální rozhraní, tabulky statického směrování a přesměrování paketů.
- 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 updateapt install git make cmakeStá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=1zakazuje sestavení všech komponent repozitáře badvpn. - —
DBUILD_TUN2SOCKS=1zapí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 .--socks-server-addr— přijímá socket (adresa:portSOCKS 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-reloadA zapněte
systemctl enable tun2socksNež spustíme službu, zajistíme jí virtuální síťové rozhraní.
Přejdeme na systemd-networkd
Aktivujeme systemd-networkd:
systemctl enable systemd-networkdDeaktivujeme 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-onlineNastavte 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říkazemip 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@wlp6s0Použ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.confkde 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-networkdpouží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ě tun2socksGateway— 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 havegedStáhněte repozitář create_ap na svůj stroj:
git clone https://github.com/oblique/create_apPřejděte do složky repozitáře na vašem stroji:
cd create_apNainstalujte do systému:
make installVe 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_apZapně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.12Můžete zjistit adresy vašich NTP serverů pomocí nástroje host následujícím způsobem:
host time1.google.comNainstalujte dnscrypt-proxy, zbavte se reklamy a skryjte DNS provoz od poskytovatele
apt install dnscrypt-proxyAbychom 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:53Restartujte systemd:
systemctl daemon-reloadUpravte 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.1První řá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-onlineA restartujte všechny potřebné:
systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntpPo 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
- Poskytovatel vidí pouze šifrované spojení k vašemu SOCKS serveru, což znamená, že nic nevidí.
- 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
Zdroj: habr.com
