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.

Opbygning af en router i SOCKS på en bærbar computer med Debian 10

Så lad mig minde dig om, hvad målene med denne serie af artikler er:

  1. Rut alle OS-forbindelser til SOCKS, såvel som forbindelser fra alle enheder på samme netværk som den bærbare computer.
  2. 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.
  3. Det sidste punkt indebærer kun forbindelse og routing gennem den indbyggede trådløse grænseflade.
  4. 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:

  1. 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.
  2. tun2 sokker — bygge og installere systemd-tjenesten på systemet.
  3. systemd-netværk d — konfigurere trådløse og virtuelle grænseflader, statiske routingtabeller og pakkeomdirigering.
  4. 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

mkdir badvpn-build

Gå til det

cd badvpn-build

Samle tun2socks

cmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1

Installer på systemet

make install
  • Parameter -DBUILD_NOTHING_BY_DEFAULT=1 deaktiverer opbygningen af ​​alle komponenter i badvpn-lageret.
  • DBUILD_TUN2SOCKS=1 omfatter en komponent i samlingen tun2 sokker.
  • make install — vil installere tun2socks binær på dit system kl /usr/local/bin/badvpn-tun2socks.

Installer tun2socks-tjenesten i systemd

Opret en fil /etc/systemd/system/tun2socks.service med følgende indhold:

[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 - 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.
  • --socks-server-addr - accepterer stik (адрес:порт SOCKS-servere).

Hvis din SOCKS-server kræver godkendelse, kan du angive parametrene --username и --password.

Derefter skal du registrere tjenesten

systemctl daemon-reload

Og tænd den

systemctl enable tun2socks

Før du starter tjenesten, vil vi forsyne den med en virtuel netværksgrænseflade.

Skifter til systemd-netværkd

Tænde for systemd-networkd:

systemctl enable systemd-networkd

Deaktiver aktuelle netværkstjenester.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • 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.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • 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.

For at gøre dette skal du køre kommandoen:

wpa_passphrase SSID password>/etc/wpa_supplicant/wpa_supplicant-wlp6s0.conf

где 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:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • 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 sokker172.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:

[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

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:

#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

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.

[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

Du kan finde ud af adresserne på dine NTP-servere ved hjælp af hjælpeprogrammet host som følger:

host time1.google.com

Installer dnscrypt-proxy, fjern annoncer og skjul DNS-trafik fra din udbyder

apt install dnscrypt-proxy

For at betjene værts- og lokalnetværks DNS-forespørgsler skal du redigere socket /lib/systemd/system/dnscrypt-proxy.socket. Skift følgende linjer:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Genstart systemd:

systemctl daemon-reload

Rediger konfigurationen /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

For at dirigere dnscrypt-proxy-forbindelser gennem tun2socks skal du tilføje nedenfor:

force_tcp = true

Rediger konfigurationen /etc/resolv.conf, som fortæller DNS-serveren til værten.

nameserver 127.0.0.1
nameserver 192.168.1.1

Den første linje muliggør brugen af ​​dnscrypt-proxy, den anden linje bruger den originale gateway, hvis dnscrypt-proxy-serveren ikke er tilgængelig.

Udført!

Genstart eller stop med at køre netværkstjenester:

systemctl stop networking NetworkManager NetworkManager-wait-online

Og genstart alt nødvendigt:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

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

  1. Udbyderen ser kun den krypterede forbindelse til din SOCKS-server, hvilket betyder, at de intet ser.
  2. 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!

RЎSЃS <P "RєRё

  1. Statisk routing på Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Dette script opretter et NATed eller Bridged WiFi Access Point.
  5. dnscrypt-proxy 2 — En fleksibel DNS-proxy med understøttelse af krypterede DNS-protokoller.

Kilde: www.habr.com