Construindo um roteador em SOCKS em um laptop com Debian 10
Por um ano (ou dois) adiei a publicação deste artigo pelo motivo principal - já havia publicado dois artigos nos quais descrevia o processo de criação de um roteador em SOCKS a partir de um laptop muito comum com Debian.
No entanto, desde então a versão estável do Debian foi atualizada para Buster, um número suficiente de pessoas me contatou em particular pedindo ajuda com a configuração, o que significa que meus artigos anteriores não são exaustivos. Bem, eu mesmo adivinhei que os métodos descritos neles não revelam totalmente todos os meandros da configuração do Linux para roteamento em SOCKS. Além disso, eles foram escritos para Debian Stretch, e após atualizar para Buster, no sistema init do systemd, notei pequenas mudanças na interação dos serviços. E nos próprios artigos não usei o systemd-networkd, embora seja mais adequado para configurações de rede complexas.
Além das alterações acima, os seguintes serviços foram adicionados à minha configuração: hostapd - serviço para virtualização de pontos de acesso, ntp para sincronizar a hora dos clientes da rede local, proxy dnscrypt criptografar conexões via DNS e desabilitar publicidade em clientes da rede local, e também, como mencionei anteriormente, Systemd-Networkd para configurar interfaces de rede.
Aqui está um diagrama de blocos simples da estrutura interna desse roteador.
Então, deixe-me lembrá-lo quais são os objetivos desta série de artigos:
Roteie todas as conexões do sistema operacional para SOCKS, bem como conexões de todos os dispositivos na mesma rede que o laptop.
O laptop, no meu caso, deve permanecer totalmente móvel. Ou seja, dar a oportunidade de utilizar o ambiente desktop e não ficar preso a um local físico.
O último ponto implica conexão e roteamento apenas através da interface sem fio integrada.
Bem, e claro, a criação de um guia completo, bem como uma análise das tecnologias relevantes, com o melhor do meu modesto conhecimento.
O que será abordado neste artigo:
git - baixar repositórios de projetos tun2socksnecessário para rotear o tráfego TCP para SOCKS, e criar_ap — um script para automatizar a configuração de um ponto de acesso virtual usando hostapd.
tun2socks — crie e instale o serviço systemd no sistema.
Systemd-Networkd — configurar interfaces virtuais e sem fio, tabelas de roteamento estático e redirecionamento de pacotes.
criar_ap — instale o serviço systemd no sistema, configure e inicie um ponto de acesso virtual.
Etapas opcionais:
ntp — instalar e configurar um servidor para sincronizar a hora em clientes de ponto de acesso virtual.
proxy dnscrypt — criptografaremos as solicitações de DNS, encaminharemos para SOCKS e desabilitaremos domínios de publicidade para a rede local.
Por que tudo isso?
Esta é uma das maneiras de proteger conexões TCP em uma rede local. A principal vantagem é que todas as conexões são feitas em SOCKS, a menos que uma rota estática seja construída para elas através do gateway original. Isso significa que você não precisa especificar as configurações do servidor SOCKS para programas individuais ou clientes na rede local - todos eles vão para o SOCKS por padrão, já que é o gateway padrão até que indiquemos o contrário.
Essencialmente, adicionamos um segundo roteador de criptografia como um laptop na frente do roteador original e usamos a conexão de Internet do roteador original para as solicitações SOCKS já criptografadas do laptop, que por sua vez roteia e criptografa as solicitações dos clientes da LAN.
Do ponto de vista do provedor, estamos constantemente conectados a um servidor com tráfego criptografado.
Assim, todos os dispositivos estão conectados ao ponto de acesso virtual do laptop.
Instale tun2socks no sistema
Desde que sua máquina tenha internet, baixe todas as ferramentas necessárias.
apt update
apt install git make cmake
Baixe o pacote badvpn
git clone https://github.com/ambrop72/badvpn
Uma pasta aparecerá em seu sistema badvpn. Crie uma pasta separada para a compilação
NetworkManager-espera-online é um serviço que espera por uma conexão de rede funcional antes que o systemd continue a iniciar outros serviços que dependem da presença de uma rede. Estamos desabilitando-o quando mudamos para o análogo systemd-networkd.
Vamos habilitá-lo imediatamente:
systemctl enable systemd-networkd-wait-online
Configure a interface de rede sem fio
Crie um arquivo de configuração systemd-networkd para a interface de rede sem fio /etc/systemd/network/25-wlp6s0.network.
Nome é o nome da sua interface sem fio. Identifique-o com o comando ip a.
IPForward - uma diretiva que permite o redirecionamento de pacotes em uma interface de rede.
Endereço é responsável por atribuir um endereço IP à interface sem fio. Nós especificamos isso estaticamente porque com a diretiva equivalente DHCP=yes, systemd-networkd cria um gateway padrão no sistema. Assim, todo o tráfego passará pelo gateway original e não pela futura interface virtual em uma sub-rede diferente. Você pode verificar o gateway padrão atual com o comando ip r
Crie uma rota estática para o servidor SOCKS remoto
Se o seu servidor SOCKS não for local, mas remoto, você precisará criar uma rota estática para ele. Para fazer isso, adicione uma seção Route ao final do arquivo de configuração da interface sem fio que você criou com o seguinte conteúdo:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gateway — este é o gateway padrão ou o endereço do seu ponto de acesso original.
Destination — Endereço do servidor SOCKS.
Configure wpa_supplicant para systemd-networkd
systemd-networkd usa wpa_supplicant para conectar-se a um ponto de acesso seguro. Ao tentar "aumentar" a interface wireless, o systemd-networkd inicia o serviço wpa_supplicant@имяOnde nome é o nome da interface sem fio. Se você não usou o systemd-networkd antes deste ponto, provavelmente este serviço está faltando no seu sistema.
Então crie-o com o comando:
systemctl enable wpa_supplicant@wlp6s0
eu usei wlp6s0 como o nome de sua interface sem fio. Seu nome pode ser diferente. Você pode reconhecê-lo com o comando ip l.
Agora o serviço criado wpa_supplicant@wlp6s0 será lançado quando a interface wireless for “levantada”, porém, por sua vez, procurará as configurações de SSID e senha do ponto de acesso no arquivo /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Portanto, você precisa criá-lo usando o utilitário wpa_passphrase.
onde SSID é o nome do seu ponto de acesso, senha é a senha e wlp6s0 — o nome da sua interface sem fio.
Inicialize a interface virtual para tun2socks
Crie um arquivo para inicializar uma nova interface virtual no sistema/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
Nome é o nome que o systemd-networkd atribuirá à futura interface virtual quando ela for inicializada.
Tipo é um tipo de interface virtual. Com base no nome do serviço tun2socks, você pode adivinhar que ele usa uma interface como tun.
netdev é a extensão dos arquivos que systemd-networkd Usado para inicializar interfaces de rede virtuais. O endereço e outras configurações de rede para essas interfaces são especificados em .rede-arquivos.
Crie um arquivo como este /etc/systemd/network/25-tun2socks.network com o seguinte conteúdo:
Name — o nome da interface virtual que você especificou em netdev-arquivo.
Address — Endereço IP que será atribuído à interface virtual. Deve estar na mesma rede que o endereço especificado no serviço tun2socks
Gateway — Endereço IP do “roteador” tun2socks, que você especificou ao criar o serviço systemd.
Então a interface tun2socks tem um endereço 172.16.1.2e o serviço tun2socks - 172.16.1.1, ou seja, é o gateway para todas as conexões da interface virtual.
Configure um ponto de acesso virtual
Instale dependências:
apt install util-linux procps hostapd iw haveged
Baixe o repositório criar_ap para o seu carro:
git clone https://github.com/oblique/create_ap
Vá para a pasta do repositório em sua máquina:
cd create_ap
Instale no sistema:
make install
Uma configuração aparecerá em seu sistema /etc/create_ap.conf. Aqui estão as principais opções de edição:
GATEWAY=10.0.0.1 — é melhor torná-la uma sub-rede reservada separada.
NO_DNS=1 - desabilitar, pois este parâmetro será gerenciado pela interface virtual systemd-networkd.
NO_DNSMASQ=1 - desligue-o pelo mesmo motivo.
WIFI_IFACE=wlp6s0 — interface sem fio para laptop.
INTERNET_IFACE=tun2socks - uma interface virtual criada para tun2socks.
SSID=hostapd — nome do ponto de acesso virtual.
PASSPHRASE=12345678 - senha.
Não se esqueça de ativar o serviço:
systemctl enable create_ap
Habilite o servidor DHCP em systemd-networkd
Serviço create_ap inicializa uma interface virtual no sistema ap0. Em teoria, o dnsmasq depende dessa interface, mas por que instalar serviços extras se o systemd-networkd contém um servidor DHCP integrado?
Para habilitá-lo, definiremos as configurações de rede do ponto virtual. Para fazer isso, crie um arquivo /etc/systemd/network/25-ap0.network com o seguinte conteúdo:
Após o serviço create_ap inicializar a interface virtual ap0, o systemd-networkd atribuirá automaticamente um endereço IP e ativará o servidor DHCP.
Cordas EmitDNS=yes и DNS=10.0.0.1 transmitir as configurações do servidor DNS para dispositivos conectados ao ponto de acesso.
Se você não planeja usar um servidor DNS local - no meu caso é dnscrypt-proxy - você pode instalar DNS=10.0.0.1 в DNS=192.168.1.1Onde 192.168.1.1 — o endereço do seu gateway original. Então, as solicitações de DNS para seu host e rede local não serão criptografadas pelos servidores do provedor.
EmitNTP=yes и NTP=192.168.1.1 transferir configurações NTP.
O mesmo vale para a linha NTP=10.0.0.1.
Instalar e configurar o servidor NTP
Instale no sistema:
apt install ntp
Edite a configuração /etc/ntp.conf. Comente os endereços dos pools padrão:
Adicione endereços de servidores públicos, 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
Forneça acesso ao servidor aos clientes em sua rede:
restrict 10.0.0.0 mask 255.255.255.0
Habilite a transmissão para sua rede:
broadcast 10.0.0.255
Finalmente, adicione os endereços desses servidores à tabela de roteamento estático. Para fazer isso, abra o arquivo de configuração da interface wireless /etc/systemd/network/25-wlp6s0.network e adicione ao final da seção Route.
Após uma reinicialização ou reinicialização, você terá um segundo ponto de acesso que roteia o host e os dispositivos LAN para o SOCKS.
Esta é a aparência da saída ip a notebook 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 vê apenas a conexão criptografada com o seu servidor SOCKS, o que significa que não vê nada.
E ainda assim ele vê suas solicitações NTP, para evitar isso, remova rotas estáticas para servidores NTP. No entanto, não é certo que o seu servidor SOCKS permita o protocolo NTP.
Muleta vista em Debain 10
Se você tentar reiniciar o serviço de rede a partir do console, ocorrerá uma falha e um erro. Isso se deve ao fato de que parte dela em forma de interface virtual está vinculada ao serviço tun2socks, o que significa que é utilizado. Para reiniciar o serviço de rede, você deve primeiro interromper o serviço tun2socks. Mas acho que se você leu até o fim, isso definitivamente não é um problema para você!