Bygge en ruter i SOCKS på en bærbar datamaskin med Debian 10

I et helt år (eller to) utsatte jeg å publisere denne artikkelen av hovedgrunnen - jeg hadde allerede publisert to artikler der jeg beskrev prosessen med å lage en ruter i SOCKS fra en helt vanlig bærbar datamaskin med Debian.

Men siden den gang har den stabile versjonen av Debian blitt oppdatert til Buster, et tilstrekkelig antall personer har kontaktet meg privat og spurt om hjelp med oppsettet, noe som betyr at mine tidligere artikler ikke er uttømmende. Vel, jeg gjettet selv at metodene som er skissert i dem, ikke fullt ut avslører alle vanskelighetene ved å sette opp Linux for ruting i SOCKS. I tillegg er de skrevet for Debian Stretch, og etter å ha oppgradert til Buster, i systemd init-systemet, la jeg merke til små endringer i interaksjonen mellom tjenester. Og i selve artiklene brukte jeg ikke systemd-networkd, selv om det er best egnet for komplekse nettverkskonfigurasjoner.

I tillegg til endringene ovenfor, ble følgende tjenester lagt til konfigurasjonen min: hostapd - tjeneste for tilgangspunktvirtualisering, ntp for å synkronisere tiden til lokale nettverksklienter, dnscrypt-proxy å kryptere tilkoblinger via DNS og deaktivere annonsering på lokale nettverksklienter, og også, som jeg nevnte tidligere, systemd-nettverkd for konfigurering av nettverksgrensesnitt.

Her er et enkelt blokkskjema over den interne strukturen til en slik ruter.

Bygge en ruter i SOCKS på en bærbar datamaskin med Debian 10

Så la meg minne deg på hva målene med denne artikkelserien er:

  1. Rut alle OS-tilkoblinger til SOCKS, samt tilkoblinger fra alle enheter på samme nettverk som den bærbare datamaskinen.
  2. Den bærbare datamaskinen i mitt tilfelle skal forbli helt mobil. Det vil si å gi muligheten til å bruke skrivebordsmiljøet og ikke være bundet til en fysisk plassering.
  3. Det siste punktet innebærer tilkobling og ruting kun gjennom det innebygde trådløse grensesnittet.
  4. Vel, og selvfølgelig, opprettelsen av en omfattende guide, samt en analyse av de relevante teknologiene etter min beskjedne kunnskap.

Hva vil bli dekket i denne artikkelen:

  1. git — last ned prosjektlager tun2sokkernødvendig for å rute TCP-trafikk til SOCKS, og opprette_ap — et skript for å automatisere oppsettet av et virtuelt tilgangspunkt ved hjelp av hostapd.
  2. tun2sokker — bygge og installere systemd-tjenesten på systemet.
  3. systemd-nettverkd — konfigurer trådløse og virtuelle grensesnitt, statiske rutingtabeller og pakkeomdirigering.
  4. opprette_ap — installer systemd-tjenesten på systemet, konfigurer og start et virtuelt tilgangspunkt.

Valgfrie trinn:

  • ntp — installer og konfigurer en server for å synkronisere tid på virtuelle tilgangspunktklienter.
  • dnscrypt-proxy — vi vil kryptere DNS-forespørsler, rute dem til SOCKS og deaktivere reklamedomener for det lokale nettverket.

Hva er alt dette for noe?

Dette er en av måtene å sikre TCP-tilkoblinger på et lokalt nettverk. Hovedfordelen er at alle tilkoblinger gjøres i SOCKS, med mindre det bygges en statisk rute for dem gjennom den originale gatewayen. Dette betyr at du ikke trenger å spesifisere SOCKS serverinnstillinger for verken individuelle programmer eller klienter på det lokale nettverket - de går alle til SOCKS som standard, siden det er standard gateway inntil vi angir noe annet.

I hovedsak legger vi til en ny krypteringsruter som en bærbar datamaskin foran den originale ruteren og bruker den originale ruterens Internett-tilkobling for den bærbare datamaskinens allerede krypterte SOCKS-forespørsler, som igjen ruter og krypterer forespørsler fra LAN-klienter.

Fra leverandørens side er vi hele tiden koblet til én server med kryptert trafikk.

Følgelig er alle enheter koblet til den bærbare datamaskinens virtuelle tilgangspunkt.

Installer tun2socks på systemet

Så lenge maskinen din har internett, last ned alle nødvendige verktøy.

apt update
apt install git make cmake

Last ned badvpn-pakken

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

En mappe vil vises på systemet ditt badvpn. Opprett en egen mappe for bygget

mkdir badvpn-build

Gå til den

cd badvpn-build

Samle inn tun2socks

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

Installer på systemet

make install
  • Parameter -DBUILD_NOTHING_BY_DEFAULT=1 deaktiverer byggingen av alle komponentene i badvpn-depotet.
  • -DBUILD_TUN2SOCKS=1 inkluderer en komponent i sammenstillingen tun2sokker.
  • make install — vil installere tun2socks binær på systemet ditt på /usr/local/bin/badvpn-tun2socks.

Installer tun2socks-tjenesten i systemd

Opprett en fil /etc/systemd/system/tun2socks.service med følgende innhold:

[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 navnet på det virtuelle grensesnittet som vi initialiserer med systemd-networkd.
  • --netif-ipaddr — nettverksadressen til tun2socks "ruteren" som det virtuelle grensesnittet er koblet til. Det er bedre å gjøre det adskilt reservert subnett.
  • --socks-server-addr - aksepterer stikkontakt (адрес:порт SOCKS-servere).

Hvis SOCKS-serveren din krever autentisering, kan du spesifisere parameterne --username и --password.

Registrer deretter tjenesten

systemctl daemon-reload

Og slå den på

systemctl enable tun2socks

Før du starter tjenesten, vil vi gi den et virtuelt nettverksgrensesnitt.

Bytter til systemd-networkd

Vi inkluderer systemd-networkd:

systemctl enable systemd-networkd

Deaktiver gjeldende nettverkstjenester.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-vent-online er en tjeneste som venter på en fungerende nettverkstilkobling før systemd fortsetter å starte andre tjenester som er avhengig av tilstedeværelsen av et nettverk. Vi deaktiverer den når vi bytter til systemd-networkd-analogen.

La oss aktivere det med en gang:

systemctl enable systemd-networkd-wait-online

Sett opp grensesnittet for det trådløse nettverket

Opprett en systemd-networkd-konfigurasjonsfil for det trådløse nettverksgrensesnittet /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Navn er navnet på det trådløse grensesnittet. Identifiser det med kommandoen ip a.
  • IPForward - et direktiv som muliggjør pakkeomdirigering på et nettverksgrensesnitt.
  • Adresse er ansvarlig for å tildele en IP-adresse til det trådløse grensesnittet. Vi spesifiserer det statisk fordi med tilsvarende direktiv DHCP=yes, systemd-networkd oppretter en standard gateway på systemet. Da vil all trafikk gå gjennom den opprinnelige gatewayen, og ikke gjennom det fremtidige virtuelle grensesnittet på et annet subnett. Du kan sjekke gjeldende standard gateway med kommandoen ip r

Opprett en statisk rute for den eksterne SOCKS-serveren

Hvis SOCKS-serveren ikke er lokal, men ekstern, må du opprette en statisk rute for den. For å gjøre dette, legg til en seksjon Route til slutten av konfigurasjonsfilen for trådløst grensesnitt du opprettet med følgende innhold:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway – dette er standard gateway eller adressen til det opprinnelige tilgangspunktet.
  • Destination — SOCKS serveradresse.

Konfigurer wpa_supplicant for systemd-networkd

systemd-networkd bruker wpa_supplicant for å koble til et sikkert tilgangspunkt. Når du prøver å "heve" det trådløse grensesnittet, starter systemd-networkd tjenesten wpa_supplicant@имяDer navn er navnet på det trådløse grensesnittet. Hvis du ikke har brukt systemd-networkd før dette punktet, mangler sannsynligvis denne tjenesten på systemet ditt.

Så lag den med kommandoen:

systemctl enable wpa_supplicant@wlp6s0

jeg brukte wlp6s0 som navnet på det trådløse grensesnittet. Navnet ditt kan være annerledes. Du kan gjenkjenne den med kommandoen ip l.

Nå er den opprettede tjenesten wpa_supplicant@wlp6s0 vil bli lansert når det trådløse grensesnittet er "hevet", men det vil på sin side se etter SSID- og passordinnstillingene til tilgangspunktet i filen /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Derfor må du lage den ved å bruke verktøyet wpa_passphrase.

For å gjøre dette, kjør kommandoen:

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

der SSID er navnet på tilgangspunktet, passordet er passordet og wlp6s0 — navnet på det trådløse grensesnittet.

Initialiser det virtuelle grensesnittet for tun2socks

Opprett en fil for å initialisere et nytt virtuelt grensesnitt i systemet/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Navn er navnet som systemd-networkd vil tildele til det fremtidige virtuelle grensesnittet når det initialiseres.
  • Type er en type virtuelt grensesnitt. Fra navnet på tun2socks-tjenesten kan du gjette at den bruker et grensesnitt som tun.
  • netdev er utvidelsen av filer som systemd-networkd Brukes til å initialisere virtuelle nettverksgrensesnitt. Adressen og andre nettverksinnstillinger for disse grensesnittene er spesifisert i .Nettverk-filer.

Lag en fil som denne /etc/systemd/network/25-tun2socks.network med følgende innhold:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name - navnet på det virtuelle grensesnittet du spesifiserte i netdev-fil.
  • Address — IP-adresse som vil bli tildelt det virtuelle grensesnittet. Må være på samme nettverk som adressen du spesifiserte i tun2socks-tjenesten
  • Gateway — IP-adressen til "ruteren" tun2sokker, som du spesifiserte da du opprettet systemd-tjenesten.

Så grensesnittet tun2sokker har en adresse 172.16.1.2, og tjenesten tun2sokker - 172.16.1.1, det vil si at det er gatewayen for alle tilkoblinger fra det virtuelle grensesnittet.

Sett opp et virtuelt tilgangspunkt

Installasjonsavhengigheter:

apt install util-linux procps hostapd iw haveged

Last ned depotet opprette_ap til bilen din:

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

Gå til depotmappen på maskinen din:

cd create_ap

Installer på systemet:

make install

En konfigurasjon vil vises på systemet ditt /etc/create_ap.conf. Her er de viktigste redigeringsalternativene:

  • GATEWAY=10.0.0.1 - det er bedre å gjøre det til et eget reservert subnett.
  • NO_DNS=1 - deaktiver, siden denne parameteren vil bli administrert av systemd-networkd virtuelle grensesnittet.
  • NO_DNSMASQ=1 - slå den av av samme grunn.
  • WIFI_IFACE=wlp6s0 — bærbart trådløst grensesnitt.
  • INTERNET_IFACE=tun2socks - et virtuelt grensesnitt laget for tun2socks.
  • SSID=hostapd — navnet på det virtuelle tilgangspunktet.
  • PASSPHRASE=12345678 - passord.

Ikke glem å aktivere tjenesten:

systemctl enable create_ap

Aktiver DHCP-server i systemd-networkd

kontor create_ap initialiserer et virtuelt grensesnitt i systemet ap0. I teorien henger dnsmasq på dette grensesnittet, men hvorfor installere ekstratjenester hvis systemd-networkd inneholder en innebygd DHCP-server?

For å aktivere det, vil vi definere nettverksinnstillingene for det virtuelle punktet. For å gjøre dette, lag en fil /etc/systemd/network/25-ap0.network med følgende innhold:

[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

Etter at create_ap-tjenesten initialiserer det virtuelle grensesnittet ap0, vil systemd-networkd automatisk tildele den en IP-adresse og aktivere DHCP-serveren.

Strenger EmitDNS=yes и DNS=10.0.0.1 overføre DNS-serverinnstillinger til enheter koblet til tilgangspunktet.

Hvis du ikke planlegger å bruke en lokal DNS-server - i mitt tilfelle er det dnscrypt-proxy - kan du installere DNS=10.0.0.1 в DNS=192.168.1.1Der 192.168.1.1 – adressen til den opprinnelige gatewayen. Da vil DNS-forespørsler for din vert og lokale nettverk gå ukryptert gjennom leverandørens servere.

EmitNTP=yes и NTP=192.168.1.1 overføre NTP-innstillinger.

Det samme gjelder linjen NTP=10.0.0.1.

Installer og konfigurer NTP-server

Installer på systemet:

apt install ntp

Rediger konfigurasjonen /etc/ntp.conf. Kommenter adressene til standard bassenger:

#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

Legg til 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

Gi tilgang til serveren til klienter på nettverket ditt:

restrict 10.0.0.0 mask 255.255.255.0

Aktiver kringkasting til nettverket ditt:

broadcast 10.0.0.255

Til slutt legger du til adressene til disse serverne i den statiske rutingtabellen. For å gjøre dette, åpne konfigurasjonsfilen for trådløst grensesnitt /etc/systemd/network/25-wlp6s0.network og legg til på slutten av delen 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 finne ut adressene til NTP-serverne dine ved å bruke verktøyet host som følger:

host time1.google.com

Installer dnscrypt-proxy, fjern annonser og skjul DNS-trafikk fra leverandøren din

apt install dnscrypt-proxy

For å betjene DNS-spørringer for verts- og lokalnettverk, rediger kontakten /lib/systemd/system/dnscrypt-proxy.socket. Endre følgende linjer:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Omstart systemd:

systemctl daemon-reload

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

server_names = ['adguard-dns']

For å rute dnscrypt-proxy-tilkoblinger gjennom tun2socks, legg til nedenfor:

force_tcp = true

Rediger konfigurasjonen /etc/resolv.conf, som forteller DNS-serveren til verten.

nameserver 127.0.0.1
nameserver 192.168.1.1

Den første linjen muliggjør bruk av dnscrypt-proxy, den andre linjen bruker den opprinnelige gatewayen i tilfelle dnscrypt-proxy-serveren ikke er tilgjengelig.

Ferdig!

Start på nytt eller slutt å kjøre nettverkstjenester:

systemctl stop networking NetworkManager NetworkManager-wait-online

Og start alt nødvendig på nytt:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Etter en omstart eller omstart vil du ha et ekstra tilgangspunkt som ruter verten og LAN-enhetene til SOCKS.

Slik ser utgangen ut ip a vanlig bærbar PC:

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 et resultat,

  1. Leverandøren ser kun den krypterte forbindelsen til SOCKS-serveren din, noe som betyr at de ikke ser noe.
  2. Og likevel ser den NTP-forespørslene dine, for å forhindre dette, fjern statiske ruter for NTP-servere. Det er imidlertid ikke sikkert at SOCKS-serveren tillater NTP-protokollen.

Krykke sett på Debain 10

Hvis du prøver å starte nettverkstjenesten på nytt fra konsollen, vil den mislykkes med en feil. Dette skyldes det faktum at en del av det i form av et virtuelt grensesnitt er knyttet til tun2socks-tjenesten, noe som betyr at den brukes. For å starte nettverkstjenesten på nytt, må du først stoppe tun2socks-tjenesten. Men, jeg tror, ​​hvis du leser til slutten, er dette definitivt ikke et problem for deg!

referanser

  1. Statisk ruting på Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Dette skriptet oppretter et NATed eller brokoblet WiFi-tilgangspunkt.
  5. dnscrypt-proxy 2 — En fleksibel DNS-proxy, med støtte for krypterte DNS-protokoller.

Kilde: www.habr.com