Bygger en SOCKS-router på en bärbar dator med Debian 10.

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.

Bygger en SOCKS-router på en bärbar dator med Debian 10.

Så, jag påminner om vilka mål denna artikelcykel syftar till:

  1. Att dirigera all trafik i operativsystemet SOCKS, samt all trafik från alla enheter som är anslutna till nätverket med laptopen.
  2. 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.
  3. Den sista punkten innebär att anslutning och routning endast ska ske via den inbyggda trådlösa gränssnittet.
  4. 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:

  1. 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.
  2. tun2socks — vi bygger och installerar systemd-tjänsten i systemet.
  3. systemd-networkd — vi ställer in trådlösa och virtuella gränssnitt, tabeller för statisk routning och paketdirigering.
  4. 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 update
apt install git make cmake

Ladda 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=1 stänger av byggandet av alla komponenter från badvpn-repositoriet.
  • —DBUILD_TUN2SOCKS=1 aktiverar 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 reserverad subnät..
  • --socks-server-addr — tar emot socket (adress:port fö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-reload

Och aktivera

systemctl enable tun2socks

Innan 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-networkd

Inaktivera 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-online

Konfigurera 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 kommandot ip 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@wlp6s0

Jag 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.conf

w 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-networkd anvä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 tun2socks
  • Gateway ä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 haveged

Ladda ner repositoriet create_ap till din maskin:

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

Gå till mappen för repositoriet på din maskin:

cd create_ap

Installera i systemet:

make install

Det 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_ap

Aktivera 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.com

Telepí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-proxy

Ahhoz, 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:53

Indítsa újra systemd:

systemctl daemon-reload

Mó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.1

Az 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 ntp

Efter 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

  1. Leverantören ser bara en krypterad anslutning till din SOCKS-server, vilket innebär att de inte ser något.
  2. Ä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

  1. Statisk routing i Linux — IBM
  2. systemd-networkd.service — Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Detta skript skapar en NATad eller Bridged WiFi-åtkomstpunkt.
  5. dnscrypt-proxy 2 — En flexibel DNS-proxy med stöd för krypterade DNS-protokoll.

Källa: habr.com

Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster