出口节点
出口节点允许您将所有互联网流量通过特定的 Tailscale 设备路由,提供隐私保护和访问地理限制内容的能力。
什么是出口节点?
出口节点是一个特殊的 Tailscale 设备,充当您整个 tailnet 的"VPN 服务器":
- 所有流量通过出口节点发出
- 类似传统 VPN 的功能
- 可以访问地理限制内容
- 提供隐私保护
工作原理
您的设备 ────► 出口节点 ────► 互联网
│ │
│ │
100.x.x.x 公网IP使用场景
- 从公共 WiFi 安全上网
- 访问地理限制内容
- 绕过公司网络限制
- 统一的出口点
- 隐藏真实 IP 地址
设置出口节点
第一步:选择出口节点设备
选择一个设备作为出口节点:
- 云服务器(AWS、GCP、Azure)
- VPS(DigitalOcean、Linode)
- 家庭服务器
- Raspberry Pi
建议:
- 选择地理位置合适的设备
- 确保稳定的网络连接
- 有足够的带宽
第二步:配置为出口节点
在出口节点设备上运行:
bash
sudo tailscale up --advertise-exit-node第三步:批准出口节点
在管理控制台批准:
- 登录 Tailscale 管理控制台
- 找到出口节点设备
- 点击"..."菜单
- 选择"Approve exit node"
第四步:使用出口节点
在其他设备上使用出口节点:
bash
# 使用特定的出口节点
sudo tailscale up --exit-node=exit-node-name
# 或使用 IP 地址
sudo tailscale up --exit-node=100.100.100.100第五步:验证
检查是否在使用出口节点:
bash
tailscale status输出会显示:
100.100.100.100 exit-node alice@example.com linux -
exit node: using
您的设备 alice@example.com linux -
exit node: 100.100.100.100测试 IP 地址:
bash
curl ifconfig.me应该显示出口节点的公网 IP,而不是您的真实 IP。
Linux 配置
IP Forwarding
启用 IP forwarding:
bash
# 临时启用
sudo sysctl -w net.ipv4.ip_forward=1
# 永久启用
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -pNAT 配置
使用 iptables 配置 NAT:
bash
# 启用 MASQUERADE
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 允许转发
sudo iptables -A FORWARD -i tailscale0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tailscale0 -m state --state ESTABLISHED,RELATED -j ACCEPT保存规则:
bash
sudo iptables-save > /etc/iptables/rules.v4防火墙配置
如果使用 UFW:
bash
sudo ufw allow forwarding如果使用 firewalld:
bash
sudo firewall-cmd --add-masquerade
sudo firewall-cmd --add-forward高级配置
同时作为子网路由器和出口节点
设备可以同时担任两种角色:
bash
sudo tailscale up --advertise-exit-node --advertise-routes=192.168.1.0/24多个出口节点
可以设置多个出口节点:
bash
# 在设备 A 上(美国)
sudo tailscale up --advertise-exit-node
# 在设备 B 上(欧洲)
sudo tailscale up --advertise-exit-node用户可以选择使用哪个出口节点。
允许 LAN 访问
使用出口节点时仍然访问本地 LAN:
bash
tailscale up --exit-node=exit-node --exit-node-allow-lan-access这样:
- 互联网流量通过出口节点
- 本地 LAN 流量直接访问
DNS 配置
配置 DNS 行为:
bash
# 使用出口节点的 DNS
tailscale up --exit-node=exit-node --accept-dns
# 使用本地 DNS
tailscale up --exit-node=exit-node --accept-dns=falseACL 控制
使用 ACL 控制谁可以使用出口节点:
json
{
"acls": [
{
"action": "accept",
"src": ["group:admins"],
"dst": ["tag:exit-node:*"]
}
],
"tagOwners": {
"tag:exit-node": ["group:admins"]
}
}性能优化
选择合适的设备
考虑因素:
- CPU 性能
- 网络带宽
- 地理位置
- 网络延迟
监控性能
检查出口节点负载:
bash
tailscale status测试延迟:
bash
tailscale ping exit-node多出口节点负载均衡
设置多个出口节点:
- 不同地理位置
- 自动故障转移
- 用户可手动选择
故障排除
无法连接到出口节点
检查步骤:
- 确认出口节点已批准
- 确认 IP forwarding 已启用
- 检查 NAT 配置
- 检查防火墙规则
速度慢
可能原因:
- 出口节点带宽不足
- 网络延迟高
- CPU 性能不足
- 防火墙规则过多
解决方法:
- 使用高性能设备
- 选择更近的出口节点
- 简化防火墙规则
- 增加带宽
DNS 不工作
检查 DNS 配置:
bash
tailscale dns status使用本地 DNS:
bash
tailscale up --exit-node=exit-node --accept-dns=false某些网站无法访问
可能原因:
- 网站阻止了出口节点 IP
- 出口节点地理位置限制
- DNS 问题
解决方法:
- 更换出口节点
- 使用不同地理位置的节点
- 检查 DNS 设置
安全考虑
信任出口节点
使用出口节点意味着:
- 所有流量通过该设备
- 出口节点可以看到您的流量目标
- 需要信任出口节点操作者
建议:
- 使用您控制的设备
- 定期监控出口节点
- 使用 HTTPS 加密流量
ACL 保护
使用 ACL 限制:
json
{
"acls": [
{
"action": "accept",
"src": ["group:authorized-users"],
"dst": ["tag:exit-node:*"]
}
]
}监控和日志
启用网络日志:
- 监控出口节点使用
- 记录连接信息
- 检测异常行为
最佳实践
1. 选择安全的位置
- 使用可靠的云服务商
- 选择隐私友好的地区
- 定期更新系统
2. 性能监控
- 监控带宽使用
- 检查延迟
- 设置告警
3. 冗余配置
- 多个出口节点
- 不同地理位置
- 自动故障转移
4. 安全配置
- 定期更新系统
- 配置防火墙
- 启用日志
5. 文档化
记录:
- 出口节点位置
- 配置详情
- ACL 规则
- 使用政策
示例配置
AWS EC2 出口节点
创建 EC2 实例:
bash
# 安装 Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
# 配置出口节点
sudo tailscale up --advertise-exit-node
# 启用 IP forwarding
sudo sysctl -w net.ipv4.ip_forward=1DigitalOcean Droplet
创建 Droplet:
bash
# 安装 Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
# 配置
sudo tailscale up --advertise-exit-node
# 配置 iptables
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE