Construír un enrutador en SOCKS nun portátil con Debian 10
Durante un ano enteiro (ou dous) posterguei a publicación deste artigo polo motivo principal: xa publicara dous artigos nos que describía o proceso de creación dun enrutador en SOCKS desde un portátil moi común con Debian.
Porén, desde entón a versión estable de Debian foi actualizada a Buster, un número suficiente de persoas púxose en contacto comigo de xeito privado para pedir axuda para a configuración, o que significa que os meus artigos anteriores non son exhaustivos. Ben, eu mesmo supuxín que os métodos descritos neles non revelan completamente todas as complejidades de configurar Linux para o enrutamento en SOCKS. Ademais, están escritos para Debian Stretch, e despois de actualizar a Buster, no sistema systemd init, notei pequenos cambios na interacción dos servizos. E nos propios artigos, non usei systemd-networkd, aínda que é o máis adecuado para configuracións de rede complexas.
Ademais dos cambios anteriores, engadíronse os seguintes servizos á miña configuración: hostapd - servizo de virtualización de puntos de acceso, ntp para sincronizar a hora dos clientes da rede local, dnscrypt-proxy para cifrar conexións a través de DNS e desactivar a publicidade nos clientes da rede local, e tamén, como mencionei anteriormente, systemd-networkd para configurar interfaces de rede.
Aquí tes un diagrama de bloques sinxelo da estrutura interna deste enrutador.
Entón, permíteme recordar cales son os obxectivos desta serie de artigos:
Encamiña todas as conexións do sistema operativo a SOCKS, así como as conexións de todos os dispositivos da mesma rede que o portátil.
O portátil no meu caso debería permanecer completamente móbil. É dicir, ofrecer a oportunidade de usar o ambiente de escritorio e non estar ligado a unha localización física.
O último punto implica conexión e enrutamento só a través da interface sen fíos integrada.
Ben, e por suposto, a creación dunha guía completa, así como unha análise das tecnoloxías relevantes segundo o meu modesto coñecemento.
O que se tratará neste artigo:
ir - descargar repositorios de proxectos tun2socksnecesario para enrutar o tráfico TCP a SOCKS e crear_ap — un script para automatizar a configuración dun punto de acceso virtual usando hostapd.
tun2socks — construír e instalar o servizo systemd no sistema.
systemd-networkd — configurar interfaces sen fíos e virtuais, táboas de enrutamento estáticas e redirección de paquetes.
crear_ap — instale o servizo systemd no sistema, configure e inicie un punto de acceso virtual.
Pasos opcionais:
ntp — instale e configure un servidor para sincronizar o tempo en clientes de puntos de acceso virtuais.
dnscrypt-proxy — cifraremos as solicitudes de DNS, encamiñaremos a SOCKS e desactivaremos os dominios publicitarios para a rede local.
Para que serve todo isto?
Esta é unha das formas de protexer as conexións TCP nunha rede local. A principal vantaxe é que todas as conexións fanse en SOCKS, a non ser que se constrúa unha ruta estática para elas a través da pasarela orixinal. Isto significa que non precisa especificar a configuración do servidor SOCKS nin para programas individuais nin para clientes da rede local; todos eles van a SOCKS por defecto, xa que é a pasarela predeterminada ata que indiquemos o contrario.
Esencialmente, engadimos un segundo enrutador de cifrado como un portátil diante do enrutador orixinal e utilizamos a conexión a Internet do enrutador orixinal para as solicitudes SOCKS xa cifradas do portátil, que á súa vez envía e cifra as solicitudes dos clientes LAN.
Desde o punto de vista do provedor, estamos constantemente conectados a un servidor con tráfico cifrado.
En consecuencia, todos os dispositivos están conectados ao punto de acceso virtual do portátil.
Instala tun2socks no sistema
Sempre que a túa máquina teña internet, descarga todas as ferramentas necesarias.
apt update
apt install git make cmake
Descarga o paquete badvpn
git clone https://github.com/ambrop72/badvpn
Aparecerá un cartafol no seu sistema badvpn. Crea un cartafol separado para a compilación
Network Manager-espera-en liña é un servizo que espera unha conexión de rede que funcione antes de que systemd continúe iniciando outros servizos que dependen da presenza dunha rede. Desactivámolo mentres cambiamos ao analóxico systemd-networkd.
Habilitamos de inmediato:
systemctl enable systemd-networkd-wait-online
Configure a interface de rede sen fíos
Cree un ficheiro de configuración systemd-networkd para a interface de rede sen fíos /etc/systemd/network/25-wlp6s0.network.
nome é o nome da súa interface sen fíos. Identifícao co comando ip a.
IPForward - unha directiva que permite a redirección de paquetes nunha interface de rede.
dirección é responsable de asignar un enderezo IP á interface sen fíos. Especificámolo de forma estática porque coa directiva equivalente DHCP=yes, systemd-networkd crea unha pasarela predeterminada no sistema. Entón todo o tráfico pasará pola pasarela orixinal e non pola futura interface virtual nunha subrede diferente. Podes comprobar a pasarela predeterminada actual co comando ip r
Cree unha ruta estática para o servidor remoto SOCKS
Se o teu servidor SOCKS non é local, senón remoto, debes crear unha ruta estática para el. Para iso, engade unha sección Route ata o final do ficheiro de configuración da interface sen fíos que creou co seguinte contido:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gateway — esta é a pasarela predeterminada ou o enderezo do seu punto de acceso orixinal.
Destination — Enderezo do servidor SOCKS.
Configure wpa_supplicant para systemd-networkd
systemd-networkd usa wpa_supplicant para conectarse a un punto de acceso seguro. Ao tentar "elevar" a interface sen fíos, systemd-networkd inicia o servizo wpa_supplicant@имяonde nome é o nome da interface sen fíos. Se non utilizou systemd-networkd antes deste punto, probablemente este servizo falte no seu sistema.
Entón créao co comando:
systemctl enable wpa_supplicant@wlp6s0
usei wlp6s0 como o nome da súa interface sen fíos. O teu nome pode ser diferente. Podes recoñecelo co comando ip l.
Agora o servizo creado wpa_supplicant@wlp6s0 lanzarase cando a interface sen fíos "se eleve", con todo, buscará a configuración do SSID e do contrasinal do punto de acceso no ficheiro /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Polo tanto, cómpre crealo usando a utilidade wpa_passphrase.
onde SSID é o nome do seu punto de acceso, o contrasinal é o contrasinal e wlp6s0 — o nome da súa interface sen fíos.
Inicializa a interface virtual para tun2socks
Crea un ficheiro para inicializar unha nova interface virtual no sistema/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
nome é o nome que systemd-networkd asignará á futura interface virtual cando se inicialice.
Neno é un tipo de interface virtual. Polo nome do servizo tun2socks, podes adiviñar que usa unha interface como tun.
netdev é a extensión dos ficheiros que systemd-networkd Utilízase para inicializar interfaces de rede virtuais. O enderezo e outros axustes de rede para estas interfaces especifícanse en .red-arquivos.
Crea un ficheiro coma este /etc/systemd/network/25-tun2socks.network co seguinte contido:
Name — o nome da interface virtual que especificaches netdev- arquivo.
Address — Enderezo IP que se asignará á interface virtual. Debe estar na mesma rede que o enderezo que especificaches no servizo tun2socks
Gateway - Enderezo IP do "router" tun2socks, que especificaches ao crear o servizo systemd.
Entón, a interface tun2socks ten un enderezo 172.16.1.2, e o servizo tun2socks - 172.16.1.1, é dicir, é a porta de entrada para todas as conexións desde a interface virtual.
Configurar un punto de acceso virtual
Instalar dependencias:
apt install util-linux procps hostapd iw haveged
Descarga o repositorio crear_ap ao teu coche:
git clone https://github.com/oblique/create_ap
Vaia ao cartafol do repositorio da súa máquina:
cd create_ap
Instalar no sistema:
make install
Aparecerá unha configuración no seu sistema /etc/create_ap.conf. Aquí están as principais opcións de edición:
GATEWAY=10.0.0.1 — é mellor que sexa unha subrede reservada separada.
NO_DNS=1 - desactivar, xa que este parámetro será xestionado pola interface virtual systemd-networkd.
NO_DNSMASQ=1 - apágalo polo mesmo motivo.
WIFI_IFACE=wlp6s0 - Interface sen fíos do portátil.
INTERNET_IFACE=tun2socks - unha interface virtual creada para tun2socks.
SSID=hostapd — nome do punto de acceso virtual.
PASSPHRASE=12345678 - contrasinal.
Non esquezas activar o servizo:
systemctl enable create_ap
Activa o servidor DHCP en systemd-networkd
Servizo create_ap inicializa unha interface virtual no sistema ap0. En teoría, dnsmasq colócase nesta interface, pero por que instalar servizos adicionais se systemd-networkd contén un servidor DHCP incorporado?
Para habilitalo, definiremos a configuración de rede para o punto virtual. Para iso, cree un ficheiro /etc/systemd/network/25-ap0.network co seguinte contido:
Despois de que o servizo create_ap inicialice a interface virtual ap0, systemd-networkd asignaralle automaticamente un enderezo IP e activará o servidor DHCP.
Cordas EmitDNS=yes и DNS=10.0.0.1 transmitir a configuración do servidor DNS aos dispositivos conectados ao punto de acceso.
Se non pensas usar un servidor DNS local, no meu caso é dnscrypt-proxy, podes instalar DNS=10.0.0.1 в DNS=192.168.1.1onde 192.168.1.1 — o enderezo da súa pasarela orixinal. A continuación, as solicitudes de DNS para o teu anfitrión e rede local non se cifrarán a través dos servidores do provedor.
EmitNTP=yes и NTP=192.168.1.1 transferir a configuración NTP.
O mesmo pasa coa liña NTP=10.0.0.1.
Instalar e configurar o servidor NTP
Instalar no sistema:
apt install ntp
Edita a configuración /etc/ntp.conf. Comenta os enderezos dos grupos estándar:
Engade enderezos de servidor público, por exemplo 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 ao servidor aos clientes da súa rede:
restrict 10.0.0.0 mask 255.255.255.0
Activa a transmisión á túa rede:
broadcast 10.0.0.255
Finalmente, engade os enderezos destes servidores á táboa de enrutamento estático. Para iso, abra o ficheiro de configuración da interface sen fíos /etc/systemd/network/25-wlp6s0.network e engadir ao final da sección Route.
Despois dun reinicio ou reinicio, terá un segundo punto de acceso que encamiña o host e os dispositivos LAN a SOCKS.
Este é o aspecto da saída 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
Como resultado,
O provedor só ve a conexión cifrada co teu servidor SOCKS, o que significa que non ve nada.
E aínda así ve as túas solicitudes NTP, para evitar isto, elimina as rutas estáticas para os servidores NTP. Non obstante, non é seguro que o seu servidor SOCKS permita o protocolo NTP.
Muleta vista en Debain 10
Se tentas reiniciar o servizo de rede desde a consola, fallará cun erro. Isto débese a que parte dela en forma de interface virtual está ligada ao servizo tun2socks, o que significa que se usa. Para reiniciar o servizo de rede, primeiro debes deter o servizo tun2socks. Pero, creo que, se le ata o final, definitivamente non é un problema para ti!