如何在Linux系统中通过tailscale子网路由组网,实现异地访问
Linux
使用 Tailscale 官方提供的通用一键脚本。这个脚本会自动检测 Ubuntu 版本并自动完成所有步骤。
在 Ubuntu Server 虚拟机的命令行里,按顺序执行以下步骤:
Linux系统安装
运行一键安装脚本
curl -fsSL https://tailscale.com/install.sh | sh
启动 Tailscale 并连接
运行此命令,它会生成一个登录链接。
sudo tailscale up
在“电脑”上进行身份验证
执行上一步后,你的服务器终端会显示如下内容:
pixel@ubuntu-docker:~$ sudo tailscale up
To authenticate, visit:
https://login.tailscale.com/a/xxx8
-
在自己的笔记本电脑(或手机)上,打开浏览器。
-
复制并粘贴上面那个
https://login.tailscale.com/...的网址。 -
使用你的 Google、Microsoft 或 GitHub 帐户登录 Tailscale。
-
登录后,你会在网页上看到“Approve machine (批准机器)”的求。点击“Approve”。
-
一旦你在网页上批准,你的 PVE 服务器终端会立刻显示“Success.”。

到了这一步, 已经可以远程访问该虚拟机, 但是还不能对局域网设备进行远程访问.
设置子网路由(可选)
设置子网路由
若希望访问所有的 PVE 服务。应该在这台 Ubuntu VM 上启用“子网路由”,让它成为整个局域网的入口。
假设你的家庭局域网是 192.168.6.0/24:
sudo tailscale up --advertise-routes=192.168.6.0/24
(注意: 运行此命令后,还需要去 Tailscale 的网页管理后台,找到这台机器,批准 192.168.6.0/24 这条路由。)
修复子网路由
运行上面命令后,你会得到警告:
pixel@ubuntu-docker:~$ sudo tailscale up --advertise-routes=192.168.6.0/24
Warning: IPv6 forwarding is disabled.
Subnet routes and exit nodes may not work correctly.
See https://tailscale.com/s/ip-forwarding
Warning: UDP GRO forwarding is suboptimally configured on ens18, UDP forwarding throughput capability will increase with a configuration change.
See https://tailscale.com/s/ethtool-config-udp-gro
pixel@ubuntu-docker:~$
# - **Warning 1 (IPv6 forwarding):** **必须修复。** 这是告诉你,你的 VM 内核“禁止”转发网络包,这让它无法成为路由器。
# - **Warning 2 (UDP GRO):** **强烈建议修复。** 这是一个性能问题,不修复会导致你的网络连接在高负载下变慢或卡顿。
在你的 pixel@ubuntu-docker 虚拟机中,依次执行以下命令来修复这两个问题:
修复“IPv6/IPv4 转发被禁用” (必须)
需要告诉 Ubuntu 的内核:“我允许你充当一台路由器。”
-
创建一个新的配置文件来永久启用转发:
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
结果:
pixel@ubuntu-docker:~$ echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-tailscale.conf
net.ipv4.ip_forward = 1
pixel@ubuntu-docker:~$ echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
net.ipv6.conf.all.forwarding = 1
pixel@ubuntu-docker:~$
-
让配置立即生效:
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
修复“UDP GRO 性能问题”
需要关闭网卡 ens18 上的 GRO (Generic Receive Offload) 功能,因为它对“转发”(路由)有害。
-
临时关闭(立即生效,但重启后失效):
sudo ethtool -K ens18 gro off -
永久关闭(设置为开机自动执行,否则你每次重启VM都要手动敲一遍): 将创建一个简单的
systemd服务来在开机时自动运行这个命令。(推荐)a. 创建服务文件
sudo vim /etc/systemd/system/disable-gro.serviceb. 复制并粘贴以下所有内容到
vim编辑器中:注意!! 要先
ifconfig查看现在的网卡是什么, 例如在该虚拟机中我的网卡是ens18[Unit] Description=Disable GRO on ens18 After=network.target [Service] Type=oneshot ExecStart=/usr/sbin/ethtool -K ens18 gro off RemainAfterExit=yes [Install] WantedBy=multi-user.targetc. 保存并退出
d. 启用这个新服务:
sudo systemctl daemon-reload sudo systemctl enable --now disable-gro.servicesudo tailscale up --advertise-routes=192.168.6.0/24如果仍然有警告,
Warning: UDP GRO forwarding is suboptimally configured on ens18, UDP forwarding throughput capability will increase with a configuration change. See https://tailscale.com/s/xxx pixel@ubuntu-docker:~$ sudo ethtool -k ens18 | grep generic-receive-offload #查看真实状态 generic-receive-offload: off #若结果为off则代表已经完成,不过缓存还在, 导致误报可以忽略.
网页管理后台 授权
现在你的系统已经配置完毕。你现在需要去 Tailscale 的网页管理后台 (https://admin.tailscale.com/),在“Machines”列表里找到 ubuntu-docker 这台机器,批准它声明的 192.168.6.0/24 这条新路由。
批准子网路由
完成这些后,你在任何地方(例如你的手机)登录 Tailscale,都应该能直接访问你家里的 192.168.6.x IP 地址了。


为服务器禁用“密钥过期”
Tailscale 默认会“过期”密钥,要求你每隔几个月重新登录一次。但对于 7x24 的服务器,这会导致服务中断。你必须禁用它:
-
打开你的电脑浏览器,访问
https://admin.tailscale.com/(管理后台)。 -
在“Machines (机器)”列表中,找到你刚刚添加的这台 Ubuntu VM。
-
点击它右侧的三个点 (⋮) 菜单。
-
选择 Disable key expiry... (禁用密钥过期...)。
至此,你的 PVE Ubuntu 虚拟机已永久、安全地连接到你的 Tailscale 网络。
检查你的 Tailscale IP
运行此命令查看你的新“虚拟局域网”IP。
tailscale ip -4
它会显示一个 100.x.x.x 格式的 IP 地址。
如何使用?
到这一步, “子网路由”已经正式生效了。
100.x.x.x 是 ubuntu-docker 这台虚拟机自己的 Tailscale IP 地址。
你不需要再在服务器上做任何事了。你只需要在你“外面”的设备上(例如你的手机、你的笔记本电脑)安装 Tailscale 客户端。
在你的“外部设备”上安装 Tailscale
- 打开 Tailscale 官网 (
tailscale.com)。 - 为你的手机(iOS 或 Android)或笔记本电脑(Windows 或 macOS)下载并安装 Tailscale 客户端。
登录同一个 Tailscale 帐户
打开你刚安装的客户端,登录你刚才在服务器上使用的那个 Tailscale 帐户(例如,同一个 Google / Microsoft 帐户)。
如何访问你的服务
一旦你在“外部设备”(例如你的手机)上登录了 Tailscale... 你不需要做任何其他配置了。
你的 ubuntu-docker 虚拟机现在就像一个“网关”,它已经告诉了你的手机:“嘿,任何 192.168.6.x 的地址,都来找我!”
如何访问局域网别的设备?
在你安装并登录了 Tailscale 的手机上,打开浏览器,直接输入:
http://192.168.6.1
它就会像你在家一样,直接打开 OpenWRT 的登录页面。
如何访问自己呢? (192.168.6.152:9000 是自己的服务A)
有两种方法,两种都可行:
方法一 (推荐,使用局域网 IP):
就像访问 OpenWRT 一样,直接输入:
http://192.168.6.152:9000
方法二 (使用 Tailscale IP):
你也可以使用它自己的 Tailscale IP 地址:
http://100.x.x.x:9000
其它
Tailscale客户端无需关闭, 回到局域网后会自动走局域网路由器(最快、最直接的路径)
为什么它会“自动”走最快路径?
(人在局域网内,访问局域网的地址)是 Tailscale 必须解决的核心问题。它的工作原理如下:
当你的笔记本电脑回到家里并连接到 192.168.6.0/24 这个局域网时,你的电脑操作系统(Windows 或 macOS)会变得非常“聪明”。
在这一刻,你的电脑有了两条可以到达 192.168.6.1 (OpenWRT 后台) 的路径:
-
路径 A (本地局域网):
- 通过你的物理网卡(Wi-Fi 或有线网口)。
- 这是一个物理连接,操作系统会给它一个极高的优先级(在路由表里称为低 "Metric" 或低 "跃点数")。
-
路径 B (Tailscale 子网路由):
- 通过你的虚拟网卡(Tailscale)。
- 把数据包加密,发送给你的
ubuntu-docker虚拟机(100.x.x.x),再由它解包转发。 - 这是一个虚拟连接,操作系统会给它一个较低的优先级。
决策:
当你在浏览器里输入 192.168.6.1 时,你的操作系统会自动选择优先级最高、最直接的路径 A (本地局域网)。
数据包会直接从你的笔记本电脑发往路由器,完全不会经过 Tailscale 的加密或隧道。
tailscale工作原理
FRP 依赖一个“中间人”服务器来转发所有流量,而 Tailscale 则聪明得多, 是一个关于“控制平面”和“数据平面”的经典分离设计。
1. 需要第三方公网服务器建立握手连接吗?
是的,必须需要。
-
这就是 Tailscale 的“控制平面”(Control Plane)。
-
当你在
ubuntu-docker虚拟机和你的笔记本电脑上都登录 Tailscale 时,它们都在向 Tailscale 的“协调服务器”(login.tailscale.com等)报到。 -
协调服务器的作用:
-
身份验证: 确认“你”是你(通过 Google/Microsoft 帐户)。
-
IP 分配: 分配
100.x.x.x的IP地址。 -
密钥交换(最关键): 这是一个“安全电话本”。它告诉你的笔记本:“
ubuntu-docker的公网地址是A.B.C.D,端口是12345,这里是它的加密公钥”。反之亦然。
-
它就像一个“电话接线员”,负责帮两个“打电话”的人(你的设备)接通线路,但它不会去“偷听”电话内容。
2. 连接以后是P2P的打洞实现吗?
是的,这永远是它的第一目标。
-
这就是 Tailscale 的“数据平面”(Data Plane)。
-
Tailscale 的核心是“NAT 穿透”(NAT Traversal),你说的“打洞”(Hole Punching)就是这个技术。
-
工作原理(UDP打洞):
-
你的笔记本(在外面)和你的
ubuntu-docker(在家)都通过 NAT 路由器上网。 -
它们从“协调服务器”拿到了对方的“公网地址和端口”。
-
它们同时向对方的公网地址直接发送一个(加密的)UDP 包。
-
因为双方的路由器都看到了一个“向外”的包,所以它们会“天真地”认为对方“向内”的包是一个“回复”,并允许它通过。
-
砰! 一个P2P(点对点)的直接连接就建立了。
-
3. 连接后还需要走第三方服务器吗?稳定吗?
(稳定吗?)
极其稳定。 它底层的加密协议是 WireGuard,这是目前公认最快、最现代、最稳定的 VPN 协议之一。
(还走第三方服务器吗?)
95% 的情况下,不再需要!
-
一旦P2P“打洞”成功,你的笔记本和
ubuntu-docker之间的所有流量(例如你访问192.168.6.152:9000)都是点对点直线传输的。 -
流量不会经过 Tailscale 的服务器。这和 FRP 有着本质区别(FRP 的所有流量都必须经过“中间人”)。
那 5% 的“万一”情况呢?(如果P2P打洞失败)
-
比如你在公司的防火墙,或某些极端的酒店 Wi-Fi 下,“打洞”失败了。
-
此时,Tailscale 会自动、无缝地降级到“中继”模式。
-
它会使用 Tailscale 的DERP(中继服务器)来转发你的流量(例如
笔记本 -> 东京DERP服务器 -> 你的VM)。 -
重点: 即使在“中继”模式下,流量也依然是端到端加密的。DERP 服务器无法解密你的流量,它只是一个“快递中转站”。
4. 我与虚拟机的流量受到什么限制呢?
限制 1:你的PVE主机(家)的“上行带宽”
-
这是最大、最关键的限制因素。
-
如果你的家庭宽带是“500M下载,50M上传”。
-
那么你在“外面”访问
ubuntu-docker的最大速率就是 50 Mbps。因为数据是从你家里“上传”给你的。
限制 2:你“外面”设备的“下行带宽”
-
如果你在手机上用 5G 网络(下载 300M),而家里上传是 50M,那么你被卡在了 50M。
-
如果你在酒店用 Wi-Fi(下载 20M),而家里上传是 50M,那么你被卡在了 20M。
简而言之:你的最终速率 = Min(你家里的上传, 你外面的下载)。
限制 3:流量大小
-
没有限制!
-
因为 95% 的情况是 P2P,流量不经过 Tailscale 的服务器。你可以随意传输 TB 级别的数据,Tailscale 不按流量计费。
本文来自博客园,作者:舟清颺,转载请注明原文链接:https://www.cnblogs.com/zqingyang/p/19224392

浙公网安备 33010602011771号