ProHoster > Blog > administración > Construyendo un enrutador en SOCKS en una computadora portátil con Debian 10
Construyendo un enrutador en SOCKS en una computadora portátil con Debian 10
Durante un año (o dos) pospuse la publicación de este artículo por la razón principal: ya había publicado dos artículos en los que describía el proceso de creación de un enrutador en SOCKS desde una computadora portátil muy común con Debian.
Sin embargo, desde entonces la versión estable de Debian se actualizó a Buster, un número suficiente de personas se han puesto en contacto conmigo en privado para pedirme ayuda con la configuración, lo que significa que mis artículos anteriores no son exhaustivos. Bueno, yo mismo supuse que los métodos descritos en ellos no revelan completamente todas las complejidades de configurar Linux para enrutar en SOCKS. Además, están escritos para Debian Stretch y, después de actualizar a Buster, noté pequeños cambios en la interacción de los servicios en el sistema de inicio systemd. Y en los artículos mismos no utilicé systemd-networkd, aunque es más adecuado para configuraciones de red complejas.
Además de los cambios anteriores, se agregaron los siguientes servicios a mi configuración: hostapd - servicio de virtualización de puntos de acceso, ntp para sincronizar la hora de los clientes de la red local, proxy-dnscrypt para cifrar conexiones a través de DNS y deshabilitar la publicidad en los clientes de la red local, y también, como mencioné anteriormente, systemd-red para configurar interfaces de red.
A continuación se muestra un diagrama de bloques simple de la estructura interna de dicho enrutador.
Entonces, déjame recordarte cuáles son los objetivos de esta serie de artículos:
Enrute todas las conexiones del sistema operativo a SOCKS, así como las conexiones de todos los dispositivos en la misma red que la computadora portátil.
En mi caso, el portátil debería seguir siendo completamente móvil. Es decir, brindar la oportunidad de utilizar el entorno de escritorio y no estar atado a una ubicación física.
El último punto implica conexión y enrutamiento únicamente a través de la interfaz inalámbrica incorporada.
Bueno, y por supuesto, la creación de una guía completa, así como un análisis de las tecnologías relevantes según mis modestos conocimientos.
Qué se cubrirá en este artículo:
git — descargar repositorios de proyectos tun2calcetinesrequerido para enrutar el tráfico TCP a SOCKS, y crear_ap — un script para automatizar la configuración de un punto de acceso virtual usando hostapd.
tun2calcetines — compila e instala el servicio systemd en el sistema.
systemd-red — configurar interfaces inalámbricas y virtuales, tablas de enrutamiento estático y redireccionamiento de paquetes.
crear_ap — instale el servicio systemd en el sistema, configure e inicie un punto de acceso virtual.
Pasos opcionales:
ntp — instalar y configurar un servidor para sincronizar la hora en clientes de puntos de acceso virtuales.
proxy-dnscrypt — cifraremos las solicitudes de DNS, las enrutaremos a SOCKS y desactivaremos los dominios publicitarios para la red local.
¿Por qué todo esto?
Esta es una de las formas de proteger las conexiones TCP en una red local. La principal ventaja es que todas las conexiones se realizan en SOCKS, a menos que se cree una ruta estática para ellas a través de la puerta de enlace original. Esto significa que no necesita especificar la configuración del servidor SOCKS ni para programas individuales ni para clientes en la red local; todos van a SOCKS de forma predeterminada, ya que es la puerta de enlace predeterminada hasta que indiquemos lo contrario.
Básicamente, agregamos un segundo enrutador de cifrado como una computadora portátil frente al enrutador original y utilizamos la conexión a Internet del enrutador original para las solicitudes SOCKS ya cifradas de la computadora portátil, que a su vez enruta y cifra las solicitudes de los clientes de LAN.
Desde el punto de vista del proveedor, estamos constantemente conectados a un servidor con tráfico cifrado.
En consecuencia, todos los dispositivos están conectados al punto de acceso virtual de la computadora portátil.
Instalar tun2socks en el sistema
Siempre que su máquina tenga internet, descargue todas las herramientas necesarias.
apt update
apt install git make cmake
Descargue el paquete badvpn
git clone https://github.com/ambrop72/badvpn
Aparecerá una carpeta en su sistema. badvpn. Crea una carpeta separada para la compilación.
--tundev - toma el nombre de la interfaz virtual que inicializamos con systemd-networkd.
--netif-ipaddr — la dirección de red del “enrutador” tun2socks al que está conectada la interfaz virtual. Es mejor hacerlo por separado. subred reservada.
NetworkManager-espera-en línea es un servicio que espera una conexión de red que funcione antes de que systemd continúe iniciando otros servicios que dependen de la presencia de una red. Lo estamos deshabilitando mientras cambiamos al análogo systemd-networkd.
Habilitémoslo de inmediato:
systemctl enable systemd-networkd-wait-online
Configurar la interfaz de red inalámbrica
Cree un archivo de configuración systemd-networkd para la interfaz de red inalámbrica /etc/systemd/network/25-wlp6s0.network.
Nombre es el nombre de su interfaz inalámbrica. Identificarlo con el comando ip a.
IPAdelante - una directiva que permite la redirección de paquetes en una interfaz de red.
Dirección es responsable de asignar una dirección IP a la interfaz inalámbrica. Lo especificamos estáticamente porque con la directiva equivalente DHCP=yes, systemd-networkd crea una puerta de enlace predeterminada en el sistema. Entonces todo el tráfico pasará por la puerta de enlace original y no por la futura interfaz virtual en una subred diferente. Puede verificar la puerta de enlace predeterminada actual con el comando ip r
Cree una ruta estática para el servidor SOCKS remoto
Si su servidor SOCKS no es local, sino remoto, entonces necesita crear una ruta estática para él. Para hacer esto, agregue una sección Route hasta el final del archivo de configuración de la interfaz inalámbrica que creó con el siguiente contenido:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gateway — esta es la puerta de enlace predeterminada o la dirección de su punto de acceso original.
Destination — Dirección del servidor SOCKS.
Configurar wpa_supplicant para systemd-networkd
systemd-networkd usa wpa_supplicant para conectarse a un punto de acceso seguro. Al intentar "elevar" la interfaz inalámbrica, systemd-networkd inicia el servicio wpa_supplicant@имяDonde nombre es el nombre de la interfaz inalámbrica. Si no ha utilizado systemd-networkd antes de este punto, es probable que este servicio no esté disponible en su sistema.
Así que créelo con el comando:
systemctl enable wpa_supplicant@wlp6s0
solía wlp6s0 como nombre de su interfaz inalámbrica. Tu nombre puede ser diferente. Puedes reconocerlo con el comando. ip l.
Ahora el servicio creado. wpa_supplicant@wlp6s0 se iniciará cuando se "levante" la interfaz inalámbrica, sin embargo, a su vez, buscará la configuración de SSID y contraseña del punto de acceso en el archivo /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Por lo tanto, debes crearlo usando la utilidad. wpa_passphrase.
donde SSID es el nombre de su punto de acceso, contraseña es la contraseña y wlp6s0 — el nombre de su interfaz inalámbrica.
Inicialice la interfaz virtual para tun2socks
Cree un archivo para inicializar una nueva interfaz virtual en el sistema/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
Nombre es el nombre que systemd-networkd asignará a la futura interfaz virtual cuando se inicialice.
Tipo es un tipo de interfaz virtual. Por el nombre del servicio tun2socks, puedes adivinar que utiliza una interfaz como tun.
netdev es la extensión de los archivos que systemd-networkd Se utiliza para inicializar interfaces de red virtuales. La dirección y otras configuraciones de red para estas interfaces se especifican en .red-archivos.
Crea un archivo como este /etc/systemd/network/25-tun2socks.network con el siguiente contenido:
Name — el nombre de la interfaz virtual que especificó en netdev-archivo.
Address — Dirección IP que se asignará a la interfaz virtual. Debe estar en la misma red que la dirección que especificaste en el servicio tun2socks
Gateway — Dirección IP del “enrutador” tun2calcetines, que especificó al crear el servicio systemd.
Entonces la interfaz tun2calcetines tiene una dirección 172.16.1.2, y el servicio tun2calcetines - 172.16.1.1, es decir, es la puerta de entrada para todas las conexiones desde la interfaz virtual.
Configurar un punto de acceso virtual
Instalar dependencias:
apt install util-linux procps hostapd iw haveged
Descargar el repositorio crear_ap a tu coche:
git clone https://github.com/oblique/create_ap
Vaya a la carpeta del repositorio en su máquina:
cd create_ap
Instalar en el sistema:
make install
Aparecerá una configuración en su sistema. /etc/create_ap.conf. Estas son las principales opciones de edición:
GATEWAY=10.0.0.1 – es mejor convertirla en una subred reservada separada.
NO_DNS=1 - deshabilitar, ya que este parámetro será administrado por la interfaz virtual systemd-networkd.
NO_DNSMASQ=1 - apágalo por el mismo motivo.
WIFI_IFACE=wlp6s0 — interfaz inalámbrica para ordenador portátil.
INTERNET_IFACE=tun2socks - una interfaz virtual creada para tun2socks.
SSID=hostapd — nombre del punto de acceso virtual.
PASSPHRASE=12345678 - contraseña.
No olvides habilitar el servicio:
systemctl enable create_ap
Habilite el servidor DHCP en systemd-networkd
Oficina create_ap Inicializa una interfaz virtual en el sistema. ap0. En teoría, dnsmasq se bloquea en esta interfaz, pero ¿por qué instalar servicios adicionales si systemd-networkd contiene un servidor DHCP integrado?
Para habilitarlo definiremos la configuración de red del punto virtual. Para hacer esto, cree un archivo /etc/systemd/network/25-ap0.network con el siguiente contenido:
Después de que el servicio create_ap inicializa la interfaz virtual ap0, systemd-networkd le asignará automáticamente una dirección IP y habilitará el servidor DHCP.
Cuerdas EmitDNS=yes и DNS=10.0.0.1 transmitir la configuración del servidor DNS a los dispositivos conectados al punto de acceso.
Si no planea utilizar un servidor DNS local (en mi caso es dnscrypt-proxy), puede instalar DNS=10.0.0.1 в DNS=192.168.1.1Donde 192.168.1.1 — la dirección de su puerta de enlace original. Luego, las solicitudes de DNS para su host y red local pasarán sin cifrar a través de los servidores del proveedor.
EmitNTP=yes и NTP=192.168.1.1 transferir la configuración NTP.
Lo mismo ocurre con la línea NTP=10.0.0.1.
Instalar y configurar el servidor NTP
Instalar en el sistema:
apt install ntp
Editar la configuración /etc/ntp.conf. Comente las direcciones de los grupos estándar:
Agregue direcciones de servidores públicos, por ejemplo Google Public NTP:
server time1.google.com ibrust
server time2.google.com ibrust
server time3.google.com ibrust
server time4.google.com ibrust
Proporcione acceso al servidor a los clientes de su red:
restrict 10.0.0.0 mask 255.255.255.0
Habilite la transmisión a su red:
broadcast 10.0.0.255
Finalmente, agregue las direcciones de estos servidores a la tabla de enrutamiento estático. Para hacer esto, abra el archivo de configuración de la interfaz inalámbrica. /etc/systemd/network/25-wlp6s0.network y agregar al final de la sección Route.
Puede averiguar las direcciones de sus servidores NTP utilizando la utilidad host следующим обрахом:
host time1.google.com
Instale dnscrypt-proxy, elimine anuncios y oculte el tráfico DNS de su proveedor
apt install dnscrypt-proxy
Para atender consultas DNS del host y de la red local, edite el socket /lib/systemd/system/dnscrypt-proxy.socket. Cambie las siguientes líneas:
ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53
Reiniciar systemd:
systemctl daemon-reload
Editar la configuración /etc/dnscrypt-proxy/dnscrypt-proxy.toml:
server_names = ['adguard-dns']
Para enrutar conexiones dnscrypt-proxy a través de tun2socks, agregue lo siguiente:
force_tcp = true
Editar la configuración /etc/resolv.conf, que le dice al servidor DNS al host.
nameserver 127.0.0.1
nameserver 192.168.1.1
La primera línea permite el uso de dnscrypt-proxy, la segunda línea usa la puerta de enlace original en caso de que el servidor dnscrypt-proxy no esté disponible.
Después de reiniciar o reiniciar, tendrá un segundo punto de acceso que enruta el host y los dispositivos LAN a SOCKS.
Así es como se ve la salida ip a computadora 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
Como resultado,
El proveedor solo ve la conexión cifrada a su servidor SOCKS, lo que significa que no ve nada.
Y, sin embargo, ve sus solicitudes NTP; para evitarlo, elimine las rutas estáticas para los servidores NTP. Sin embargo, no es seguro que su servidor SOCKS admita el protocolo NTP.
Muleta vista en Debain 10
Si intenta reiniciar el servicio de red desde la consola, fallará con un error. Esto se debe al hecho de que parte de él en forma de interfaz virtual está vinculado al servicio tun2socks, lo que significa que se utiliza. Para reiniciar el servicio de red, primero debe detener el servicio tun2socks. Pero creo que si lees hasta el final, ¡definitivamente esto no será un problema para ti!