Configuração de Servidor Derp Autônomo com Tailscale sem Docker ou Domínio

Para reduzir latência e melhorar a estabilidade em redes Tailscale na China continental, é recomendável implantar um servidor Derp próprio — especialmetne porque os servidores públicos da Tailscale estão fora do continente e frequentemente congestionados.

Instalação do Ambiente Go

Atualize o sistema e instale dependências básicas:

apt update && apt upgrade -y
apt install -y wget git openssl curl

Baixe e instale a versão mais recente do Go (exemplo com 1.23.3):

wget https://go.dev/dl/go1.23.3.linux-amd64.tar.gz
rm -rf /usr/local/go
tar -C /usr/local -xzf go1.23.3.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
source /etc/profile
go version

Compilação e Configuração do Derp

Instale o Derp via Go:

go install tailscale.com/cmd/derper@latest

Se enfrentar lentidão, configure um proxy Go alternativo:

go env -w GOPROXY=https://goproxy.cn,direct

Gerenciamento de Certificado Sem Domínio

Como não há domínio, gere um certificado autosasinado para derp.local:

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
  -keyout /etc/derp/derp.local.key -out /etc/derp/derp.local.crt \
  -subj "/CN=derp.local" -addext "subjectAltName=DNS:derp.local"

Serviço Systemd para Derp

Crie o serviço systemd para iniciar automaticamente:

cat > /etc/systemd/system/derp.service <<eof :33445="" after="network.target" daemon-reload="" derp="" derp.local="" description="Tailscale" enable="" eof="" execstart="/root/go/bin/derper" manual="" relay="" restart="always" restartpreventexitstatus="1" start="" systemctl="" user="root" wantedby="multi-user.target"></eof>

Abra as portas TCP 33445 e UDP 3478 no firewall do servidor.

Validação do Serviço

Acesse via navegador: https://[IP_DO_SERVIDOR]:33445. Ignore avisos de certificado inválido.

Integração com Tailscale

Instale o cliente Tailscale:

curl -fsSL https://tailscale.com/install.sh | sh
tailscale up

Verifique a rota atual:

tailscale netcheck

Configuração Avançada com Headscale (Opcional)

Se usar Headscale, configure o arquivo config.yaml para apontar ao seu Derp. Utilize JSON em vez de YAML se enfrentar problemas de compatibilidade.

Exemplo de configuração via Nginx como proxy reverso para /derp.json:

server {
    listen 80;
    server_name _;
    location /derp.json {
        alias /var/www/derp.json;
        default_type application/json;
    }
}

Conteúdo de /var/www/derp.json:

{
  "Regions": {
    "901": {
      "RegionID": 901,
      "RegionCode": "Local",
      "RegionName": "Meu Derp",
      "Nodes": [
        {
          "Name": "node1",
          "RegionID": 901,
          "DERPPort": 33445,
          "IPv4": "SEU_IP_AQUI",
          "InsecureForTests": true
        }
      ]
    }
  }
}

Proteção Contra Uso Não Autorizado

Adicione autenticação ao serviço Derp editando o arquivo /etc/systemd/system/derp.service:

ExecStart=/root/go/bin/derper ... --verify-clients

Reinicie o serviço após alterações:

systemctl daemon-reload
systemctl restart derp

Tags: tailscale derp Golang headscale Networking

Publicado em 7-29 17:47