Bygger en router i SOCKS på en bærbar med Debian 10

I have postponed publishing this article for a whole year (or two) for one main reason — I had already published two articles describing the process of creating a SOCKS router from an ordinary laptop running Debian.

However, since then the stable version of Debian has been updated to Buster, and I've received quite a few personal messages asking for help with the setup, meaning my previous articles are not exhaustive. Well, I suspected myself that the methods outlined in them do not fully reveal all the nuances of setting up Linux for routing in SOCKS. Moreover, they were written for Debian Stretch, and after updating to Buster, I've noticed some small changes in how services interact in the systemd initialization system. Also, I didn't use systemd-networkd in those articles, even though it is most suitable for complex network configurations.

In addition to the aforementioned changes, I have added services such as hostapd — a service for virtualizing access points, ntp for synchronizing the time of local network clients, dnscrypt-proxy for encrypting connections via DNS and blocking ads on local network clients, and as I mentioned earlier, systemd-networkd for configuring network interfaces.

Here is the simplest block diagram of the internal structure of such a router.

Bygger en router i SOCKS på en bærbar med Debian 10

So, let me remind you of the goals of this series of articles:

  1. To route all connections of the OS in SOCKS, as well as the connections of all devices within the same network with the laptop.
  2. In my case, the laptop must remain fully mobile. That is, it should enable the use of a desktop environment without being tied to a physical location.
  3. The last point implies connecting and routing solely through the built-in wireless interface.
  4. And of course, creating a comprehensive guide, as well as exploring relevant technologies to the best of my humble knowledge.

What will be discussed in this article:

  1. git — we will download the project repositories tun2socks, necessary for routing TCP traffic in SOCKS, and create_ap — a script to automate the setup of a virtual access point using hostapd.
  2. tun2socks — we will build and install the systemd service into the system.
  3. systemd-networkd — we will configure the wireless and virtual interfaces, static routing tables, and packet forwarding.
  4. create_ap — vi installerer systemd-tjenesten i systemet, konfigurerer og starter den virtuelle adgangspunkt.

Valgfri trin:

  • ntp — vi installerer og konfigurerer serveren til tidsynkronisering på klienterne i det virtuelle adgangspunkt.
  • dnscrypt-proxy — vi krypterer DNS-forespørgsler, ruter dem i SOCKS og deaktiverer reklamedomæner for det lokale netværk.

Hvorfor alt dette?

Dette er en af metoderne til at organisere beskyttelse af TCP-forbindelser i det lokale netværk. Den største fordel er, at alle forbindelser går gennem SOCKS, medmindre der er oprettet en statisk rute gennem den originale gateway. Det betyder, at det ikke er nødvendigt at angive indstillinger for SOCKS-serveren hverken til individuelle programmer eller til klienter i det lokale netværk — de går alle automatisk til SOCKS, da det er standard-gatewayen, indtil vi angiver det modsatte.

I princippet tilføjer vi en anden krypteret router i form af en bærbar computer foran den originale router og bruger internetforbindelsen fra den originale router til de allerede krypterede SOCKS-forespørgsler fra den bærbare computer, som i sin tur ruter og krypterer forespørgsler fra det lokale netværk.

Set fra udbyderens perspektiv er vi konstant forbundet til én server med krypteret trafik.

Derfor tilsluttes alle enheder til den virtuelle adgangspunkt på den bærbare computer.

Installer tun2socks i systemet

Så længe din maskine har internet, skal du downloade alle nødvendige værktøjer.

apt update
apt install git make cmake

Download badvpn-pakken

git clone https://github.com/ambrop72/badvpn

Der vil blive oprettet en mappe i dit system badvpn. Opret en separat mappe til bygning

mkdir badvpn-build

Gå ind i den

cd badvpn-build

Byg tun2socks

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

Installer i systemet

make install
  • Parameter -DBUILD_NOTHING_BY_DEFAULT=1 deaktiverer opbygningen af alle komponenter i badvpn-repositoriet.
  • —DBUILD_TUN2SOCKS=1 aktiverer opbygningen af komponenten tun2socks.
  • make install — vil installere binæren tun2socks i dit system på adressen /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 — accepterer navnet på det virtuelle interface, som vi initialiserer med systemd-networkd.
  • --netif-ipaddr — netværksadressen for 'routeren' tun2socks, til hvilken det virtuelle interface tilsluttes. Det er bedre at lave en separat reservede subnet.
  • --socks-server-addr — accepterer soklen (adresse:port for SOCKS-serveren).

Hvis din SOCKS-server kræver autentificering, kan du angive parametre --brugernavn og --kodeord.

Registrer tjenesten herefter

systemctl daemon-reload

Og aktiver

systemctl enable tun2socks

Før vi starter tjenesten, skal vi sikre, at den har et virtuelt netværksinterface.

Vi går til systemd-networkd

Aktiverer systemd-networkd:

systemctl enable systemd-networkd

Deaktiverer de nuværende netværkstjenester.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wait-online — er en tjeneste, der venter på, at der er en aktiv netværksforbindelse, før systemd fortsætter med at starte andre tjenester, der er afhængige af netværket. Vi deaktiverer den, da vi skifter til en tilsvarende systemd-networkd.

Lad os aktivere den med det samme:

systemctl enable systemd-networkd-wait-online

Konfigurer det trådløse netværksinterface

Opret en konfigurationsfil til systemd-networkd for 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å dit trådløse interface. Identificer det med kommandoen ip a.
  • IPForward — er en direktiv, der aktiverer pakkeomdirigering på netværksinterfacet.
  • Adresse ansvarlig for at tildele en IP-adresse til det trådløse interface. Vi angiver det statisk, fordi ved en tilsvarende direktiv DHCP=yes, opretter systemd-networkd en standard gateway i systemet. Så hele trafikken vil gå gennem den originale gateway, og ikke gennem det fremtidige virtuelle interface i en anden subnet. Du kan kontrollere den nuværende standard gateway 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 sektionen Route til slutningen af den konfigurationsfil, du har oprettet for det trådløse interface med følgende indhold:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway — er standard gatewayen eller adressen på dit originale access point.
  • Destination — adressen på SOCKS-serveren.

Konfigurer wpa_supplicant til systemd-networkd

systemd-networkd bruger wpa_supplicant til at oprette forbindelse til et sikkert access point. Når den forsøger at 'aktivere' det trådløse interface, starter systemd-networkd tjenesten wpa_supplicant@navn, hvor navn — er navnet på det trådløse interface. Hvis du ikke har brugt systemd-networkd indtil nu, så er denne tjeneste sandsynligvis ikke til stede i dit system.

Så opret den med kommandoen:

systemctl enable wpa_supplicant@wlp6s0

Jeg har brugt wlp6s0 som som navn på din trådløse grænseflade. Dit navn kan være andet. Du kan finde ud af det med kommandoen ip l.

Den oprettede tjeneste wpa_supplicant@wlp6s0 vil blive startet, når den trådløse grænseflade "aktiveres", men den vil søge efter SSID og adgangskodeindstillinger for adgangspunktet i filen /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Derfor skal du oprette den 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

hvor SSID er navnet på dit adgangspunkt, password er adgangskoden, og wlp6s0 er navnet på din trådløse grænseflade.

Initialiser den virtuelle grænseflade for tun2socks

Opret en fil til at initialisere den nye virtuelle grænseflade i systemet/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Navn er navnet, som systemd-networkd vil tildele den fremtidige virtuelle grænseflade ved dens initialisering.
  • Kind er typen af den virtuelle grænseflade. Baseret på navnet på tjenesten tun2socks kan du gætte, at det bruger en grænseflade af typen tun.
  • netdev er filtypen, som systemd-networkd bruges til at initialisere virtuelle netværksgrænseflader. Adressen og andre netværksindstillinger for disse grænseflader angives i .network-filer.

Opret en sådan fil /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
  • Navn er navnet på den virtuelle grænseflade, som du angav i netdev-filen.
  • Adresse er IP-adressen, der vil blive tildelt den virtuelle grænseflade. Skal være i samme netværk som adressen, som du angav i tjenesten tun2socks
  • Gateway er IP-adressen for "routeren" tun2socks, som du angav, da du oprettede systemdtjenesten.

Dermed har grænsefladen tun2socks en adresse 172.16.1.2, og tjenesten tun2socks — 172.16.1.1, som fungerer som gateway for alle forbindelser fra den virtuelle grænseflade.

Konfigurer den virtuelle adgangs punkt

Installer afhængigheder:

apt install util-linux procps hostapd iw haveged

Download repository create_ap til din maskine:

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

Gå ind i mappen for repository på din maskine:

cd create_ap

Installer i systemet:

make install

Der vil være en konfig i dit system /etc/create_ap.conf. Her er de vigtigste indstillinger til redigering:

  • GATEWAY=10.0.0.1 — det er bedst at lave et separat reserveret subnet.
  • NO_DNS=1 — slå det fra, da denne parameter vil blive håndteret af den virtuelle grænseflade systemd-networkd.
  • NO_DNSMASQ=1 — slå det fra af samme grund.
  • WIFI_IFACE=wlp6s0 — den trådløse grænseflade på laptop.
  • INTERNET_IFACE=tun2socks — den virtuelle grænseflade oprettet til tun2socks.
  • SSID=hostapd — navnet på den virtuelle adgangs punkt.
  • PASSPHRASE=12345678 — adgangskoden.

Husk at aktivere tjenesten:

systemctl enable create_ap

Aktivér DHCP-server i systemd-networkd

Tjeneste create_ap initialiserer et virtuelt interface i systemet ap0. I teorien skal dnsmasq køre på dette interface, men hvorfor installere unødvendige tjenester, når systemd-networkd indeholder en indbygget DHCP-server?

For at aktivere det, skal vi definere netværksindstillingerne for det virtuelle punkt. Opret 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

Når tjenesten create_ap initialiserer det virtuelle interface ap0, vil systemd-networkd automatisk tildele det en IP-adresse og aktivere DHCP-serveren.

Linjer EmitDNS=yes og DNS=10.0.0.1 giver DNS-serverindstillinger til enheder, der er tilsluttet adgangspunktet.

Hvis du ikke planlægger at bruge en lokal DNS-server — i mit tilfælde dnscrypt-proxy — kan du sætte DNS=10.0.0.1 i DNS=192.168.1.1, hvor 192.168.1.1 — adressen til din originale gateway. Så vil DNS-forespørgsler fra din host og det lokale netværk gå ukrypteret gennem udbyderens servere.

EmitNTP=yes og NTP=192.168.1.1 giver NTP-indstillingerne.

Det samme gælder for linjen NTP=10.0.0.1.

Installer og konfigurer NTP-serveren

Installer i systemet:

apt install ntp

Rediger konfigurationen /etc/ntp.conf. Kommenter adresserne for 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 adresserne for offentlige servere, for eksempel Google Public NTP:

server time1.google.com iburst
server time2.google.com iburst
server time3.google.com iburst
server time4.google.com iburst

Giv adgang til serveren for klienterne i dit netværk:

restrict 10.0.0.0 mask 255.255.255.0

Aktivér multicast i dit netværk:

broadcast 10.0.0.255

Endelig, tilføj adresserne på disse servere i den statiske routingtabel. For dette, åbn konfigurationsfilen for det trådløse interface /etc/systemd/network/25-wlp6s0.network og tilføj til slutningen af sektionen 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 værktøjet host som følger:

host time1.google.com

Installer dnscrypt-proxy, fjern reklamer og skjul DNS-trafik fra udbyderen

apt install dnscrypt-proxy

For at håndtere DNS-forespørgsler fra hosten og det lokale netværk, rediger socket /lib/systemd/system/dnscrypt-proxy.socket. Ændr 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 forbindelserne fra dnscrypt-proxy gennem tun2socks, tilføj nedenfor:

force_tcp = true

Rediger konfigurationen /etc/resolv.conf, som informerer DNS-serveren om hosten.

nameserver 127.0.0.1
nameserver 192.168.1.1

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

Færdig!

Genstart eller stop aktiverede netværkstjenester:

systemctl stop networking NetworkManager NetworkManager-wait-online

Og genstart alle nødvendige:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Efter genstart eller omstart vil du få et andet adgangspunkt, der rutegør værten og enhederne i det lokale netværk til SOCKS.

Sådan ser outputtet ud ip a af en almindelig laptop:

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

In the end,

  1. Udbyderen ser kun en krypteret forbindelse til din SOCKS-server, så de kan ikke se noget.
  2. Og alligevel ser de dine NTP-forespørgsler, for at forhindre dette, skal du fjerne de statiske ruter til NTP-serverne. Men det er ikke sikkert, at din SOCKS-server tillader NTP-protokollen.

Workaround set på Debian 10

Hvis du forsøger at genstarte netværkstjenesten fra konsollen, fejler den med en fejl. Det skyldes, at dens del i form af et virtuelt interface er bundet til tun2socks-tjenesten og derfor er i brug. For at genstarte netværkstjenesten skal du først stoppe tun2socks-tjenesten. Men jeg tror, at hvis du har læst til slutningen, så er det bestemt ikke et problem for dig!

Links

  1. Statisk routing i Linux — IBM
  2. systemd-networkd.service — Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Dette script opretter et NATed eller broet WiFi-adgangspunkt.
  5. dnscrypt-proxy 2 — En fleksibel DNS-proxy med support for krypterede DNS-protokoller.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster