Construir un encaminador a SOCKS en un ordinador portàtil Debian 10

Durant un any sencer (o dos) vaig ajornar la publicació d'aquest article pel motiu principal: ja havia publicat dos articles en què descrivia el procés de creació d'un encaminador a SOCKS des d'un ordinador portàtil molt normal amb Debian.

Tanmateix, des d'aleshores, la versió estable de Debian s'ha actualitzat a Buster, un nombre suficient de persones s'han posat en contacte amb mi de manera privada per demanar ajuda amb la configuració, la qual cosa significa que els meus articles anteriors no són exhaustius. Bé, jo mateix vaig endevinar que els mètodes que s'hi descriuen no revelen completament totes les complexitats de configurar Linux per a l'encaminament a SOCKS. A més, estan escrits per a Debian Stretch i, després d'actualitzar a Buster, al sistema d'inici systemd, vaig notar petits canvis en la interacció dels serveis. I als propis articles, no vaig utilitzar systemd-networkd, tot i que és més adequat per a configuracions de xarxa complexes.

A més dels canvis anteriors, s'han afegit els serveis següents a la meva configuració: hostapd - servei de virtualització de punts d'accés, ntp per sincronitzar l'hora dels clients de la xarxa local, dnscrypt-proxy per xifrar connexions mitjançant DNS i desactivar la publicitat als clients de la xarxa local, i també, com he esmentat anteriorment, systemd-networkd per configurar interfícies de xarxa.

Aquí teniu un diagrama de blocs senzill de l'estructura interna d'aquest encaminador.

Construir un encaminador a SOCKS en un ordinador portàtil Debian 10

Per tant, deixeu-me recordar quins són els objectius d'aquesta sèrie d'articles:

  1. Encamineu totes les connexions del sistema operatiu a SOCKS, així com les connexions de tots els dispositius de la mateixa xarxa que l'ordinador portàtil.
  2. El portàtil en el meu cas hauria de romandre completament mòbil. És a dir, donar l'oportunitat d'utilitzar l'entorn d'escriptori i no estar lligat a una ubicació física.
  3. L'últim punt implica connexió i encaminament només a través de la interfície sense fil integrada.
  4. Bé, i per descomptat, la creació d'una guia completa, així com una anàlisi de les tecnologies rellevants segons el meu modest coneixement.

Què es tractarà en aquest article:

  1. git - descarregar repositoris de projectes tun2socksnecessari per encaminar el trànsit TCP a SOCKS i create_ap — un script per automatitzar la configuració d'un punt d'accés virtual utilitzant hostapd.
  2. tun2socks — crear i instal·lar el servei systemd al sistema.
  3. systemd-networkd — configurar interfícies sense fil i virtuals, taules d'encaminament estàtiques i redirecció de paquets.
  4. create_ap — instal·leu el servei systemd al sistema, configureu i engegueu un punt d'accés virtual.

Passos opcionals:

  • ntp — instal·leu i configureu un servidor per sincronitzar l'hora als clients del punt d'accés virtual.
  • dnscrypt-proxy — xifrarem les sol·licituds de DNS, les dirigirem a SOCKS i desactivarem els dominis publicitaris per a la xarxa local.

Per a què serveix tot això?

Aquesta és una de les maneres de protegir les connexions TCP a una xarxa local. El principal avantatge és que totes les connexions es fan en SOCKS, tret que es construeixi una ruta estàtica per a ells a través de la passarel·la original. Això vol dir que no cal que especifiqueu la configuració del servidor SOCKS ni per a programes individuals ni per a clients de la xarxa local: tots van a SOCKS per defecte, ja que és la passarel·la per defecte fins que no indiquem el contrari.

Bàsicament, afegim un segon encaminador de xifrat com a ordinador portàtil davant de l'encaminador original i utilitzem la connexió a Internet de l'encaminador original per a les sol·licituds SOCKS ja xifrades de l'ordinador portàtil, que al seu torn encamina i xifra les sol·licituds dels clients LAN.

Des del punt de vista del proveïdor, estem connectats constantment a un servidor amb trànsit xifrat.

En conseqüència, tots els dispositius estan connectats al punt d'accés virtual de l'ordinador portàtil.

Instal·leu tun2socks al sistema

Sempre que la vostra màquina tingui internet, descarregueu totes les eines necessàries.

apt update
apt install git make cmake

Descarrega el paquet badvpn

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

Apareixerà una carpeta al vostre sistema badvpn. Creeu una carpeta separada per a la compilació

mkdir badvpn-build

Aneu-hi

cd badvpn-build

Recull tun2socks

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

Instal·lar al sistema

make install
  • Paràmetre -DBUILD_NOTHING_BY_DEFAULT=1 desactiva la creació de tots els components del repositori badvpn.
  • -DBUILD_TUN2SOCKS=1 inclou un component en el muntatge tun2socks.
  • make install — instal·larà el binari tun2socks al vostre sistema a /usr/local/bin/badvpn-tun2socks.

Instal·leu el servei tun2socks a systemd

Creeu un fitxer /etc/systemd/system/tun2socks.service amb el següent contingut:

[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 - pren el nom de la interfície virtual que inicialitzem amb systemd-networkd.
  • --netif-ipaddr — l'adreça de xarxa del "encaminador" tun2socks al qual està connectada la interfície virtual. És millor separar-lo subxarxa reservada.
  • --socks-server-addr - accepta socket (адрес:порт servidors SOCKS).

Si el vostre servidor SOCKS requereix autenticació, podeu especificar els paràmetres --username и --password.

A continuació, registreu el servei

systemctl daemon-reload

I enceneu-lo

systemctl enable tun2socks

Abans d'iniciar el servei, li proporcionarem una interfície de xarxa virtual.

Canviant a systemd-networkd

Incloem systemd-networkd:

systemctl enable systemd-networkd

Desactiva els serveis de xarxa actuals.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-espera-en línia és un servei que espera una connexió de xarxa que funcioni abans que systemd continuï iniciant altres serveis que depenen de la presència d'una xarxa. L'estem desactivant mentre canviem a l'analògic systemd-networkd.

Activem-ho de seguida:

systemctl enable systemd-networkd-wait-online

Configureu la interfície de xarxa sense fil

Creeu un fitxer de configuració systemd-networkd per a la interfície de xarxa sense fil /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Nom és el nom de la vostra interfície sense fil. Identifiqueu-lo amb l'ordre ip a.
  • IPForward - una directiva que permet la redirecció de paquets en una interfície de xarxa.
  • Adreça s'encarrega d'assignar una adreça IP a la interfície sense fil. Ho especifiquem estàticament perquè amb la directiva equivalent DHCP=yes, systemd-networkd crea una passarel·la per defecte al sistema. Aleshores, tot el trànsit passarà per la passarel·la original i no per la futura interfície virtual d'una subxarxa diferent. Podeu comprovar la passarel·la predeterminada actual amb l'ordre ip r

Creeu una ruta estàtica per al servidor SOCKS remot

Si el vostre servidor SOCKS no és local, sinó remot, haureu de crear-hi una ruta estàtica. Per fer-ho, afegiu una secció Route al final del fitxer de configuració de la interfície sense fil que heu creat amb el contingut següent:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway — aquesta és la passarel·la predeterminada o l'adreça del vostre punt d'accés original.
  • Destination — Adreça del servidor SOCKS.

Configureu wpa_supplicant per a systemd-networkd

systemd-networkd utilitza wpa_supplicant per connectar-se a un punt d'accés segur. Quan s'intenta "augmentar" la interfície sense fil, systemd-networkd inicia el servei wpa_supplicant@имяOn nom és el nom de la interfície sense fil. Si no heu utilitzat systemd-networkd abans d'aquest punt, és probable que aquest servei falti al vostre sistema.

Així que creeu-lo amb l'ordre:

systemctl enable wpa_supplicant@wlp6s0

jo solia wlp6s0 com el nom de la seva interfície sense fil. El teu nom pot ser diferent. Podeu reconèixer-lo amb l'ordre ip l.

Ara el servei creat wpa_supplicant@wlp6s0 s'iniciarà quan la interfície sense fil estigui "aixecada", però, al seu torn, buscarà la configuració de SSID i contrasenya del punt d'accés al fitxer /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Per tant, cal crear-lo mitjançant la utilitat wpa_passphrase.

Per fer-ho, executeu l'ordre:

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

on SSID és el nom del vostre punt d'accés, la contrasenya és la contrasenya i wlp6s0 — el nom de la vostra interfície sense fil.

Inicialitzar la interfície virtual per a tun2socks

Creeu un fitxer per inicialitzar una nova interfície virtual al sistema/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Nom és el nom que systemd-networkd assignarà a la futura interfície virtual quan s'inicialitzi.
  • Nen és un tipus d'interfície virtual. Pel nom del servei tun2socks, podeu endevinar que utilitza una interfície com tun.
  • netdev és l'extensió dels fitxers que systemd-networkd S'utilitza per inicialitzar interfícies de xarxa virtual. L'adreça i altres paràmetres de xarxa per a aquestes interfícies s'especifiquen a .xarxa-Fitxers.

Creeu un fitxer com aquest /etc/systemd/network/25-tun2socks.network amb el següent contingut:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name — el nom de la interfície virtual que heu especificat netdev-dossier.
  • Address — Adreça IP que s'assignarà a la interfície virtual. Ha d'estar a la mateixa xarxa que l'adreça que heu especificat al servei tun2socks
  • Gateway - Adreça IP del "encaminador" tun2socks, que heu especificat en crear el servei systemd.

Així que la interfície tun2socks té una adreça 172.16.1.2, i el servei tun2socks - 172.16.1.1, és a dir, és la porta d'entrada per a totes les connexions des de la interfície virtual.

Configura un punt d'accés virtual

Instal·lar dependències:

apt install util-linux procps hostapd iw haveged

Descarrega el repositori create_ap al teu cotxe:

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

Aneu a la carpeta del repositori de la vostra màquina:

cd create_ap

Instal·lar al sistema:

make install

Apareixerà una configuració al vostre sistema /etc/create_ap.conf. Aquestes són les principals opcions d'edició:

  • GATEWAY=10.0.0.1 — és millor convertir-lo en una subxarxa reservada separada.
  • NO_DNS=1 - desactivar, ja que aquest paràmetre serà gestionat per la interfície virtual systemd-networkd.
  • NO_DNSMASQ=1 - Apagueu-lo pel mateix motiu.
  • WIFI_IFACE=wlp6s0 - Interfície sense fils per a portàtils.
  • INTERNET_IFACE=tun2socks - una interfície virtual creada per a tun2socks.
  • SSID=hostapd — nom del punt d'accés virtual.
  • PASSPHRASE=12345678 - contrasenya.

No us oblideu d'habilitar el servei:

systemctl enable create_ap

Habiliteu el servidor DHCP a systemd-networkd

Servei create_ap inicialitza una interfície virtual al sistema ap0. En teoria, dnsmasq es penja en aquesta interfície, però per què instal·lar serveis addicionals si systemd-networkd conté un servidor DHCP integrat?

Per habilitar-lo, definirem la configuració de xarxa per al punt virtual. Per fer-ho, creeu un fitxer /etc/systemd/network/25-ap0.network amb el següent contingut:

[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

Després que el servei create_ap inicialitzi la interfície virtual ap0, systemd-networkd li assignarà automàticament una adreça IP i habilitarà el servidor DHCP.

Cordes EmitDNS=yes и DNS=10.0.0.1 transmetre la configuració del servidor DNS als dispositius connectats al punt d'accés.

Si no teniu previst utilitzar un servidor DNS local (en el meu cas és dnscrypt-proxy), podeu instal·lar DNS=10.0.0.1 в DNS=192.168.1.1On 192.168.1.1 — l'adreça de la vostra passarel·la original. Aleshores, les sol·licituds de DNS per al vostre amfitrió i la vostra xarxa local quedaran sense xifrar a través dels servidors del proveïdor.

EmitNTP=yes и NTP=192.168.1.1 transferir la configuració NTP.

El mateix passa amb la línia NTP=10.0.0.1.

Instal·leu i configureu el servidor NTP

Instal·lar al sistema:

apt install ntp

Editeu la configuració /etc/ntp.conf. Comenteu les adreces dels grups estàndard:

#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

Afegiu adreces de servidor públic, per exemple Google Public NTP:

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

Proporcioneu accés al servidor als clients de la vostra xarxa:

restrict 10.0.0.0 mask 255.255.255.0

Activa la difusió a la teva xarxa:

broadcast 10.0.0.255

Finalment, afegiu les adreces d'aquests servidors a la taula d'encaminament estàtica. Per fer-ho, obriu el fitxer de configuració de la interfície sense fil /etc/systemd/network/25-wlp6s0.network i afegir al final de la secció 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

Podeu esbrinar les adreces dels vostres servidors NTP mitjançant la utilitat host de la manera següent:

host time1.google.com

Instal·leu dnscrypt-proxy, elimineu anuncis i amagueu el trànsit DNS del vostre proveïdor

apt install dnscrypt-proxy

Per atendre consultes DNS de l'amfitrió i de la xarxa local, editeu el sòcol /lib/systemd/system/dnscrypt-proxy.socket. Canvia les línies següents:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Reinicia systemd:

systemctl daemon-reload

Editeu la configuració /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Per encaminar connexions dnscrypt-proxy a través de tun2socks, afegiu a continuació:

force_tcp = true

Editeu la configuració /etc/resolv.conf, que indica al servidor DNS a l'amfitrió.

nameserver 127.0.0.1
nameserver 192.168.1.1

La primera línia permet l'ús de dnscrypt-proxy, la segona línia utilitza la passarel·la original en cas que el servidor dnscrypt-proxy no estigui disponible.

Fet!

Reinicieu o deixeu d'executar els serveis de xarxa:

systemctl stop networking NetworkManager NetworkManager-wait-online

I reinicieu tot el necessari:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Després d'un reinici o reinici, tindreu un segon punt d'accés que encamina l'amfitrió i els dispositius LAN a SOCKS.

Així es veu la sortida ip a portàtil normal:

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

Com a resultat, els

  1. El proveïdor només veu la connexió xifrada al vostre servidor SOCKS, el que significa que no veu res.
  2. I, tanmateix, veu les vostres sol·licituds NTP, per evitar-ho, elimineu les rutes estàtiques per als servidors NTP. Tanmateix, no és segur que el vostre servidor SOCKS permeti el protocol NTP.

Crutch detectat a Debain 10

Si intenteu reiniciar el servei de xarxa des de la consola, fallarà amb un error. Això es deu al fet que part d'ella en forma d'interfície virtual està lligada al servei tun2socks, el que significa que s'utilitza. Per reiniciar el servei de xarxa, primer heu d'aturar el servei tun2socks. Però, crec que si llegiu fins al final, això no és un problema per a vosaltres!

Referències

  1. Enrutament estàtic a Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: aquest script crea un punt d'accés WiFi NATed o Bridged.
  5. dnscrypt-proxy 2: un servidor intermediari DNS flexible, amb suport per a protocols DNS xifrats.

Font: www.habr.com