设定tailscale出口点的步骤

好的,我为你整理一份从零开始、以 Ubuntu 系统为主的完整文档,包含安装 Tailscale、配置 IP 转发、设置 iptables NAT、宣告为出口节点,以及在后台批准的详细步骤。同时也收录了常见问题排查与安全建议。

你可以将这份文档保存下来,后续在新服务器上按照步骤操作即可。

# Ubuntu 服务器配置 Tailscale 出口节点完整指南

## 适用场景
– 将一台 Ubuntu(20.04 / 22.04 / 24.04)服务器配置为 Tailscale 网络的出口节点(Exit Node)
– 当你在国外时,通过这台服务器访问国内网络资源(如视频订阅、网银等)
– 服务器环境可能同时运行 Docker、有默认防火墙等

## 一、准备工作

### 1. 确认服务器基本信息
登录服务器后,记录以下信息:
“`bash
# 查看默认网卡名称(通常为 eth0, ens3, enp0s3 等)
ip route show default
“`
输出示例:`default via 172.24.63.253 dev eth0` → 网卡名为 `eth0`

### 2. 确保能够通过 VNC / 管理终端连接(重要)
配置网络时可能误操作导致 SSH 断连,请提前在云服务商控制台测试 **VNC 或串行控制台** 是否可以正常登录。

## 二、安装 Tailscale

“`bash
# 添加 Tailscale 官方 GPG 密钥和软件源(Ubuntu 通用)
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/$(lsb_release -cs).noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/$(lsb_release -cs).tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list

# 更新软件包并安装
sudo apt-get update
sudo apt-get install tailscale -y
“`

### 2.1 启动并登录 Tailscale
“`bash
sudo tailscale up
“`
执行后会返回一个 URL(如 `https://login.tailscale.com/a/xxxxx`),在**本地浏览器**中打开该链接,使用你的 Tailscale 账号登录并授权设备。

## 三、配置系统以支持流量转发(出口节点核心)

### 3.1 启用 IP 转发(永久)
“`bash
# 创建 sysctl 配置文件(推荐)
echo ‘net.ipv4.ip_forward = 1’ | sudo tee /etc/sysctl.d/99-tailscale.conf
echo ‘net.ipv6.conf.all.forwarding = 1’ | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo ‘net.ipv4.conf.all.forwarding = 1’ | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo ‘net.ipv4.conf.default.forwarding = 1’ | sudo tee -a /etc/sysctl.d/99-tailscale.conf

# 立即生效
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
“`

验证是否生效:
“`bash
sysctl net.ipv4.ip_forward net.ipv4.conf.all.forwarding
“`
两项都应输出 `1`。

### 3.2 配置 iptables NAT 与转发规则

**重要**:将下面命令中的 `eth0` 替换为你实际的主网卡名称(通过 `ip route` 确认)。

“`bash
# 添加 MASQUERADE:让从 Tailscale 进来的流量伪装成主网卡的 IP 出去
sudo iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

# 允许新连接从 tailscale0 转发到 eth0
sudo iptables -I FORWARD -i tailscale0 -o eth0 -j ACCEPT

# 允许已有连接的响应数据从 eth0 返回 tailscale0
sudo iptables -I FORWARD -i eth0 -o tailscale0 -m state –state RELATED,ESTABLISHED -j ACCEPT
“`

#### 如果服务器使用 firewalld(CentOS / Rocky 常见,Ubuntu 默认不用)
“`bash
sudo firewall-cmd –permanent –add-masquerade
sudo firewall-cmd –reload
“`

### 3.3 保存 iptables 规则(重启后依然生效)
“`bash
# 安装持久化工具(如果未安装)
sudo apt-get install iptables-persistent -y

# 保存当前 IPv4 规则
sudo iptables-save | sudo tee /etc/iptables/rules.v4
“`

## 四、宣告服务器为出口节点

“`bash
sudo tailscale set –advertise-exit-node
“`

## 五、在 Tailscale 管理后台批准出口节点

1. 打开浏览器访问 [Tailscale Admin Console](https://login.tailscale.com/admin/machines)
2. 找到你的服务器设备(通常显示主机名或 IP)
3. 点击设备右侧的 `…` → **Edit route settings**
4. 勾选 **`Use as exit node`**
5. 点击 **Save**

等待约 1 分钟,后台设备列表中该设备会显示绿色的 `Exit Node` 标记,不再有警告图标。

## 六、从客户端使用出口节点

### 6.1 获取服务器的 Tailscale IP
在服务器上执行:
“`bash
tailscale ip -4
“`
输出类似 `100.88.88.100`,记下该地址。

### 6.2 在客户端设备上(你的笔记本、手机等)设置出口节点

**macOS / Linux 客户端:**
“`bash
sudo tailscale set –exit-node=100.88.88.100 –exit-node-allow-lan-access=true
“`
参数 `–exit-node-allow-lan-access` 表示允许在通过出口节点上网的同时访问本地局域网设备(如打印机)。

**Windows 客户端:**
在 Tailscale 托盘图标 → 右键 → **Exit node** → 选择你的服务器。

### 6.3 验证是否生效
访问 `cip.cc` 或 `ifconfig.me`,显示的 IP 地址应为你服务器的公网 IP。

### 6.4 停止使用出口节点(恢复直连)
“`bash
sudo tailscale set –exit-node=
“`

## 七、常见问题与排错

### 7.1 后台显示“IP forwarding disabled”警告,尽管 sysctl 已设置
**原因**:Tailscale 守护进程没有重新检测到变化。
**解决**:
“`bash
sudo systemctl restart tailscaled
sudo tailscale set –advertise-exit-node
“`
然后再到后台重新批准(取消勾选 → 保存 → 再勾选 → 保存)。

### 7.2 客户端无法连接出口节点或没有流量
– 检查服务器的 iptables 规则是否存在:
`sudo iptables -t nat -L POSTROUTING -v -n | grep MASQUERADE`
– 检查 `tailscale0` 虚拟网卡是否存在:`ip addr show tailscale0`
– 检查服务器是否可以访问外网:`curl cip.cc`

### 7.3 服务器同时运行 Docker,导致容器网络异常
上述配置使用 `-I` 插入规则在 Docker 规则之前,一般不会影响容器。如果容器网络出问题,可以执行回滚:
“`bash
sudo iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -D FORWARD -i tailscale0 -o eth0 -j ACCEPT
sudo iptables -D FORWARD -i eth0 -o tailscale0 -m state –state RELATED,ESTABLISHED -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4
“`

### 7.4 服务器重启后出口节点失效
确保:
– IP 转发通过 `/etc/sysctl.d/99-tailscale.conf` 持久化
– iptables 规则通过 `iptables-persistent` 保存(步骤 3.3)
– Tailscale 服务开机自启:`sudo systemctl enable tailscaled`

### 7.5 如何卸载出口节点功能
“`bash
sudo tailscale set –advertise-exit-node=false
# 删除 iptables 规则(同上 7.3 的回滚命令)
“`

## 八、安全建议

1. **限制出口节点的使用范围**:通过 Tailscale 的 ACL(访问控制列表)指定只有你的特定设备才能使用该出口节点。
2. **定期更新系统与 Tailscale**:`sudo apt update && sudo apt upgrade tailscale`
3. **使用云服务商的安全组**:仅允许 SSH 从你的 Tailscale IP(或特定来源 IP)访问,避免暴露在公网。

## 九、附录:一键初始化脚本(供熟悉者使用)

将以下内容保存为 `setup_exitnode.sh`,然后 `chmod +x setup_exitnode.sh && sudo ./setup_exitnode.sh`
“`bash
#!/bin/bash
# 设置网卡名,请根据实际情况修改
NIC=”eth0″

# 启用 IP 转发
cat > /etc/sysctl.d/99-tailscale.conf < 文档基于 Ubuntu 20.04/22.04 测试,其他 Debian 系发行版基本通用。如果在执行中遇到任何错误,欢迎提供命令输出以便进一步分析。