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.
Per tant, deixeu-me recordar quins són els objectius d'aquesta sèrie d'articles:
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.
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.
L'últim punt implica connexió i encaminament només a través de la interfície sense fil integrada.
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:
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.
tun2socks — crear i instal·lar el servei systemd al sistema.
systemd-networkd — configurar interfícies sense fil i virtuals, taules d'encaminament estàtiques i redirecció de paquets.
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ó
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.
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.
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:
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:
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:
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.
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:
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
El proveïdor només veu la connexió xifrada al vostre servidor SOCKS, el que significa que no veu res.
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!