Um tailnet em que todo dispositivo alcança todos os outros já é útil. Três acréscimos o transformam de um conjunto de túneis em uma rede de verdade, e os três compartilham uma característica que costuma confundir as pessoas: o cliente anuncia uma capacidade, e o servidor precisa aprová-la. Uma rota que é anunciada mas não aprovada simplesmente não existe, silenciosamente, e o sintoma é conseguir dar ping no roteador, mas em nada que esteja atrás dele.
Um roteador de sub-rede — coloque uma LAN inteira no tailnet. Uma máquina em uma rede doméstica ou de escritório anuncia a faixa de endereços da rede; todo outro dispositivo passa então a alcançar as impressoras, o NAS e as interfaces de gerenciamento atrás dela sem precisar instalar mais nada ali. Ative o encaminhamento no kernel primeiro, ou os pacotes param no roteador sem nenhuma mensagem de erro.
# On the machine that sits inside the LAN:
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-ts.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-ts.conf
sudo sysctl -p /etc/sysctl.d/99-ts.conf
sudo tailscale up --login-server https://vpn.example.com \
--advertise-routes=192.168.1.0/24 --accept-routes
# On the control server — approve it, or it does not exist.
# The subcommand moved between releases; check `hs nodes --help` first.
hs nodes list
hs nodes approve-routes --identifier 3 --routes 192.168.1.0/24
Um nó de saída — envie tudo para fora através do VPS. O mesmo mecanismo com uma rota mais ampla: um dispositivo que se anuncia como nó de saída se oferece para carregar toda a conexão de internet de outro dispositivo. Em uma rede não confiável de café ou hotel, é exatamente isso que você quer, e é a coisa mais próxima de uma VPN pessoal que existe neste guia.
# On the VPS that will do the exiting (forwarding must be on, as above):
sudo tailscale up --login-server https://vpn.example.com --advertise-exit-node
# Approve it on the control server, then on the laptop:
tailscale set --exit-node=100.64.0.1 --exit-node-allow-lan-access
tailscale set --exit-node= # turn it off again
Um nó de saída não é uma VPN comercial, e você não deve se vender essa ideia. O endereço é só seu e é estável, o que é excelente contra o Wi-Fi do café e inútil contra a correlação de longo prazo entre sites — essa troca está detalhada no guia principal. Note também que é possível rodar o nó de saída em um segundo VPS, mais barato, e manter o servidor de controle totalmente livre de tráfego encaminhado.
Regras de acesso — escreva-as antes que a segunda pessoa entre. A política padrão é permitir tudo, o que está certo para um tailnet de uma pessoa só e errado no instante em que mais alguém entra nele. A política é um pequeno documento HuJSON: grupos de usuários, tags para máquinas e uma lista de regras que dizem quais origens podem alcançar quais destinos em quais portas. Aponte a configuração para o arquivo, mantenha o arquivo sob controle de versão e recarregue após cada edição.
{
"groups": {
"group:admin": ["alice"],
"group:contractor":["bob"]
},
"tagOwners": {
"tag:server": ["group:admin"],
"tag:exit": ["group:admin"]
},
"acls": [
// Admins reach everything.
{ "action": "accept", "src": ["group:admin"], "dst": ["*:*"] },
// The contractor reaches one machine, on two ports, and nothing else.
{ "action": "accept", "src": ["group:contractor"],
"dst": ["tag:server:22,443"] }
],
"autoApprovers": {
"routes": { "192.168.1.0/24": ["tag:server"] },
"exitNode": ["tag:exit"]
}
}
Duas observações sobre esse arquivo. A linguagem de política é do Tailscale, e o Headscale implementa um subconjunto grande e crescente dela, não tudo — verifique a documentação da sua versão antes de confiar em uma regra exótica. E onde a política mora também já mudou: versões mais antigas indicavam um caminho na configuração de nível superior, as mais novas a agrupam sob uma seção de política com um modo que também pode manter as regras no banco de dados. Ambas estão documentadas; a que importa é a que a sua versão fixada traz.
MagicDNS — nomes curtos, e o seu próprio resolvedor em todo lugar. Com o MagicDNS ativado, todo dispositivo responde por um nome curto dentro do sufixo que você escolheu na etapa 02, então ssh nas funciona de qualquer lugar sem precisar de um arquivo hosts. A segunda metade é a interessante: o servidor de controle também envia uma lista de servidores de nome para cada cliente, o que significa que o resolvedor que você construiu no guia de resolvedor de DNS privado pode atender o seu celular em dados móveis — filtrando, fazendo cache e sem registrar nada — enquanto escuta em um endereço do tailnet que não é alcançável pela internet de jeito nenhum.
dns:
magic_dns: true
base_domain: ts.example.com
override_local_dns: true # beat whatever DHCP handed the device
nameservers:
global:
- 100.64.0.5 # your resolver, on the tailnet