Under ett helt år (eller två) har jag skjutit upp publiceringen av denna artikel av en huvudsaklig anledning — jag har redan publicerat två artiklar där jag beskrivit processen för att skapa en router i SOCKS av en helt vanlig laptop med Debian.
Men sedan dess har den stabila versionen av Debian uppdaterats till Buster, och jag har fått tillräckligt många förfrågningar från personer som vill ha hjälp med inställningar, vilket innebär att mina tidigare artiklar inte är uttömmande. Jag misstänkte även själv att de metoder som beskrivs i dem inte helt och hållet avslöjar alla detaljer kring Linux-inställningar för routning i SOCKS. Dessutom är de skrivna för Debian Stretch, och efter uppgraderingen till Buster har jag lagt märke till små förändringar i hur tjänster samverkar i systemadministrationen systemd. I artiklarna använde jag inte systemd-networkd, även om det är mest lämpligt för komplexa nätverkskonfigurationer.
Förutom de ovan nämnda förändringarna har jag lagt till följande tjänster i min konfiguration: hostapd — en tjänst för att virtualisera en åtkomstpunkt, ntp för att synkronisera tiden för klienterna i det lokala nätverket, dnscrypt-proxy för att kryptera anslutningar via DNS-protokollet och blockera annonser på klienterna i det lokala nätverket, samt som jag nämnde tidigare, systemd-networkd för konfiguration av nätverksgränssnitt.
Här är ett enkelt blockdiagram över den interna strukturen för en sådan router.

Så, jag påminner om vilka mål denna artikelcykel syftar till:
- Att dirigera all trafik i operativsystemet SOCKS, samt all trafik från alla enheter som är anslutna till nätverket med laptopen.
- Laptopen i mitt fall måste förbli helt mobil. Det vill säga, den ska möjliggöra användningen av skrivbordsmiljön och inte vara knuten till en fysisk plats.
- Den sista punkten innebär att anslutning och routning endast ska ske via den inbyggda trådlösa gränssnittet.
- Och självklart, skapa en uttömmande manual, samt en analys av relevanta teknologier så långt mina blygsamma kunskaper sträcker sig.
Vad som kommer att granskas i denna artikel:
- git — vi laddar ner projektets repository tun2socks, som är nödvändigt för att routa TCP-trafik till SOCKS, och create_ap — ett skript för att automatisera inställningen av den virtuella åtkomstpunkten med hjälp av hostapd.
- tun2socks — vi bygger och installerar systemd-tjänsten i systemet.
- systemd-networkd — vi ställer in trådlösa och virtuella gränssnitt, tabeller för statisk routning och paketdirigering.
- create_ap — vi installerar systemd-tjänstens tjänst i systemet, konfigurerar och startar en virtuell åtkomstpunkt.
Valfria steg:
- ntp — vi installerar och konfigurerar en server för tidsynkronisering på klienterna för den virtuella åtkomstpunkten.
- dnscrypt-proxy — vi krypterar DNS-förfrågningar, dirigerar dem till SOCKS och blockerar reklamdomäner för det lokala nätverket.
Vad är syftet med detta?
Detta är ett sätt att organisera skydd av TCP-anslutningar i det lokala nätverket. Huvudfördelen är att alla anslutningar går via SOCKS, om det inte finns en statisk rutt för dem genom den ursprungliga gatewayen. Det innebär att vi inte behöver ange SOCKS-serverinställningar för vare sig enskilda program eller klienter i det lokala nätverket — de går alla till SOCKS som standard, eftersom det är den förvalda gatewayen, så länge vi inte anger något annat.
I praktiken 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 redan krypterade SOCKS-förfrågningar från den bärbara datorn, som i sin tur dirigerar och krypterar förfrågningarna från de lokala nätverksklienterna.
Ur leverantörens synvinkel är vi ständigt anslutna till en server med krypterad trafik.
Därför ansluter alla enheter till den virtuella åtkomstpunkten på den bärbara datorn.
Installera tun2socks i systemet
Så länge din maskin har internet, ladda ner alla nödvändiga verktyg.
apt updateapt install git make cmakeLadda ner badvpn-paketet
git clone https://github.com/ambrop72/badvpn
En mapp kommer att dyka upp i ditt system badvpn. Skapa en separat mapp för att bygga
mkdir badvpn-build
Gå in i den
cd badvpn-build
Bygg tun2socks
cmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1
Installera i systemet
make install
- Parameter
-DBUILD_NOTHING_BY_DEFAULT=1stänger av byggandet av alla komponenter från badvpn-repositoriet. - —
DBUILD_TUN2SOCKS=1aktiverar byggandet av komponenten tun2socks. make install— kommer att installera binären tun2socks i ditt system på platsen/usr/local/bin/badvpn-tun2socks.
Installera tun2socks-tjänsten i systemd
Skapa en fil /etc/systemd/system/tun2socks.service med följande innehåll:
[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— tar namn på det virtuella gränssnittet som vi initierar med hjälp av systemd-networkd.--netif-ipaddr— nätverksadressen för "routern" tun2socks, som den virtuella gränssnittet ansluter till. Det är bättre att göra detta till en separat .--socks-server-addr— tar emot socket (adress:portför SOCKS-servern).
Om din SOCKS-server kräver autentisering kan du ange parametrar --användarnamn och --lösenord.
Registrera sedan tjänsten
systemctl daemon-reloadOch aktivera
systemctl enable tun2socksInnan du startar tjänsten, se till att den har ett virtuellt nätverksgränssnitt.
Gå till systemd-networkd
Vi aktiverar systemd-networkd:
systemctl enable systemd-networkdInaktivera nuvarande nätverkstjänster.
systemctl disable networking NetworkManager NetworkManager-wait-online- NetworkManager-wait-online är en tjänst som väntar på att en fungerande nätverksanslutning ska finnas innan systemd fortsätter att starta andra tjänster som är beroende av nätverk. Vi inaktiverar den eftersom vi går över till systemd-networkd.
Låt oss aktivera den direkt:
systemctl enable systemd-networkd-wait-onlineKonfigurera det trådlösa nätverksgränssnittet
Skapa en konfigurationsfil för systemd-networkd för det trådlösa nätverksgränssnittet /etc/systemd/network/25-wlp6s0.network.
[Match]
Name=wlp6s0
[Nätverk]
Address=192.168.1.2/24
IPForward=yes
- Namn är namnet på ditt trådlösa gränssnitt. Identifiera det med kommandot
ip a. - IPForward är direktivet som aktiverar paketvidarebefordran på nätverksgränssnittet.
- Address ansvarar för att tilldela en IP-adress till det trådlösa gränssnittet. Vi anger det statiskt eftersom med den motsvarande direktivet
DHCP=yes, skapar systemd-networkd en standardgateway i systemet. Då kommer all trafik att gå genom den ursprungliga gatewayn istället för den framtida virtuella gränssnitten i ett annat subnet. Du kan kontrollera den aktuella standardgatewayn med kommandotip r
Skapa en statisk rutt för den avlägsna SOCKS-servern
Om din SOCKS-server inte är lokal utan avlägsen, behöver du skapa en statisk rutt för den. För att göra detta, lägg till sektionen Route i slutet av den skapade konfigurationsfilen för det trådlösa gränssnittet med följande innehåll:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gatewayär standardgatewayn eller adressen till din ursprungliga åtkomstpunkt.Destinationär adressen till SOCKS-servern.
Konfigurera wpa_supplicant för systemd-networkd
systemd-networkd använder wpa_supplicant för att ansluta till en skyddad åtkomstpunkt. Vid försök att "aktivera" det trådlösa gränssnittet startar systemd-networkd tjänsten wpa_supplicant@namn, där namn är namnet på det trådlösa gränssnittet. Om du inte har använt systemd-networkd fram till nu, så finns denna tjänst troligen inte i ditt system.
Så skapa den med kommandot:
systemctl enable wpa_supplicant@wlp6s0Jag använde wlp6s0 som namnet på ditt trådlösa gränssnitt. Ditt namn kan skilja sig. Du kan ta reda på det med kommandot ip l.
Nu kommer den skapade tjänsten wpa_supplicant@wlp6s0 att startas när den trådlösa gränssnittet "lyfts", men den kommer i sin tur att leta efter SSID-inställningar och lösenord för åtkomstpunkten i filen /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Därför är det nödvändigt att skapa den med hjälp av verktyget wpa_passphrase.
För detta, kör kommandot:
wpa_passphrase SSID password >/etc/wpa_supplicant/wpa_supplicant-wlp6s0.confw SSID är namnet på din åtkomstpunkt, password är lösenordet, och wlp6s0 är namnet på ditt trådlösa gränssnitt.
Initiera det virtuella gränssnittet för tun2socks
Skapa en fil för att initiera det nya virtuella gränssnittet i systemet/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
- Namn är namnet som systemd-networkd kommer att ge den framtida virtuella gränssnittet vid dess initiering.
- Kind är typen av det virtuella gränssnittet. Baserat på namnet på tjänsten tun2socks kan du gissa att den använder gränssnittstypen
tun. - netdev är filändelsen som
systemd-networkdanvänds för att initiera virtuella nätverksgränssnitt. Adress och andra nätverksinställningar för dessa gränssnitt anges i .*.nätverkmain.ts:
Skapa en sådan fil /etc/systemd/network/25-tun2socks.network med följande innehåll:
[Match]
Name=tun2socks
[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
Namnär namnet på det virtuella gränssnittet som du har angett i netdev-filen.Addressär IP-adressen som kommer att tilldelas det virtuella gränssnittet. Den måste vara i samma nätverk som adressen som du angav i tjänsten tun2socksGatewayär IP-adressen för "routern" tun2socks, som du angav vid skapandet av systemd-tjänsten.
Således har gränssnittet tun2socks adress 172.16.1.2, och tjänsten tun2socks — 172.16.1.1, vilket innebär att den är en gateway för alla anslutningar från det virtuella gränssnittet.
Konfigurera den virtuella åtkomstpunkten
Installera beroenden:
apt install util-linux procps hostapd iw havegedLadda ner repositoriet create_ap till din maskin:
git clone https://github.com/oblique/create_apGå till mappen för repositoriet på din maskin:
cd create_apInstallera i systemet:
make installDet kommer att finnas en konfig i ditt system /etc/create_ap.conf. Här är de viktigaste alternativen för redigering:
GATEWAY=10.0.0.1– det är bättre att göra en separat reserverad subnet.NO_DNS=1– stäng av detta eftersom detta alternativ kommer att hanteras av det virtuella gränssnittet systemd-networkd.NO_DNSMASQ=1– stäng av av samma anledning.WIFI_IFACE=wlp6s0– den trådlösa gränssnittet på din bärbara dator.INTERNET_IFACE=tun2socks– det virtuella gränssnittet som skapades för tun2socks.SSID=hostapd– namnet på den virtuella åtkomstpunkten.PASSPHRASE=12345678– lösenordet.
Glöm inte att aktivera tjänsten:
systemctl enable create_apAktivera DHCP-servern i systemd-networkd
Tjänsten create_ap initierar det virtuella gränssnittet i systemet ap0. Idén hivatkozva a dnsmasq-ra, de miért telepítenénk felesleges szolgáltatásokat, ha a systemd-networkd már tartalmaz egy beépített DHCP-szervert?
A DHCP-szerver aktiválásához először határozzuk meg a virtuális pont hálózati beállításait. Ehhez hozzon létre egy fájlt /etc/systemd/network/25-ap0.network med följande innehåll:
[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
Miután a create_ap szolgáltatás inicializálta a virtuális interfészt ap0, a systemd-networkd automatikusan hozzárendeli az IP-címet és aktiválja a DHCP-szervert.
A sorok EmitDNS=yes och DNS=10.0.0.1 átadják a DNS-szerver beállításait az eszközöknek, amelyek csatlakoznak a hozzáférési ponthoz.
Ha nem tervezi a helyi DNS-szerver használatát — az én esetemben ez a dnscrypt-proxy — akkor beállíthatja a következőt DNS=10.0.0.1 på DNS=192.168.1.1, där 192.168.1.1 — az Ön eredeti átjárójának címe. Ekkor a gazdagép és a helyi hálózat DNS-kérései titkosítatlanul fognak átmenni a szolgáltató szerverein.
EmitNTP=yes och NTP=192.168.1.1 az NTP beállításokat továbbítja.
Ugyanez vonatkozik a sorra NTP=10.0.0.1.
Állítsa be és konfigurálja az NTP szervert
Installera i systemet:
apt install ntp
Módosítsa a konfigurációt /etc/ntp.conf. Kommentelje ki a standard poolok címeit:
#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
Adja hozzá a nyilvános szerverek címeit, például a Google Public NTP-t:
server time1.google.com iburst
server time2.google.com iburst
server time3.google.com iburst
server time4.google.com iburst
Adjon hozzá hozzáférést a szerverhez a hálózatán belüli kliensek számára:
restrict 10.0.0.0 mask 255.255.255.0
Engedélyezze a broadcastot a hálózatában:
broadcast 10.0.0.255
Végül adja hozzá ezen szerverek címeit a statikus útvonal táblázathoz. Ehhez nyissa meg a vezeték nélküli interfész konfigurációs fájlját /etc/systemd/network/25-wlp6s0.network és adja hozzá a végére a szekciót 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Ön megtudhatja az NTP szerverek címeit a következő eszköz segítségével host på följande sätt:
host time1.google.comTelepítse a dnscrypt-proxy-t, távolítsa el a hirdetéseket, és rejtse el a DNS forgalmat a szolgáltató elől
apt install dnscrypt-proxyAhhoz, hogy kiszolgálhassa a gazdagép és a helyi hálózat DNS-kéréseit, módosítani kell a socketet /lib/systemd/system/dnscrypt-proxy.socket. Módosítsa a következő sorokat:
ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53Indítsa újra systemd:
systemctl daemon-reloadMódosítsa a konfigurációt /etc/dnscrypt-proxy/dnscrypt-proxy.toml:
server_names = ['adguard-dns']
Ahhoz, hogy a dnscrypt-proxy kapcsolatait a tun2socks útján irányítsa, adja hozzá alább:
force_tcp = true
Módosítsa a konfigurációt /etc/resolv.conf, ami tájékoztatja a DNS szervert a gazdagépnek.
nameserver 127.0.0.1
nameserver 192.168.1.1Az első sor engedélyezi a dnscrypt-proxy használatát, a második a normál átjárót használja, ha a dnscrypt-proxy szerver nem érhető el.
Klart!
Indítsa újra vagy állítsa le a működő hálózati szolgáltatásokat:
systemctl stop networking NetworkManager NetworkManager-wait-onlineÉs indítsa újra az összes szükségeset:
systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntpEfter omstart eller reboot får du en andra åtkomstpunkt som dirigerar värden och enheter i det lokala nätverket till SOCKS.
Så här ser utmatningen ut ip a av en vanlig bärbar dator:
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
I slutändan
- Leverantören ser bara en krypterad anslutning till din SOCKS-server, vilket innebär att de inte ser något.
- Ändå ser den dina NTP-förfrågningar, för att förhindra detta, ta bort statiska rutter för NTP-servrar. Men det är inte säkert att din SOCKS-server tillåter NTP-protokollet.
En workaround som observerats på Debian 10
Om du försöker starta om nätverkstjänsten från konsolen så kommer den att misslyckas med ett fel. Detta beror på att en del av den, i form av ett virtuellt gränssnitt, är bunden till tjänsten tun2socks, vilket innebär att den används. För att starta om nätverkstjänsten måste du först stoppa tjänsten tun2socks. Men jag tror att om du har läst så här långt så är det definitivt ingen problem för dig!
Länkar
Källa: habr.com
