| name | deploying-tailscale-for-zero-trust-vpn |
| description | 部署并配置 Tailscale 作为基于 WireGuard 的零信任网状 VPN,具备身份感知访问控制、ACL 和出口节点,实现安全的点对点连接。 |
| domain | cybersecurity |
| subdomain | zero-trust-architecture |
| tags | ["zero-trust","tailscale","wireguard","mesh-vpn","ztna","peer-to-peer","acl","identity-aware","headscale"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
为零信任 VPN 部署 Tailscale
概述
Tailscale 是一种基于 WireGuard 构建的零信任网状 VPN,无需传统 VPN 服务器或复杂网络配置,即可在设备之间创建加密的点对点连接。Tailscale 网络(tailnet)中的每个连接都使用 WireGuard 的 Noise 协议框架和 Curve25519 密钥交换进行端到端加密。Tailscale 通过身份提供商认证每个连接请求、执行细粒度访问控制列表(ACL),以及支持出口节点(exit node)、子网路由器、MagicDNS 和 Tailscale SSH 等功能来实现零信任网络。对于偏好自托管基础设施的组织,Headscale 提供了 Tailscale 控制服务器的开源实现。
前置条件
- 身份提供商(Okta、Azure AD、Google Workspace、GitHub 或兼容 OIDC 的提供商)
- 运行受支持操作系统的设备(Linux、Windows、macOS、iOS、Android、FreeBSD)
- 配置 DNS 和防火墙规则的管理员权限
- 了解 WireGuard 协议基础知识
- 子网路由需求的网络规划文档
架构
Tailscale 协调服务器
(或自托管 Headscale)
|
密钥分发
& NAT 穿透
|
+-----------------+-----------------+
| | |
+----+----+ +----+----+ +----+----+
| 节点 A |<---->| 节点 B |<---->| 节点 C |
| (Linux) | | (macOS) | |(Windows)|
+---------+ +---------+ +---------+
WireGuard WireGuard WireGuard
加密 P2P 隧道 加密 P2P 隧道 加密 P2P 隧道
每个节点与其他所有节点直接连接。
仅在直连 P2P 失败时使用 DERP 中继服务器。
安装和设置
Linux 安装
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale status
tailscale ip -4
tailscale ip -6
Windows / macOS 安装
brew install --cask tailscale
Docker 部署
version: '3.8'
services:
tailscale:
image: tailscale/tailscale:latest
container_name: tailscale
hostname: my-service
environment:
- TS_AUTHKEY=tskey-auth-xxxxx
- TS_STATE_DIR=/var/lib/tailscale
- TS_EXTRA_ARGS=--advertise-tags=tag:container
volumes:
- tailscale-state:/var/lib/tailscale
- /dev/net/tun:/dev/net/tun
cap_add:
- net_admin
- sys_module
restart: unless-stopped
volumes:
tailscale-state:
Kubernetes 部署
apiVersion: v1
kind: Secret
metadata:
name: tailscale-auth
namespace: tailscale
type: Opaque
stringData:
TS_AUTHKEY: "tskey-auth-xxxxx"
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: tailscale
namespace: tailscale
spec:
selector:
matchLabels:
app: tailscale
template:
metadata:
labels:
app: tailscale
spec:
containers:
- name: tailscale
image: tailscale/tailscale:latest
env:
- name: TS_AUTHKEY
valueFrom:
secretKeyRef:
name: tailscale-auth
key: TS_AUTHKEY
- name: TS_KUBE_SECRET
[]
访问控制列表(ACL)
Tailscale ACL 使用声明式 JSON 格式定义 tailnet 内谁可以访问什么。默认策略为拒绝所有,从设计上实现零信任。
{
"acls": [
{
"action": "accept",
"src": ["group:engineering"],
"dst": ["tag:dev-server:*"]
},
{
"action": "accept",
"src": ["group:sre"],
"dst": ["tag:production:22,443,8080"]
},
{
"action": "accept",
"src": ["tag:backend"],
"dst": [
出口节点和子网路由
配置出口节点
sudo tailscale up --advertise-exit-node
sudo tailscale up --exit-node=<exit-node-ip>
curl ifconfig.me
子网路由器配置
sudo tailscale up --advertise-routes=10.0.0.0/24,192.168.1.0/24
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sudo tailscale up --accept-routes
Tailscale SSH(零信任 SSH)
Tailscale SSH 以基于身份的访问取代传统 SSH 密钥管理。
sudo tailscale up --ssh
ssh user@hostname
MagicDNS 配置
ping my-server
使用 Headscale 自托管
wget https://github.com/juanfont/headscale/releases/latest/download/headscale_linux_amd64
chmod +x headscale_linux_amd64
sudo mv headscale_linux_amd64 /usr/local/bin/headscale
sudo mkdir -p /etc/headscale
sudo headscale generate config > /etc/headscale/config.yaml
sudo headscale serve
headscale users create myorg
headscale preauthkeys create --user myorg --reusable --expiration 24h
tailscale up --login-server https://headscale.example.com
安全加固
密钥到期和轮换
sudo tailscale up --authkey=tskey-auth-xxxxx
设备授权
{
"nodeAttrs": [
{
"target": ["autogroup:members"],
"attr": [
"mullvad:deny",
"funnel:deny"
]
}
],
"autoApprovers": {
"routes": {
"10.0.0.0/24": ["group:sre"],
"192.168.0.0/16": ["group:sre"]
},
"exitNode": ["group:sre"]
}
}
网络锁(Tailnet Lock)
tailscale lock init
tailscale lock add nodekey:xxxxx
监控和可观测性
tailscale status --json | jq '.Peer | to_entries[] | {name: .value.HostName, online: .value.Online, os: .value.OS}'
tailscale ping <peer-ip>
tailscale netcheck
集成模式
服务网格集成
CI/CD 流水线集成
export TS_AUTHKEY=tskey-auth-xxxxx-ephemeral
tailscale up --authkey=$TS_AUTHKEY --hostname=ci-runner-$CI_JOB_ID
参考资料