Tailscale 高级教程
对我来说常用的tailscale 的功能有如下几个:
exit node 和 magic dns and lanacess
Exit Node 功能
Exit Node(出口节点)是 Tailscale 的一个重要功能,它允许你将某个设备设置为网络出口,使其他 Tailscale 设备的流量可以通过这个节点访问互联网。
说人话就是你可以让设备上的指定程序通过vpn节点内的指定设备作为出口,
- 在国外访问国内服务时,可以通过国内的 Exit Node 来访问(反向回国)
- 保护公共 WiFi 下的网络安全,通过可信的 Exit Node 来访问互联网(绕过中间人攻击)
- 绕过地理位置限制,访问特定区域的内容(DNS解锁)
举个例子: 公司有一个私有app,提供服务的ip在公司内网的100.100.101.1,只有在公司里的网络环境下才能打开上传文件 出差在外地的时候想要访问回公司里的设备就可以启用exit node这个功能,让放在公司的nas帮我们访问到公司里的ip
配置 Exit Node
- 在想要设置为出口节点的设备上启用 IP 转发:
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
- 在 Tailscale 管理控制台中启用该设备的 Exit Node 功能
- 在其他设备上选择使用这个 Exit Node
Magic DNS 功能
Magic DNS 是 Tailscale 提供的智能 DNS 解析服务,它能够:
- 自动解析 Tailscale 网络中的设备主机名
- 支持自定义 DNS 记录
- 与现有的 DNS 基础设施无缝集成
Magic DNS 的主要特点
-
自动主机名解析:
- 网络中的设备可以直接通过主机名互相访问
- 无需手动维护 hosts 文件
- 支持动态 IP 环境
例如:如果你有一台名为"home-server"的设备,其他设备可以直接使用
home-server
或home-server.tailnet-name.ts.net
来访问它,无需记忆 IP 地址。 -
自定义域名:
- 可以为设备设置自定义的域名
- 支持子域名配置
- 可以通过 Tailscale 的控制台管理 DNS 记录
例如:可以将家里的 NAS 设备命名为
nas.home.ts.net
,办公室的打印机命名为printer.office.ts.net
,使得设备用途一目了然。 -
DNS 分流:
- 内网域名通过 Magic DNS 解析
- 外网域名通过常规 DNS 服务器解析
- 避免 DNS 泄露问题
例如:访问
home-server.tailnet-name.ts.net
时使用 Magic DNS 解析,而访问google.com
时仍然使用设备配置的公共 DNS 服务器。
配置 Magic DNS
配置一个完整的 Magic DNS 环境:
# 1. 查看当前的 DNS 配置
tailscale status
# 2. 设置自定义搜索域
tailscale up --search-paths=home.internal,office.internal
# 3. 验证 DNS 解析
ping home-server
ping nas.home.ts.net
nslookup printer.office.ts.net
Lan Access 功能
Lan Access(局域网访问)是 Tailscale 的一个重要功能,它允许你将某个设备设置为局域网访问,使其他 Tailscale 设备的流量可以通过这个节点访问局域网内的设备。
子网访问
这个功能可以让我们访问类似打印机/光猫/路由器/交换机等无法安装tailscale的设备,人在外地也能访问到家里的设备
配置 Lan Access
- 启动 Tailscale 并宣告路由:
作为 Exit Node:
sudo tailscale up --advertise-exit-node
作为 Subnet Router (宣告特定子网,例如 192.168.1.0/24):
sudo tailscale up --advertise-routes=192.168.1.0/24
# 你可以宣告多个子网,用逗号分隔
# sudo tailscale up --advertise-routes=192.168.1.0/24,10.0.5.0/24
- 在 Tailscale Admin Console 批准路由:
访问 Tailscale Admin Console。 找到你的 Debian 12 机器。 点击机器名称右侧的三个点(...)菜单,选择 "Edit route settings..."。 启用 "Use as exit node" 或批准你宣告的子网路由 ("Subnet routes")。