手机使用服务器来请求,从此告别机场/自建节点

手机使用服务器来请求,从此告别机场/自建节点

最近我有一个很实际的需求:手机在外面访问网络时,希望请求能够从自己的服务器发出去。这样一来,手机就可以像“挂”在服务器所在网络上一样访问公网,出口 IP 也会变成服务器的公网 IP。

这件事用传统 VPN 当然也能做,但如果只是自己几台设备之间使用,Tailscale 的 Exit Node 更省心:不用手写 WireGuard 配置,不用折腾客户端证书,也不用暴露一堆额外端口。

本文记录一次完整配置过程:把一台 Ubuntu 服务器配置成 Tailscale Exit Node,然后让手机通过它访问网络。

环境说明

本次使用的环境大致如下:

  • 服务器:Ubuntu
  • 服务器代号:tx1
  • Tailscale 服务:tailscaled
  • 手机:Android,已安装 Tailscale
  • 目标:手机访问公网时,通过 tx1 作为出口节点

为了安全,下面涉及的 Tailnet、邮箱、真实设备名和公网 IP 都做了脱敏处理。

先检查 Tailscale 服务状态

登录服务器后,先确认 Tailscale 是否安装并正常运行:

command -v tailscale
systemctl is-active tailscaled
systemctl status tailscaled --no-pager -l

正常情况下可以看到:

active

再查看当前 Tailnet 内的设备:

tailscale status
tailscale ip -4
tailscale debug prefs

如果服务器已经登录 Tailscale,会看到类似信息:

100.x.x.x    tx1              [email protected]    linux
100.x.x.x    android-phone    [email protected]    android

这里重点确认两件事:

  1. 服务器在线
  2. 手机也在同一个 Tailnet 里

如果这一步都没通,后面 Exit Node 配好了也没用。

检查系统转发能力

Exit Node 本质上是让其他 Tailscale 设备把流量转发到服务器,再由服务器访问公网。所以服务器必须开启 IP 转发。

检查当前状态:

sysctl net.ipv4.ip_forward
sysctl net.ipv6.conf.all.forwarding

我这台服务器上,IPv4 转发已经是开启的:

net.ipv4.ip_forward = 1

但 IPv6 转发还没有开启:

net.ipv6.conf.all.forwarding = 0

为了让 Exit Node 配置更完整,直接把 IPv6 转发也打开。

开启并持久化 IPv6 转发

临时开启:

sudo sysctl -w net.ipv6.conf.all.forwarding=1

写入持久化配置:

printf '%s\n' 'net.ipv6.conf.all.forwarding = 1' | sudo tee /etc/sysctl.d/99-tailscale-exit-node.conf

重新加载 sysctl 配置:

sudo sysctl --system

再次确认:

sysctl net.ipv4.ip_forward net.ipv6.conf.all.forwarding

期望结果:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

让服务器宣告为 Exit Node

接下来让服务器向 Tailscale 控制面声明:我可以作为出口节点。

sudo tailscale set --advertise-exit-node

执行后检查配置:

tailscale debug prefs

如果成功,会看到:

"AdvertiseRoutes": [
  "0.0.0.0/0",
  "::/0"
]

这表示服务器已经开始宣告自己可以转发 IPv4 和 IPv6 的全局流量。

注意,这一步只是“宣告”,还不代表 Tailnet 已经批准它作为 Exit Node。

在 Tailscale 管理后台批准 Exit Node

打开 Tailscale 管理后台,进入:

Machines -> 选择服务器 -> Edit route settings

然后启用:

Use as exit node

批准后,服务器才会真正成为 Tailnet 里的可用 Exit Node。

这一步很关键。否则服务器本地虽然已经宣告了 0.0.0.0/0 和 ::/0,但其他设备仍然不能把它选为出口。

手机端选择 Exit Node

打开手机上的 Tailscale App:

  1. 进入 Exit Node 设置
  2. 选择服务器 tx1
  3. 启用该 Exit Node

启用后,手机的公网请求就会通过服务器发出。

可以用浏览器搜索:

what is my ip

如果显示的是服务器公网 IP,就说明配置成功。

最终验证

服务器侧可以检查:

tailscale status
tailscale debug prefs

核心状态应该包括:

"AdvertiseRoutes": [
  "0.0.0.0/0",
  "::/0"
]

同时系统转发保持开启:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

手机侧验证最直接:看公网 IP 是否变成服务器出口 IP。

为什么这样可以工作

这套方案的核心链路是:

手机 -> Tailscale/WireGuard 加密隧道 -> tx1 -> 公网网站

手机先连进自己的 Tailscale 网络,然后把需要访问公网的流量交给 tx1。真正访问目标网站的是服务器,所以外部网站看到的出口 IP 是服务器 IP,而不是手机当前网络的 IP。

Tailscale 底层使用 WireGuard,手机到服务器之间是加密隧道。只要手机能连上 Tailnet,服务器又能访问目标网站,Exit Node 就可以把手机请求从服务器出口转发出去。

这里要注意一个边界:Tailscale 加密的是“手机到服务器”这一段。服务器到目标网站这一段,是否加密取决于你访问的是 HTTPS 还是 HTTP。现在大多数网站都是 HTTPS,但这点仍然值得心里有数。

和自建代理节点相比

常见自建节点包括 Shadowsocks、VLESS、Trojan、Hysteria 等。它们和 Tailscale Exit Node 的侧重点不一样。

Tailscale Exit Node 的优点是省心。设备认证、密钥管理、NAT 穿透、WireGuard 隧道都由 Tailscale 处理,默认只有 Tailnet 内的可信设备能使用这个出口。对于“自己的手机用自己的服务器出口”这种场景,它很合适。

专门代理节点的优点是更针对代理场景。比如分流规则、客户端生态、协议伪装、弱网优化、连接调度,通常会比 Tailscale 更灵活。缺点是要自己管理协议、端口、证书、客户端配置和服务端升级。配置不规范的话,反而可能把服务暴露给不该用的人。

简单对比:

方案优点缺点
Tailscale Exit Node配置简单,认证闭环,适合自用设备不是专门代理协议,依赖 Tailscale 控制面
Shadowsocks/VLESS/Trojan代理能力更完整,分流更灵活配置和维护成本更高
Hysteria/Hysteria2弱网和高延迟场景表现通常更好服务端、客户端参数更需要调优
裸 WireGuard直连成功时性能很好配置、路由和 NAT 穿透更折腾

如果只是自己手机临时或长期走服务器出口,Tailscale Exit Node 已经够用。要是追求复杂分流、协议伪装、极限速度,那专门代理节点更适合。

哪个速度更快

速度取决于链路质量,不是只看协议名字。

如果手机和服务器可以直连,Tailscale Exit Node 的速度通常不错:

手机 -> tx1 -> 目标网站

如果 NAT 打洞失败,Tailscale 可能走 DERP 中继,链路会变成:

手机 -> Tailscale DERP 中继 -> tx1 -> 目标网站

这时延迟和速度都会受中继影响。

可以用下面的命令在服务器上观察连接状态:

tailscale status

如果手机设备后面显示 direct x.x.x.x:port,通常说明是直连,速度更好。如果显示 relay xxx,说明在走 Tailscale 中继,速度可能会差一些。

实际测速建议直接看使用体验:

  • fast.com
  • speedtest.net
  • 视频是否能稳定播放高清
  • 应用商店下载速度是否正常
  • 常用 App 是否有明显延迟

一般结论是:专门代理节点通常更快、更适合长期高频代理;Tailscale Exit Node 更省心、更适合可信设备之间自用。

主要风险

这套方案不是没有风险,关键是别把它当成公共代理乱用。

第一,所有通过 Exit Node 的访问都会显示为服务器出口 IP。登录账号、访问网站、风控系统看到的都是服务器 IP,可能触发异地登录、安全验证或账号风控。

第二,服务器会承担手机流量。刷视频、下载文件、系统更新都会消耗服务器带宽。如果云服务器按流量计费,账单可能会很难看。

第三,服务器侧仍然可能留下记录。Tailscale 负责加密手机到服务器的链路,但服务器系统日志、DNS 查询、云厂商流量记录,都可能留下痕迹。

第四,Tailnet 权限要管好。如果 Tailscale 账号被盗,或者旧设备没有移除,别人可能也能使用这个出口节点。建议开启 MFA,只保留可信设备。

第五,注意 DNS 泄漏。理想状态下,流量和 DNS 都走预期路径。如果 DNS 查询还在手机本地网络发出,就可能出现访问流量走服务器、域名解析走本地的情况。可以在 Tailscale 后台检查 DNS 设置,并在手机端确认是否启用了相关配置。

第六,遵守服务器所在地、云厂商和目标服务的使用条款。不要把个人 Exit Node 分享成公共服务。

我的建议配置是:

开启 Tailscale 账号 MFA
只保留可信设备
不要共享 Exit Node
定期更新服务器系统
关注云服务器流量账单
确认 DNS 设置符合预期

如何关闭

如果以后不想让这台服务器继续作为 Exit Node,可以在服务器上执行:

sudo tailscale set --advertise-exit-node=false

手机端也可以随时在 Tailscale App 里关闭 Exit Node。

小结

这次配置的关键点其实就三个:

  1. 服务器上的 tailscaled 必须正常运行
  2. 系统必须开启 IP 转发
  3. Tailscale 后台必须批准服务器作为 Exit Node

Tailscale 的好处是,底层 WireGuard 连接、设备认证、NAT 穿透都已经帮你处理好了。对于个人设备互联、临时把手机流量切到服务器出口这种场景,它比传统自建 VPN 省事很多。

配置完成后,手机只需要在 App 里选择 Exit Node,就能把公网请求切到服务器出口。需要关闭时,也能一键切回本地网络。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容