Bygga en router i SOCKS på en bärbar dator med Debian 10
Under ett helt år (eller två) sköt jag upp att publicera den här artikeln av huvudorsaken - jag hade redan publicerat två artiklar där jag beskrev processen att skapa en router i SOCKS från en mycket vanlig bärbar dator med Debian.
Men sedan dess har den stabila versionen av Debian uppdaterats till Buster, ett tillräckligt antal personer har kontaktat mig privat och bett om hjälp med installationen, vilket betyder att mina tidigare artiklar inte är uttömmande. Tja, jag gissade själv att metoderna som beskrivs i dem inte helt avslöjar alla krångligheterna med att ställa in Linux för routing i SOCKS. Dessutom är de skrivna för Debian Stretch, och efter att ha uppgraderat till Buster, i systemd init-systemet, märkte jag små förändringar i interaktionen mellan tjänster. Och i själva artiklarna använde jag inte systemd-networkd, även om det är bäst lämpat för komplexa nätverkskonfigurationer.
Utöver ovanstående ändringar har följande tjänster lagts till i min konfiguration: hostapd - tjänst för åtkomstpunktvirtualisering, nTP för att synkronisera tiden för lokala nätverksklienter, dnscrypt-proxy att kryptera anslutningar via DNS och inaktivera annonsering på lokala nätverksklienter, och även, som jag nämnde tidigare, systemd-nätverk för att konfigurera nätverksgränssnitt.
Här är ett enkelt blockschema över den interna strukturen hos en sådan router.
Så låt mig påminna dig om vad målen med den här artikelserien är:
Dirigera alla OS-anslutningar till SOCKS, såväl som anslutningar från alla enheter på samma nätverk som den bärbara datorn.
Den bärbara datorn i mitt fall bör förbli helt mobil. Det vill säga att ge möjlighet att använda skrivbordsmiljön och inte vara bunden till en fysisk plats.
Den sista punkten innebär anslutning och routing endast genom det inbyggda trådlösa gränssnittet.
Tja, och naturligtvis, skapandet av en omfattande guide, samt en analys av relevanta teknologier efter min blygsamma kunskap.
Vad kommer att behandlas i den här artikeln:
gå — ladda ner projektarkiv tun2sockarkrävs för att dirigera TCP-trafik till SOCKS, och skapa_ap — ett skript för att automatisera installationen av en virtuell åtkomstpunkt med hjälp av hostapd.
tun2sockar — bygga och installera systemd-tjänsten på systemet.
systemd-nätverk — Konfigurera trådlösa och virtuella gränssnitt, statiska routingtabeller och paketomdirigering.
skapa_ap — installera systemd-tjänsten på systemet, konfigurera och starta en virtuell åtkomstpunkt.
Valfria steg:
nTP — installera och konfigurera en server för att synkronisera tid på virtuella åtkomstpunktklienter.
dnscrypt-proxy — vi kommer att kryptera DNS-förfrågningar, dirigera dem till SOCKS och inaktivera reklamdomäner för det lokala nätverket.
Varför allt detta?
Detta är ett av sätten att säkra TCP-anslutningar på ett lokalt nätverk. Den största fördelen är att alla anslutningar görs i SOCKS, om inte en statisk rutt byggs för dem genom den ursprungliga gatewayen. Det betyder att du inte behöver ange SOCKS-serverinställningar för varken enskilda program eller klienter på det lokala nätverket - de går alla till SOCKS som standard, eftersom det är standardgatewayen tills vi anger något annat.
I huvudsak lägger vi till en andra krypterande router som en bärbar dator framför den ursprungliga routern och använder den ursprungliga routerns Internetanslutning för den bärbara datorns redan krypterade SOCKS-förfrågningar, som i sin tur dirigerar och krypterar förfrågningar från LAN-klienter.
Ur leverantörens synvinkel är vi ständigt anslutna till en server med krypterad trafik.
Följaktligen är alla enheter anslutna till den bärbara datorns virtuella åtkomstpunkt.
Installera tun2socks på systemet
Så länge din maskin har internet, ladda ner alla nödvändiga verktyg.
apt update
apt install git make cmake
Ladda ner badvpn-paketet
git clone https://github.com/ambrop72/badvpn
En mapp kommer att visas på ditt system badvpn. Skapa en separat mapp för bygget
--tundev - tar namnet på det virtuella gränssnittet som vi initierar med systemd-networkd.
--netif-ipaddr — nätverksadressen för tun2socks "router" till vilken det virtuella gränssnittet är anslutet. Det är bättre att göra det separat reserverat subnät.
NetworkManager-vänta-online är en tjänst som väntar på en fungerande nätverksanslutning innan systemd fortsätter att starta andra tjänster som är beroende av närvaron av ett nätverk. Vi inaktiverar det när vi byter till systemd-networkd-analogen.
Låt oss aktivera det direkt:
systemctl enable systemd-networkd-wait-online
Konfigurera det trådlösa nätverksgränssnittet
Skapa en systemd-networkd-konfigurationsfil för det trådlösa nätverksgränssnittet /etc/systemd/network/25-wlp6s0.network.
Namn är namnet på ditt trådlösa gränssnitt. Identifiera det med kommandot ip a.
IPForward - ett direktiv som möjliggör omdirigering av paket på ett nätverksgränssnitt.
Adress ansvarar för att tilldela en IP-adress till det trådlösa gränssnittet. Vi specificerar det statiskt eftersom med motsvarande direktiv DHCP=yes, systemd-networkd skapar en standardgateway på systemet. Då kommer all trafik att gå genom den ursprungliga gatewayen, och inte genom det framtida virtuella gränssnittet på ett annat subnät. Du kan kontrollera den aktuella standardgatewayen med kommandot ip r
Skapa en statisk rutt för fjärrservern SOCKS
Om din SOCKS-server inte är lokal, utan fjärransluten, måste du skapa en statisk rutt för den. För att göra detta, lägg till ett avsnitt Route till slutet av konfigurationsfilen för trådlöst gränssnitt som du skapade med följande innehåll:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gateway — detta är standardgatewayen eller adressen till din ursprungliga åtkomstpunkt.
Destination — SOCKS-serveradress.
Konfigurera wpa_supplicant för systemd-networkd
systemd-networkd använder wpa_supplicant för att ansluta till en säker åtkomstpunkt. När man försöker "höja" det trådlösa gränssnittet startar systemd-networkd tjänsten wpa_supplicant@имяvar Namn är namnet på det trådlösa gränssnittet. Om du inte har använt systemd-networkd tidigare, så saknas förmodligen denna tjänst på ditt system.
Så skapa det med kommandot:
systemctl enable wpa_supplicant@wlp6s0
jag använde wlp6s0 som namnet på dess trådlösa gränssnitt. Ditt namn kan vara annorlunda. Du kan känna igen det med kommandot ip l.
Nu skapas tjänsten wpa_supplicant@wlp6s0 kommer att startas när det trådlösa gränssnittet är "höjt", men det kommer i sin tur att leta efter SSID och lösenordsinställningarna för åtkomstpunkten i filen /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Därför måste du skapa den med hjälp av verktyget wpa_passphrase.
där SSID är namnet på din åtkomstpunkt, lösenord är lösenordet och wlp6s0 — namnet på ditt trådlösa gränssnitt.
Initiera det virtuella gränssnittet för tun2socks
Skapa en fil för att initiera ett nytt virtuellt gränssnitt i systemet/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
Namn är namnet som systemd-networkd kommer att tilldela det framtida virtuella gränssnittet när det initieras.
Snäll är en typ av virtuellt gränssnitt. Från namnet på tun2socks-tjänsten kan du gissa att den använder ett gränssnitt som tun.
netdev är filtillägget som systemd-networkd Används för att initiera virtuella nätverksgränssnitt. Adressen och andra nätverksinställningar för dessa gränssnitt anges i .nätverk-filer.
Skapa en fil som denna /etc/systemd/network/25-tun2socks.network med följande innehåll:
Name — namnet på det virtuella gränssnittet som du angav i netdev-fil.
Address — IP-adress som kommer att tilldelas det virtuella gränssnittet. Måste vara på samma nätverk som adressen du angav i tun2socks-tjänsten
Gateway — IP-adress för "routern" tun2sockar, som du angav när du skapade systemd-tjänsten.
Alltså gränssnittet tun2sockar har en adress 172.16.1.2, och tjänsten tun2sockar - 172.16.1.1, det vill säga det är gatewayen för alla anslutningar från det virtuella gränssnittet.
Konfigurera en virtuell åtkomstpunkt
Installationsberoenden:
apt install util-linux procps hostapd iw haveged
Ladda ner arkivet skapa_ap till din bil:
git clone https://github.com/oblique/create_ap
Gå till arkivmappen på din maskin:
cd create_ap
Installera på systemet:
make install
En konfiguration kommer att visas på ditt system /etc/create_ap.conf. Här är de viktigaste redigeringsalternativen:
GATEWAY=10.0.0.1 - det är bättre att göra det till ett separat reserverat undernät.
NO_DNS=1 - inaktivera, eftersom denna parameter kommer att hanteras av systemd-networkd virtuella gränssnittet.
NO_DNSMASQ=1 - stäng av den av samma anledning.
WIFI_IFACE=wlp6s0 — trådlöst gränssnitt för bärbar dator.
INTERNET_IFACE=tun2socks - ett virtuellt gränssnitt skapat för tun2socks.
SSID=hostapd — Namnet på den virtuella åtkomstpunkten.
PASSPHRASE=12345678 - Lösenord.
Glöm inte att aktivera tjänsten:
systemctl enable create_ap
Aktivera DHCP-server i systemd-networkd
office create_ap initierar ett virtuellt gränssnitt i systemet ap0. I teorin hänger dnsmasq på detta gränssnitt, men varför installera extra tjänster om systemd-networkd innehåller en inbyggd DHCP-server?
För att aktivera det kommer vi att definiera nätverksinställningarna för den virtuella punkten. För att göra detta, skapa en fil /etc/systemd/network/25-ap0.network med följande innehåll:
Efter att create_ap-tjänsten initieras det virtuella gränssnittet ap0, kommer systemd-networkd automatiskt att tilldela den en IP-adress och aktivera DHCP-servern.
linjer EmitDNS=yes и DNS=10.0.0.1 överföra DNS-serverinställningar till enheter som är anslutna till åtkomstpunkten.
Om du inte planerar att använda en lokal DNS-server - i mitt fall är det dnscrypt-proxy - kan du installera DNS=10.0.0.1 в DNS=192.168.1.1var 192.168.1.1 — adressen till din ursprungliga gateway. Då kommer DNS-förfrågningar för din värd och ditt lokala nätverk att gå okrypterade via leverantörens servrar.
EmitNTP=yes и NTP=192.168.1.1 överför NTP-inställningar.
Detsamma gäller linjen NTP=10.0.0.1.
Installera och konfigurera NTP-servern
Installera på systemet:
apt install ntp
Redigera konfigurationen /etc/ntp.conf. Kommentera adresserna till standardpooler:
Lägg till offentliga serveradresser, till exempel Google Public NTP:
server time1.google.com ibrust
server time2.google.com ibrust
server time3.google.com ibrust
server time4.google.com ibrust
Ge åtkomst till servern till klienter i ditt nätverk:
restrict 10.0.0.0 mask 255.255.255.0
Aktivera sändning till ditt nätverk:
broadcast 10.0.0.255
Lägg slutligen till adresserna för dessa servrar till den statiska routingtabellen. För att göra detta, öppna konfigurationsfilen för det trådlösa gränssnittet /etc/systemd/network/25-wlp6s0.network och lägg till i slutet av avsnittet Route.
För att dirigera dnscrypt-proxy-anslutningar genom tun2socks, lägg till nedan:
force_tcp = true
Redigera konfigurationen /etc/resolv.conf, som talar om för DNS-servern till värden.
nameserver 127.0.0.1
nameserver 192.168.1.1
Den första raden möjliggör användning av dnscrypt-proxy, den andra raden använder den ursprungliga gatewayen om dnscrypt-proxyservern inte är tillgänglig.
Efter en omstart eller omstart kommer du att ha en andra åtkomstpunkt som dirigerar värden och LAN-enheterna till SOCKS.
Så här ser utgången ut ip a vanlig bärbar dator:
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
Som ett resultat,
Leverantören ser bara den krypterade anslutningen till din SOCKS-server, vilket betyder att de inte ser något.
Och ändå ser den dina NTP-förfrågningar, för att förhindra detta, ta bort statiska rutter för NTP-servrar. Det är dock inte säkert att din SOCKS-server tillåter NTP-protokollet.
Krycka upptäckt på Debain 10
Om du försöker starta om nätverkstjänsten från konsolen kommer den att misslyckas med ett fel. Detta beror på att en del av det i form av ett virtuellt gränssnitt är knuten till tun2socks-tjänsten, vilket betyder att den används. För att starta om nätverkstjänsten måste du först stoppa tun2socks-tjänsten. Men jag tror att om du läser till slutet så är detta definitivt inget problem för dig!