【记录】Tailscale|部署 Tailscale 到 linux 主机或 Docker 上

【记录】Tailscale|部署 Tailscale 到 linux 主机或 Docker 上

文章目录

🐧 Linux 与 Docker 环境下 Tailscale 异地组网全攻略:从宿主机到容器内的极致部署

在这里插入图片描述

在当今的云原生和远程办公时代,异地组网内网穿透是开发者绕不开的话题。相比于传统的 OpenVPN 或 IPSec,Tailscale 基于先进的 WireGuard® 协议,以其“零配置”、“高安全性”和“打洞能力强”著称。

本文将详细介绍如何在 Linux 宿主机以及复杂的 Docker 容器环境中部署 Tailscale,特别是针对容器内无特权模式下的特殊启动方案。

🔗 官方资源
Windows、macOS 或 iOS 等其他平台的客户端下载页:https://tailscale.com/download

一、 为什么选择 Tailscale?

在开始部署之前,简单聊聊为什么它是目前的首选方案:

  • 基于 WireGuard:轻量级、低延迟,内核态执行,性能极佳。
  • NAT 穿透(P2P):Tailscale 的 DERP 中继服务器能帮助处于不同复杂网络环境下的设备建立直连。
  • ACL 访问控制:企业级的访问控制策略。
  • MagicDNS:直接通过机器名访问,无需记 IP。

二、 场景一:Linux 宿主机直接部署

这是最常见的场景,适用于云服务器、NAS 或个人 Linux 电脑。

1. 一键安装

Tailscale 官方提供了一个非常方便的安装脚本,会自动检测发行版(Ubuntu/CentOS/Debian 等)并安装:

curl -fsSL https://tailscale.com/install.sh |sh

2. 启动与认证

安装完成后,启动服务并获取登录链接:

sudo tailscale up 

复制终端输出的链接,在浏览器中打开并使用账号登录即可。

3. 进阶参数(可选)

如果你希望将这台 Linux 作为出口节点(Exit Node),即让其他设备通过这台机器上网,可以使用以下命令启动:

sudo tailscale up --advertise-exit-node 

注:启动后需在 Tailscale 管理后台的 Machines 列表中开启该路由。


三、 场景二:Docker 容器内由零构建(进阶技巧)

在某些受限环境中(例如:你只有一个正在运行的容器的 Shell 权限,无法修改 docker run 参数,或者不想挂载宿主机的 /var/run/tailscale/),我们需要在容器内部手动构建 Tailscale 环境。

由于容器通常默认没有 /dev/net/tun 设备,且没有特权(Privileged),直接安装通常会报错。我们需要使用 Userspace Networking(用户态网络) 模式来绕过内核限制。

📋 准备工作

请直接进入容器的 bash 终端。

🚀 步骤详解

Docker 内额外安装 Tailscale 需要进行一个比较复杂的设备节点配置。为了方便操作,我将步骤整理为两个阶段。

第一阶段:环境构建与后台启动

直接复制粘贴如下指令块:

# 1. 安装 Tailscale 二进制文件curl -fsSL https://tailscale.com/install.sh |sh# 2. 创建必要的目录(容器内可能缺失)mkdir -p /dev/net # 3. 创建 TUN 设备节点# c 代表字符设备,10 和 200 是主次设备号if[! -c /dev/net/tun ];thenmknod /dev/net/tun c 10200fi# 4. 设置设备权限,确保当前用户可读写chmod600 /dev/net/tun # 5. 清理可能存在的旧进程(防止重复启动)pkill -f tailscaled 2>/dev/null ||true# 6. 等待清理完成sleep2# 7. 启动 Tailscale 守护进程# 关键参数:--tun=userspace-networking # 作用:启用用户态网络模式,绕过对内核 TUN 模块的强依赖,适合非特权容器 tailscaled --tun=userspace-networking --socket=/tmp/tailscale.sock --state=/tmp/tailscale.state 2>&1&# 8. 等待服务启动sleep5# 9. 检查服务是否运行ifps aux |grep'[t]ailscaled'> /dev/null;thenecho"✅ Tailscaled 服务启动成功"elseecho"❌ Tailscaled 启动失败,请检查日志"fi# 10. 获取认证 URL(复制输出的链接到浏览器中打开) tailscale --socket=/tmp/tailscale.sock up 
🔐 认证步骤(需要在浏览器中操作)

用户操作指南:

  1. 复制第 10 步输出的 URL(格式通常为:https://login.tailscale.com/a/xxxxxxxxxx)。
  2. 在浏览器中打开该 URL。
  3. 使用你的 Tailscale 账户登录。
  4. 点击 Connect 授权设备加入网络。

第二阶段:验证与收尾

认证成功后,回到终端继续执行以下命令来确认状态并安全退出:

# 11. 等待认证状态同步sleep5# 12. 验证连接状态 tailscale --socket=/tmp/tailscale.sock status # 13. 查看分配的 Tailscale IPTS_IP=$(tailscale --socket=/tmp/tailscale.sock ip)echo"本机 Tailscale IP: $TS_IP"# 14. 将进程脱离终端控制以便安全退出 Shell# 这样当你关闭 docker exec 的终端时,VPN 服务不会中断TAILSCALE_PID=$(ps aux |grep'[t]ailscaled'|awk'{print $2}') disown $TAILSCALE_PID2>/dev/null ||true# 15. 最终连通性测试 tailscale --socket=/tmp/tailscale.sock ip -4 echo"✅ Tailscale 配置完成!可以安全退出终端。"

⚠️ 注意事项

  • 持久化问题:这种方式在容器内是临时的。如果容器重启(Restart),上述步骤需要重新执行。如果需要长期运行,建议将上述脚本写入 DockerfileENTRYPOINT 或使用 Supervisor 管理。
  • Socket 指定:注意所有命令都带了 --socket=/tmp/tailscale.sock,这是因为我们将 socket 文件放在了 /tmp 目录下,而非默认系统目录,防止权限问题。

四、 常用维护命令速查

配置完成后,以下命令对排错非常有帮助:

在不同设备间传文件(Taildrop)

tailscale filecp<文件名><目标机器名>: 

检查网络连通性

tailscale ping<目标机器名或IP>

查看其他节点状态

tailscale status 

本账号所有文章均为原创,欢迎转载,请注明文章出处:https://shandianchengzi.blog.ZEEKLOG.net/article/details/157212469。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

Read more

七大排序算法深度解析:从原理到代码实现

七大排序算法深度解析:从原理到代码实现

1.排序 排序算法是计算机科学中最基础的技能之一,无论你是编程新手还是经验丰富的开发者,理解这些算法都能显著提升代码效率。本文将用最简单的方式,带你快速掌握七大经典排序算法的核心原理与实现。 1.1排序概念及其运用 排序是指将一组数据按照特定规则(如升序或降序)重新排列的过程。排序是计算机科学中最基础且重要的操作之一,广泛用于优化数据检索、提高算法效率以及简化复杂问题的处理。 排序的主要应用场景 1. 数据库查询:加速数据检索(如索引排序)。 2. 搜索算法:二分查找要求数据有序。 3. 数据分析:统计、去重、Top-K问题(如排行榜)。 4. 任务调度:按优先级处理任务。 5. 文件系统:按文件名、日期排序文件。 1.2常见排序算法 本次将系统介绍7种经典排序算法,重点从时间复杂度、空间复杂度、稳定性三个维度展开分析,时间复杂度和空间复杂度的概念在之前博客中有所讲解,现在来说明一下排序算法稳定性的概念。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,

By Ne0inhk
数据结构:单链表(1)

数据结构:单链表(1)

目录 前言  一.单链表的概念 介绍 二.单链表的结构 介绍 链表的打印 核心逻辑解析 链表的销毁 三、实现单链表 1.单链表的尾插 结点的创建 2.单链表的头插 3.单链表的尾删 4.单链表的头删 代码   总结 前言    最近学校事务较多,我又正巧经历社团换届,所以耽误了几天时间,但好在所有投入都有了温暖的回应,留任成功了(虽然是小社团哈),接下来,我将继续更新博客,与大家分享知识。 本篇文章将讲解单链表的知识,包括:单链表的概念,单链表的结构、实现单链表、链表的分类、单链表算法题知识的相关内容,为5大模块,其中为本章节知识的内容。 一.单链表的概念 介绍   在之前我们学习了逻辑结构和物理结构都是线性的顺序表,但是我们会发现顺序表有以下3个比较明显的缺陷:中间/头部的插入删除,

By Ne0inhk
【动态规划】01背包与完全背包问题详解,LeetCode零钱兑换II秒解,轻松解力扣

【动态规划】01背包与完全背包问题详解,LeetCode零钱兑换II秒解,轻松解力扣

👨‍💻程序员三明治:个人主页 🔥 个人专栏: 《设计模式精解》《重学数据结构》 🤞先做到 再看见! 目录 * 01背包题目分析 * 01背包解决方法 * 完全背包题目分析 * 完全背包解决方法 * LeetCode 518.零钱兑换II * 思路 * 代码实现 01背包题目分析 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 每一件物品其实只有两个状态,取或者不取,所以可以使用回溯法搜索出所有的情况,那么时间复杂度就是O(2^n),这里的n表示物品数量。 所以暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化! 在下面的讲解,我举一个例子: 物品为: 重量价值物品0115物品1320物品2430 01背包解决方法 递归五部曲: 1. 确定dp数组以及下标的含义:dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,

By Ne0inhk
数据结构 | 深度解析二叉树的基本原理

数据结构 | 深度解析二叉树的基本原理

个人主页-爱因斯晨 文章专栏-数据结构 二叉树是计算机科学中最基础也最常用的数据结构之一,它不仅是理解更复杂树结构(如 AVL 树、红黑树)的基础,也广泛应用于表达式解析、 Huffman 编码、数据库索引等领域。本文将从二叉树的基本概念出发,深入探讨其存储结构、核心操作及实际应用,并通过 C 语言代码示例帮助读者掌握这一重要数据结构。 二叉树的基本概念 二叉树是一种每个节点最多有两个子节点的树状结构,这两个子节点分别被称为左孩子(left child)和右孩子(right child)。根据节点的分布情况,二叉树可以分为以下几种特殊类型: * 满二叉树:除叶子节点外,每个节点都有两个子节点,且所有叶子节点都在同一层 * 完全二叉树:除最后一层外,其余层都是满的,且最后一层的节点都靠左排列 * 平衡二叉树:左右两个子树的高度差不超过 1 的二叉搜索树 二叉树具有一个重要性质:在非空二叉树中,第 i 层最多有 2^(i-1) 个节点;深度为

By Ne0inhk