Opbygning af en router i SOCKS på en bærbar computer med Debian 10
I et helt år (eller to) udskyde jeg udgivelsen af denne artikel af hovedårsagen - jeg havde allerede udgivet to artikler, hvori jeg beskrev processen med at skabe en router i SOCKS fra en ganske almindelig bærbar computer med Debian.
Men siden da er den stabile version af Debian blevet opdateret til Buster, et tilstrækkeligt antal personer har kontaktet mig privat og bedt om hjælp til opsætningen, hvilket betyder, at mine tidligere artikler ikke er udtømmende. Nå, jeg gættede selv på, at de metoder, der er skitseret i dem, ikke fuldt ud afslører alle forviklingerne ved at opsætte Linux til routing i SOCKS. Derudover er de skrevet til Debian Stretch, og efter at have opgraderet til Buster, i systemd init-systemet, bemærkede jeg små ændringer i interaktionen mellem tjenester. Og i selve artiklerne brugte jeg ikke systemd-networkd, selvom det er bedst egnet til komplekse netværkskonfigurationer.
Ud over ovenstående ændringer blev følgende tjenester tilføjet til min konfiguration: hostapd - tjeneste til adgangspunktvirtualisering, ntp at synkronisere tiden for lokale netværksklienter, dnscrypt-proxy at kryptere forbindelser via DNS og deaktivere annoncering på lokale netværksklienter, og også, som jeg nævnte tidligere, systemd-netværk d til konfiguration af netværksgrænseflader.
Her er et simpelt blokdiagram over den interne struktur af en sådan router.
Så lad mig minde dig om, hvad målene med denne serie af artikler er:
Rut alle OS-forbindelser til SOCKS, såvel som forbindelser fra alle enheder på samme netværk som den bærbare computer.
Den bærbare computer i mit tilfælde skal forblive helt mobil. Altså at give mulighed for at bruge skrivebordsmiljøet og ikke være bundet til en fysisk placering.
Det sidste punkt indebærer kun forbindelse og routing gennem den indbyggede trådløse grænseflade.
Nå, og selvfølgelig, oprettelsen af en omfattende guide, samt en analyse af de relevante teknologier efter min bedste beskedne viden.
Hvad vil blive dækket i denne artikel:
git — download projektdepoter tun2 sokkerpåkrævet for at dirigere TCP-trafik til SOCKS, og oprette_ap — et script til at automatisere opsætningen af et virtuelt adgangspunkt vha hostapd.
tun2 sokker — bygge og installere systemd-tjenesten på systemet.
systemd-netværk d — konfigurere trådløse og virtuelle grænseflader, statiske routingtabeller og pakkeomdirigering.
oprette_ap — installer systemd-tjenesten på systemet, konfigurer og start et virtuelt adgangspunkt.
Valgfri trin:
ntp — installer og konfigurer en server til at synkronisere tid på virtuelle adgangspunktklienter.
dnscrypt-proxy — vi krypterer DNS-anmodninger, dirigerer dem til SOCKS og deaktiverer reklamedomæner for det lokale netværk.
Hvad er det hele til for?
Dette er en af måderne til at sikre TCP-forbindelser på et lokalt netværk. Den største fordel er, at alle forbindelser er lavet i SOCKS, medmindre der er bygget en statisk rute til dem gennem den originale gateway. Det betyder, at du ikke behøver at angive SOCKS-serverindstillinger for hverken individuelle programmer eller klienter på det lokale netværk - de går alle til SOCKS som standard, da det er standard-gatewayen, indtil vi angiver andet.
Grundlæggende tilføjer vi en anden krypterende router som en bærbar computer foran den originale router og bruger den originale routers internetforbindelse til den bærbare computers allerede krypterede SOCKS-anmodninger, som igen dirigerer og krypterer anmodninger fra LAN-klienter.
Fra udbyderens side er vi konstant forbundet til én server med krypteret trafik.
Derfor er alle enheder forbundet til den bærbare computers virtuelle adgangspunkt.
Installer tun2socks på systemet
Så længe din maskine har internet, skal du downloade alle de nødvendige værktøjer.
apt update
apt install git make cmake
Download badvpn-pakken
git clone https://github.com/ambrop72/badvpn
En mappe vises på dit system badvpn. Opret en separat mappe til bygningen
--tundev - tager navnet på den virtuelle grænseflade, som vi initialiserer med systemd-networkd.
--netif-ipaddr — netværksadressen på den tun2socks "router", som den virtuelle grænseflade er forbundet til. Det er bedre at gøre det adskilt reserveret undernet.
NetworkManager-vent-online er en tjeneste, der venter på en fungerende netværksforbindelse, før systemd fortsætter med at starte andre tjenester, der afhænger af tilstedeværelsen af et netværk. Vi deaktiverer det, når vi skifter til systemd-netværket analogt.
Lad os aktivere det med det samme:
systemctl enable systemd-networkd-wait-online
Konfigurer det trådløse netværksinterface
Opret en systemd-networkd-konfigurationsfil til det trådløse netværksinterface /etc/systemd/network/25-wlp6s0.network.
Navn er navnet på din trådløse grænseflade. Identificer det med kommandoen ip a.
IPForward - et direktiv, der muliggør pakkeomdirigering på en netværksgrænseflade.
Adresse er ansvarlig for at tildele en IP-adresse til det trådløse interface. Vi specificerer det statisk, fordi med det tilsvarende direktiv DHCP=yes, systemd-networkd opretter en standardgateway på systemet. Så vil al trafik gå gennem den originale gateway, og ikke gennem den fremtidige virtuelle grænseflade på et andet undernet. Du kan kontrollere den aktuelle standardgateway med kommandoen ip r
Opret en statisk rute for den eksterne SOCKS-server
Hvis din SOCKS-server ikke er lokal, men ekstern, skal du oprette en statisk rute til den. For at gøre dette skal du tilføje en sektion Route til slutningen af den trådløse grænsefladekonfigurationsfil, du oprettede med følgende indhold:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gateway — dette er standardgatewayen eller adressen på dit oprindelige adgangspunkt.
Destination — SOCKS-serveradresse.
Konfigurer wpa_supplicant til systemd-networkd
systemd-networkd bruger wpa_supplicant til at oprette forbindelse til et sikkert adgangspunkt. Når du forsøger at "hæve" den trådløse grænseflade, starter systemd-networkd tjenesten wpa_supplicant@имяHvor Navn er navnet på den trådløse grænseflade. Hvis du ikke har brugt systemd-networkd før dette tidspunkt, så mangler denne tjeneste sandsynligvis på dit system.
Så opret det med kommandoen:
systemctl enable wpa_supplicant@wlp6s0
jeg brugte wlp6s0 som navnet på dens trådløse grænseflade. Dit navn kan være anderledes. Du kan genkende det med kommandoen ip l.
Nu den oprettede tjeneste wpa_supplicant@wlp6s0 vil blive lanceret, når den trådløse grænseflade er "hævet", men den vil til gengæld søge efter SSID og adgangskodeindstillingerne for adgangspunktet i filen /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Derfor skal du oprette det ved hjælp af værktøjet wpa_passphrase.
где SSID er navnet på dit adgangspunkt, password er adgangskoden og wlp6s0 — navnet på din trådløse grænseflade.
Initialiser den virtuelle grænseflade til tun2socks
Opret en fil for at initialisere en ny virtuel grænseflade i systemet/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
Navn er det navn, som systemd-networkd vil tildele til den fremtidige virtuelle grænseflade, når den initialiseres.
Venlig er en type virtuel grænseflade. Ud fra navnet på tun2socks-tjenesten kan du gætte, at den bruger en grænseflade som tun.
netdev er udvidelsen af filer, der systemd-networkd Bruges til at initialisere virtuelle netværksgrænseflader. Adressen og andre netværksindstillinger for disse grænseflader er angivet i .netværk-filer.
Opret en fil som denne /etc/systemd/network/25-tun2socks.network med følgende indhold:
Name — navnet på den virtuelle grænseflade, som du har angivet i netdev-fil.
Address — IP-adresse, der vil blive tildelt den virtuelle grænseflade. Skal være på samme netværk som den adresse, du har angivet i tun2socks-tjenesten
Gateway — IP-adressen på "routeren" tun2 sokker, som du angav, da du oprettede systemd-tjenesten.
Så grænsefladen tun2 sokker har en adresse 172.16.1.2og servicen tun2 sokker — 172.16.1.1, det vil sige, at det er gatewayen for alle forbindelser fra den virtuelle grænseflade.
Konfigurer et virtuelt adgangspunkt
Installationsafhængigheder:
apt install util-linux procps hostapd iw haveged
Download depotet oprette_ap til din bil:
git clone https://github.com/oblique/create_ap
Gå til depotmappen på din maskine:
cd create_ap
Installer på systemet:
make install
Der vises en konfiguration på dit system /etc/create_ap.conf. Her er de vigtigste redigeringsmuligheder:
GATEWAY=10.0.0.1 - det er bedre at gøre det til et separat reserveret undernet.
NO_DNS=1 - deaktiver, da denne parameter vil blive administreret af systemd-networkd virtuelle grænseflade.
NO_DNSMASQ=1 - sluk den af samme grund.
WIFI_IFACE=wlp6s0 — bærbar trådløs grænseflade.
INTERNET_IFACE=tun2socks - en virtuel grænseflade skabt til tun2socks.
SSID=hostapd — navnet på det virtuelle adgangspunkt.
PASSPHRASE=12345678 - adgangskode.
Glem ikke at aktivere tjenesten:
systemctl enable create_ap
Aktiver DHCP-server i systemd-networkd
kontor create_ap initialiserer en virtuel grænseflade i systemet ap0. I teorien hænger dnsmasq på denne grænseflade, men hvorfor installere ekstra tjenester, hvis systemd-networkd indeholder en indbygget DHCP-server?
For at aktivere det, vil vi definere netværksindstillingerne for det virtuelle punkt. For at gøre dette skal du oprette en fil /etc/systemd/network/25-ap0.network med følgende indhold:
Efter at create_ap-tjenesten initialiserer den virtuelle grænseflade ap0, vil systemd-networkd automatisk tildele den en IP-adresse og aktivere DHCP-serveren.
linjer EmitDNS=yes и DNS=10.0.0.1 overføre DNS-serverindstillinger til enheder, der er tilsluttet adgangspunktet.
Hvis du ikke planlægger at bruge en lokal DNS-server - i mit tilfælde er det dnscrypt-proxy - kan du installere DNS=10.0.0.1 в DNS=192.168.1.1Hvor 192.168.1.1 — adressen på din oprindelige gateway. Så vil DNS-anmodninger til din vært og dit lokale netværk gå ukrypteret gennem udbyderens servere.
EmitNTP=yes и NTP=192.168.1.1 overføre NTP-indstillinger.
Det samme gælder linjen NTP=10.0.0.1.
Installer og konfigurer NTP-server
Installer på systemet:
apt install ntp
Rediger konfigurationen /etc/ntp.conf. Kommenter adresserne på standardpuljer:
Tilføj offentlige serveradresser, for eksempel Google Public NTP:
server time1.google.com ibrust
server time2.google.com ibrust
server time3.google.com ibrust
server time4.google.com ibrust
Giv adgang til serveren til klienter på dit netværk:
restrict 10.0.0.0 mask 255.255.255.0
Aktiver udsendelse til dit netværk:
broadcast 10.0.0.255
Tilføj endelig adresserne på disse servere til den statiske routingtabel. For at gøre dette skal du åbne den trådløse grænsefladekonfigurationsfil /etc/systemd/network/25-wlp6s0.network og føj til slutningen af afsnittet Route.
Efter en genstart eller genstart vil du have et andet adgangspunkt, der dirigerer værten og LAN-enhederne til SOCKS.
Sådan ser udgangen ud ip a almindelig bærbar:
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 følge heraf
Udbyderen ser kun den krypterede forbindelse til din SOCKS-server, hvilket betyder, at de intet ser.
Og alligevel ser den dine NTP-anmodninger, for at forhindre dette, fjern statiske ruter for NTP-servere. Det er dog ikke sikkert, at din SOCKS-server tillader NTP-protokollen.
Krykke set på Debain 10
Hvis du forsøger at genstarte netværkstjenesten fra konsollen, vil den mislykkes med en fejl. Dette skyldes, at en del af det i form af en virtuel grænseflade er knyttet til tun2socks-tjenesten, hvilket betyder, at den bruges. For at genstarte netværkstjenesten skal du først stoppe tun2socks-tjenesten. Men jeg tror, at hvis du læser til ende, er dette bestemt ikke et problem for dig!