Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >芜湖,Tailscale 开源版本让你的 WireGuard 直接起飞~

芜湖,Tailscale 开源版本让你的 WireGuard 直接起飞~

作者头像
米开朗基杨
发布于 2022-04-11 06:02:41
发布于 2022-04-11 06:02:41
8.4K11
代码可运行
举报
文章被收录于专栏:云原生实验室云原生实验室
运行总次数:1
代码可运行

目前国家工信部在大力推动三大运营商发展 IPv6,对家用宽带而言,可以使用的 IPv4 公网 IP 会越来越少。有部分地区即使拿到了公网 IPv4 地址,也是个大内网地址,根本不是真正的公网 IP,访问家庭内网的资源将会变得越来越困难。

部分小伙伴可能会选择使用 frp 等针对特定协议和端口的内网穿透方案,但这种方案还是不够酸爽,无法访问家庭内网任意设备的任意端口。更佳的选择还是通过 VPN 来组建大内网。至于该选择哪种 VPN,毫无疑问肯定是 WireGuard,WireGuard 就是 VPN 的未来。我已经不止一次向大家推荐使用 WireGuard 了,我累了,不想再讲了,你爱 JB 用辣鸡 OpenVPN 之类的就用吧,你开心就好。

WireGuard 相比于传统 VPN 的核心优势是没有 VPN 网关,所有节点之间都可以点对点(P2P)连接,也就是我之前提到的全互联模式(full mesh)[1],效率更高,速度更快,成本更低。

WireGuard 目前最大的痛点就是上层应用的功能不够健全,因为 WireGuard 推崇的是 Unix 的哲学,WireGuard 本身只是一个内核级别的模块,只是一个数据平面,至于上层的更高级的功能(比如秘钥交换机制,UDP 打洞,ACL 等),需要通过用户空间的应用来实现。

所以为了基于 WireGuard 实现更完美的 VPN 工具,现在已经涌现出了很多项目在互相厮杀。笔者前段时间一直在推崇 Netmaker[2],它通过可视化界面来配置 WireGuard 的全互联模式,它支持 UDP 打洞、多租户等各种高端功能,几乎适配所有平台,非常强大。然而现实世界是复杂的,无法保证所有的 NAT 都能打洞成功,且 Netmaker 目前还没有 fallback 机制,如果打洞失败,无法 fallback 改成走中继节点。Tailscale 在这一点上比 Netmaker 高明许多,它支持 fallback 机制,可以尽最大努力实现全互联模式,部分节点即使打洞不成功,也能通过中继节点在这个虚拟网络中畅通无阻。

没错,我移情别恋了,从 Netmaker 阵营转向了 Tailscale,是渣男没错了。

Tailscale 是什么

Tailscale 是一种基于 WireGuard 的虚拟组网工具,和 Netmaker 类似,最大的区别在于 Tailscale 是在用户态实现了 WireGuard 协议,而 Netmaker 直接使用了内核态的 WireGuard。所以 Tailscale 相比于内核态 WireGuard 性能会有所损失,但与 OpenVPN 之流相比还是能甩好几十条街的,Tailscale 虽然在性能上做了些许取舍,但在功能和易用性上绝对是完爆其他工具:

  1. 开箱即用
  • 无需配置防火墙
  • 没有额外的配置
  1. 高安全性/私密性
  • 自动密钥轮换
  • 点对点连接
  • 支持用户审查端到端的访问记录
  1. 在原有的 ICE、STUN 等 UDP 协议外,实现了 DERP TCP 协议来实现 NAT 穿透
  2. 基于公网的控制服务器下发 ACL 和配置,实现节点动态更新
  3. 通过第三方(如 Google) SSO 服务生成用户和私钥,实现身份认证

简而言之,我们可以将 Tailscale 看成是更为易用、功能更完善的 WireGuard。

光有这些还不够,作为一个白嫖党,咱更关心的是免费开源

Tailscale 是一款商业产品,但个人用户是可以白嫖的,个人用户在接入设备不超过 20 台的情况下是可以免费使用的(虽然有一些限制,比如子网网段无法自定义,且无法设置多个子网)。除 Windows 和 macOS 的图形应用程序外,其他 Tailscale 客户端的组件(包含 Android 客户端)是在 BSD 许可下以开源项目的形式开发的,你可以在他们的 GitHub 仓库[3]找到各个操作系统的客户端源码。

对于大部份用户来说,白嫖 Tailscale 已经足够了,如果你有更高的需求,比如自定义网段,可以选择付费。

我就不想付费行不行?行,不过得往下看。

Headscale 是什么

Tailscale 的控制服务器是不开源的,而且对免费用户有诸多限制,这是人家的摇钱树,可以理解。好在目前有一款开源的实现叫 Headscale[4],这也是唯一的一款,希望能发展壮大。

Headscale 由欧洲航天局的 Juan Font 使用 Go 语言开发,在 BSD 许可下发布,实现了 Tailscale 控制服务器的所有主要功能,可以部署在企业内部,没有任何设备数量的限制,且所有的网络流量都由自己控制。

目前 Headscale 还没有可视化界面,期待后续更新吧。

Headscale 部署

Headscale 部署很简单,推荐直接在 Linux 主机上安装。

理论上来说只要你的 Headscale 服务可以暴露到公网出口就行,但最好不要有 NAT,所以推荐将 Headscale 部署在有公网 IP 的云主机上。

首先需要到其 GitHub 仓库的 Release 页面下载最新版的二进制文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ wget --output-document=/usr/local/bin/headscale \
   https://github.com/juanfont/headscale/releases/download/v<HEADSCALE VERSION>/headscale_<HEADSCALE VERSION>_linux_<ARCH>

$ chmod +x /usr/local/bin/headscale

创建配置目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ mkdir -p /etc/headscale

创建目录用来存储数据与证书:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ mkdir -p /var/lib/headscale

创建空的 SQLite 数据库文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ touch /var/lib/headscale/db.sqlite

创建 Headscale 配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /etc/headscale/config.yaml

修改配置文件,将 server_url 改为公网 IP 或域名。如果是国内服务器,域名必须要备案。我的域名无法备案,所以我就直接用公网 IP 了。

如果暂时用不到 DNS 功能,可以先将 magic_dns 设为 false。

可自定义私有网段,也可同时开启 IPv4 和 IPv6:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ip_prefixes:
  # - fd7a:115c:a1e0::/48
  - 10.1.0.0/16

创建 SystemD service 配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# /etc/systemd/system/headscale.service
[Unit]
Description=headscale controller
After=syslog.target
After=network.target

[Service]
Type=simple
User=headscale
Group=headscale
ExecStart=/usr/local/bin/headscale serve
Restart=always
RestartSec=5

# Optional security enhancements
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/headscale /var/run/headscale
AmbientCapabilities=CAP_NET_BIND_SERVICE
RuntimeDirectory=headscale

[Install]
WantedBy=multi-user.target

创建 headscale 用户:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ useradd headscale -d /home/headscale -m

修改 /var/lib/headscale 目录的 owner:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ chown headscale:headscale /var/lib/headscale

修改配置文件中的 unix_socket

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
unix_socket: /var/run/headscale/headscale.sock

Reload SystemD 以加载新的配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ systemctl daemon-reload

启动 Headscale 服务并设置开机自启:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ systemctl enable --now headscale

查看运行状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ systemctl status headscale

查看占用端口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ss -tulnp|grep headscale

tcp LISTEN 0 1024 [::]:9090 [::]:* users:(("headscale",pi

d=10899,fd=13))

tcp LISTEN 0 1024 [::]:50443 [::]:* users:(("headscale",pi

d=10899,fd=10))

tcp LISTEN 0 1024 [::]:8080 [::]:* users:(("headscale",pi

d=10899,fd=12))

Tailscale 中有一个概念叫 tailnet,你可以理解成租户,租户与租户之间是相互隔离的,具体看参考 Tailscale 的官方文档:What is a tailnet[5]。Headscale 也有类似的实现叫 namespace,即命名空间。我们需要先创建一个 namespace,以便后续客户端接入,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ headscale namespaces create default

查看命名空间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ headscale namespaces list

ID | Name | Created

1 | default | 2022-03-09 06:12:06

Tailscale 客户端接入

目前除了 iOS 客户端,其他平台的客户端都有办法自定义 Tailscale 的控制服务器。

OS

是否支持 Headscale

Linux

Yes

OpenBSD

Yes

FreeBSD

Yes

macOS

Yes

Windows

Yes 参考 Windows 客户端文档[6]

Android

需要自己编译客户端[7]

iOS

暂不支持

我们先来看下 Linux 平台的接入。

Linux

Tailscale 官方提供了各种 Linux 发行版的软件包,但国内的网络你懂得,软件源根本用不了。好在官方还提供了静态编译的二进制文件[8],我们可以直接下载。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ wget https://pkgs.tailscale.com/stable/tailscale_1.22.2_amd64.tgz

解压:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ tar zxvf tailscale_1.22.2_amd64.tgz
x tailscale_1.22.2_amd64/
x tailscale_1.22.2_amd64/tailscale
x tailscale_1.22.2_amd64/tailscaled
x tailscale_1.22.2_amd64/systemd/
x tailscale_1.22.2_amd64/systemd/tailscaled.defaults
x tailscale_1.22.2_amd64/systemd/tailscaled.service

将二进制文件复制到官方软件包默认的路径下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cp tailscale_1.22.2_amd64/tailscaled /usr/sbin/tailscaled
$ cp tailscale_1.22.2_amd64/tailscale /usr/bin/tailscale

将 systemD service 配置文件复制到系统路径下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cp tailscale_1.22.2_amd64/systemd/tailscaled.service /lib/systemd/system/tailscaled.service

将环境变量配置文件复制到系统路径下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cp tailscale_1.22.2_amd64/systemd/tailscaled.defaults /etc/default/tailscaled

启动 tailscaled.service 并设置开机自启:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ systemctl enable --now tailscaled

查看服务状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ systemctl status tailscaled

Tailscale 接入 Headscale:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 将 <HEADSCALE_PUB_IP> 换成你的 Headscale 公网 IP 或域名
$ tailscale up --login-server=http://<HEADSCALE_PUB_IP>:8080 --accept-routes=true --accept-dns=false

这里推荐将 DNS 功能关闭,因为它会覆盖系统的默认 DNS。如果你对 DNS 有需求,可自己研究官方文档,这里不再赘述。

执行完上面的命令后,会出现下面的信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
To authenticate, visit:

http://xxxxxx:8080/register?key=905cf165204800247fbd33989dbc22be95c987286c45aac303393704

1150d846

在浏览器中打开该链接,就会出现如下的界面:

将其中的命令复制粘贴到 headscale 所在机器的终端中,并将 NAMESPACE 替换为前面所创建的 namespace。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ headscale -n default nodes register --key 905cf165204800247fbd33989dbc22be95c987286c45aac3033937041150d846
Machine register

注册成功,查看注册的节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ headscale nodes list

ID | Name | NodeKey | Namespace | IP addresses | Ephemeral | Last seen | Onlin

e | Expired

1 | coredns | [Ew3RB] | default | 10.1.0.1 | false | 2022-03-20 09:08:58 | onlin

e | no

回到 Tailscale 客户端所在的 Linux 主机,可以看到 Tailscale 会自动创建相关的路由表和 iptables 规则。路由表可通过以下命令查看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ip route show table 52

查看 iptables 规则:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ iptables -S
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N ts-forward
-N ts-input
-A INPUT -j ts-input
-A FORWARD -j ts-forward
-A ts-forward -i tailscale0 -j MARK --set-xmark 0x40000/0xffffffff
-A ts-forward -m mark --mark 0x40000 -j ACCEPT
-A ts-forward -s 100.64.0.0/10 -o tailscale0 -j DROP
-A ts-forward -o tailscale0 -j ACCEPT
-A ts-input -s 10.1.0.5/32 -i lo -j ACCEPT
-A ts-input -s 100.115.92.0/23 ! -i tailscale0 -j RETURN
-A ts-input -s 100.64.0.0/10 ! -i tailscale0 -j DROP

$ iptables -S -t nat
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A ts-postrouting -m mark --mark 0x40000 -j MASQUERADE

macOS

macOS 客户端的安装相对来说就简单多了,只需要在应用商店安装 APP 即可,前提是你需要一个美区 ID。。。

安装完成后还需要做一些骚操作,才能让 Tailscale 使用 Headscale 作为控制服务器。当然,Headscale 已经给我们提供了详细的操作步骤,你只需要在浏览器中打开 URL:http://<HEADSCALE_PUB_IP>:8080/apple,便会出现如下的界面:

你只需要按照图中所述的步骤操作即可,本文就不再赘述了。

修改完成后重启 Tailscale 客户端,在 macOS 顶部状态栏中找到 Tailscale 并点击,然后再点击 Log in

然后立马就会跳转到浏览器并打开一个页面。

接下来与之前 Linux 客户端相同,回到 Headscale 所在的机器执行浏览器中的命令即可,注册成功:

回到 Headscale 所在主机,查看注册的节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ headscale nodes list

ID | Name | NodeKey | Namespace | IP addresses | Ephemeral | Last seen | Onlin

e | Expired

1 | coredns | [Ew3RB] | default | 10.1.0.1 | false | 2022-03-20 09:08:58 | onlin

e | no
2 | carsondemacbook-pro | [k7bzX] | default   | 10.1.0.2     | false     | 2022-03-20 09:48:30 | online  | no

回到 macOS,测试是否能 ping 通对端节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ping -c 2 10.1.0.1
PING 10.1.0.1 (10.1.0.1): 56 data bytes
64 bytes from 10.1.0.1: icmp_seq=0 ttl=64 time=37.025 ms
64 bytes from 10.1.0.1: icmp_seq=1 ttl=64 time=38.181 ms

--- 10.1.0.1 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 37.025/37.603/38.181/0.578 ms

也可以使用 Tailscale CLI 来测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ /Applications/Tailscale.app/Contents/MacOS/Tailscale ping 10.1.0.1
pong from coredns (10.1.0.1) via xxxx:41641 in 36ms

如果你没有美区 ID,无法安装 App,可以直接使用命令行版本,通过 Homebrew 安装即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ brew install tailscale

Android

Android 客户端就比较麻烦了,需要自己修改源代码编译 App,具体可参考这个 issue[9]。编译过程还是比较麻烦的,需要先修改源码,然后构建一个包含编译环境的 Docker 镜像,最后再通过该镜像启动容器编译 apk。

我知道很多人一看麻烦就不想搞了,这个问题不大,我送佛送到西,提供了一条龙服务,你只需 fork 我的 GitHub 仓库 tailscale-android[10]

然后在你的仓库中点击 Settings 标签,找到 Secrets 下拉框中的 Actions 选项:

选择 New repository secret 添加一个 secret 叫 HEADSCALE_URL,将你的 Headscale 服务公网地址填入其中:

添加在这里的配置,将只对你可见,不用担心会泄露给他人。

然后点击 Actions 标签,选择 Release Workflow。

你会看到一个 Run workflow 按钮,点击它,然后在下拉框中点击 Run workflow

流水线就会开始执行,执行成功后就会在 Release 页面看到编译好的 apk。

接下来的事情就简单了,下载这个 apk 到你的 Android 手机上安装就好了。安装完成后打开 Tailscale App,选择 Sign in with other

然后就会跳出这个页面:

将其中的命令粘贴到 Headscale 所在主机的终端,将 NAMESPACE 替换为之前创建的 namespace,然后执行命令即可。注册成功后可将该页面关闭,回到 App 主页,效果如图:

回到之前的 GitHub 仓库,刚才我们是通过手动触发 Workflow 来编译 apk 的,有没有办法自动编译呢?只要 Tailscale 官方仓库有更新,就立即触发 Workflow 开始编译。

那当然是可以实现的,而且我已经实现了,仔细看 GitHub Actions 的编排文件:

红框圈出来的部分表示只要仓库的 main 分支有更新,便会触发 Workflow。现在的问题是如何让 main 分支和上游官方仓库一致,一直保持在最新状态。

这个问题使用第三方 Github App 就可以解决,这个 App 名字简单粗暴,就叫 Pull[11],它的作用非也很简单粗暴:保持你的 Fork 在最新状态。

Pull 的使用方法很简单:

  1. 打开 Pull App[12] 页面
  2. 点击右上角绿色的 install 按钮
  1. 在选项页面,使用默认的 All repositories 即可(你也可以选择指定的仓库,比如 tailscale-android),然后点击绿色的 install 按钮:

简单三步,Pull App 就安装好了。接下来 Pull App 会每天定时帮你更新代码库,使你 fork 的代码始终是最新版的。

Windows

Windows Tailscale 客户端想要使用 Headscale 作为控制服务器,只需在浏览器中打开 URL:http://<HEADSCALE_PUB_IP>:8080/windows,便会出现如下的界面:

按照其中的步骤操作即可。

其他 Linux 发行版

除了常规的 Linux 发行版之外,还有一些特殊场景的 Linux 发行版,比如 OpenWrt、威联通(QNAP)、群晖等,这些发行版的安装方法已经有人写好了,这里就不详细描述了,我只给出相关的 GitHub 仓库,大家如果自己有需求,直接去看相关仓库的文档即可。

  • OpenWrt:https://github.com/adyanth/openwrt-tailscale-enabler
  • 群晖:https://github.com/tailscale/tailscale-synology
  • 威联通:https://github.com/ivokub/tailscale-qpkg

iOS

Tailscale iOS 客户端源代码没有开源,目前还无法破解使其使用第三方控制服务器,遗憾~~

打通局域网

到目前为止我们只是打造了一个点对点的 Mesh 网络,各个节点之间都可以通过 WireGuard 的私有网络 IP 进行直连。但我们可以更大胆一点,还记得我在文章开头提到的访问家庭内网的资源吗?我们可以通过适当的配置让每个节点都能访问其他节点的局域网 IP。这个使用场景就比较多了,你可以直接访问家庭内网的 NAS,或者内网的任何一个服务,更高级的玩家可以使用这个方法来访问云上 Kubernetes 集群的 Pod IP 和 Service IP。

假设你的家庭内网有一台 Linux 主机(比如 OpenWrt)安装了 Tailscale 客户端,我们希望其他 Tailscale 客户端可以直接通过家中的局域网 IP(例如 192.168.100.0/24) 访问家庭内网的任何一台设备。

配置方法很简单,首先需要设置 IPv4 与 IPv6 路由转发:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ echo 'net.ipv4.ip_forward = 1' | tee /etc/sysctl.d/ipforwarding.conf
$ echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.d/ipforwarding.conf
$ sysctl -p /etc/sysctl.d/ipforwarding.conf

客户端修改注册节点的命令,在原来命令的基础上加上参数 --advertise-routes=192.168.100.0/24

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ tailscale up --login-server=http://<HEADSCALE_PUB_IP>:8080 --accept-routes=true --accept-dns=false --advertise-routes=192.168.100.0/24

在 Headscale 端查看路由,可以看到相关路由是关闭的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ headscale nodes list|grep openwrt

6 | openwrt | [7LdVc] | default | 10.1.0.6 | false | 2022-03-20 15:50:46 | onlin

e | no

$ headscale routes list -i 6

Route | Enabled

192.168.100.0/24 | false

开启路由:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ headscale routes enable -i 6 -r "192.168.100.0/24"

Route | Enabled

192.168.100.0/24 | true

其他节点查看路由结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ip route show table 52|grep "192.168.100.0/24"
192.168.100.0/24 dev tailscale0

现在你在任何一个 Tailscale 客户端所在的节点都可以 ping 通家庭内网的机器了,你在公司或者星巴克也可以像在家里一样用同样的 IP 随意访问家中的任何一个设备,就问你香不香?

总结

目前从稳定性来看,Tailscale 比 Netmaker 略胜一筹,基本上不会像 Netmaker 一样时不时出现 ping 不通的情况,这取决于 Tailscale 在用户态对 NAT 穿透所做的种种优化,他们还专门写了一篇文章介绍 NAT 穿透的原理[13]中文版[14]由国内的 eBPF 大佬赵亚楠翻译,墙裂推荐大家阅读。放一张图给大家感受一下:

本文给大家介绍了 Tailscale 和 Headscale,包括 Headscale 的安装部署和各个平台客户端的接入,以及如何打通各个节点所在的局域网。下篇文章将会给大家介绍如何让 Tailscale 使用自定义的 DERP Servers(也就是中继服务器),See you~~

引用链接

[1]

全互联模式(full mesh): https://fuckcloudnative.io/posts/wireguard-full-mesh/#1-全互联模式架构与配置

[2]

Netmaker: https://fuckcloudnative.io/posts/configure-a-mesh-network-with-netmaker/

[3]

GitHub 仓库: https://github.com/tailscale/

[4]

Headscale: https://github.com/juanfont/headscale

[5]

What is a tailnet: https://tailscale.com/kb/1136/tailnet/

[6]

Windows 客户端文档: https://github.com/juanfont/headscale/blob/main/docs/windows-client.md

[7]

需要自己编译客户端: https://github.com/juanfont/headscale/issues/58#issuecomment-950386833

[8]

静态编译的二进制文件: https://tailscale.com/download/linux/static

[9]

这个 issue: https://github.com/juanfont/headscale/issues/58#issuecomment-950386833

[10]

tailscale-android: https://github.com/yangchuansheng/tailscale-android

[11]

Pull: https://github.com/apps/pull

[12]

Pull App: https://github.com/apps/pull

[13]

NAT 穿透的原理: https://tailscale.com/blog/how-nat-traversal-works/

[14]

中文版: https://arthurchiao.art/blog/how-nat-traversal-works-zh/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
大佬,遇到一个问题,执行 $ headscale namespaces create default 创建命名空间时,返回 FTL ../home/runner/work/headscale/headscale/cmd/headscale/cli/utils.go:122 > Could not connect: context deadline exceeded error="context deadline exceeded" 这个有啥解么
大佬,遇到一个问题,执行 $ headscale namespaces create default 创建命名空间时,返回 FTL ../home/runner/work/headscale/headscale/cmd/headscale/cli/utils.go:122 > Could not connect: context deadline exceeded error="context deadline exceeded" 这个有啥解么
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
贫苦家庭与野生公有云之间的 WireGuard Mesh 组网策略
熟悉我的小伙伴都知道我是一名与时俱进的 WireGuard 舔狗,我早就把所有的跨云组网都换成了 WireGuard。
米开朗基杨
2021/11/10
4.7K0
【Tailscale】自建境内Headscale实现点对点直连异地组网——以双栈腾讯云轻量为例
Tailscale是一个与ZeroTier、Netbird等工具类似的异地组网工具,支持通过STUN打洞实现客户端点对点直连,互联协议基于go实现的WireGuard,兼具高效与安全的特性。
LMSKK
2024/10/13
4.4K0
【Tailscale】自建境内Headscale实现点对点直连异地组网——以双栈腾讯云轻量为例
【里程碑】WireGuard系列文章(七):使用WireGuard和Netmaker创建Full Mesh网络
2.WireGuard 系列文章(二):WireGuard 简介 - 快速、现代、安全的 V** 隧道[2]
东风微鸣
2022/04/22
5K0
【里程碑】WireGuard系列文章(七):使用WireGuard和Netmaker创建Full Mesh网络
WireGuard 全互联模式终极指南(上)!
大家好,我是米开朗基杨。 关注我的读者应该都还记得我之前写过一篇 👉WireGuard 全互联模式 (full mesh) 的配置指南,限于当时还没有成熟的产品来帮助我们简化全互联模式的配置,所以我选择了使用可视化界面 👉wg-gen-web 来达成目的。但 👉wg-gen-web 的缺陷也很明显,它生成的每一个客户端的配置都要手动调整,终究还是不够便利。 今天我将为大家介绍一种更加完美的工具来配置 WireGuard 的全互联模式,这个工具就是 Netmaker[1]。 由于篇幅原因,本系列文章将会分成两
米开朗基杨
2021/10/27
8.6K1
WireGuard 全互联模式终极指南(上)!
Headscale搭建P2P内网穿透
究其根本因素在于, 在传统架构中如果两个位于多层 NAT(简单理解为多个路由器)之后的设备, 只能通过一些中央 (VPN / 远程软件) 中转服务器进行链接, 这时网络连接速度取决于中央服务器带宽和速度; 这种网络架构我这里简称为: 星型拓扑
入门笔记
2022/11/14
6.1K1
Headscale搭建P2P内网穿透
自建 DERP 中继服务器,从此 Tailscale 畅通无阻
原文链接🔗 https://fuckcloudnative.io/posts/custom-derp-servers/ 👉上篇文章介绍了如何使用 Headscale 替代 Tailscale 官方的控制服务器,并接入各个平台的客户端。本文将会介绍如何让 Tailscale 使用自定义的 DERP Servers。可能很多人都不知道 DERP 是个啥玩意儿,没关系,我先从中继服务器开始讲起。 STUN 是什么 Tailscale 的终极目标是让两台处于网络上的任何位置的机器建立点对点连接(直连),但现实世
米开朗基杨
2022/04/11
29.8K1
自建 DERP 中继服务器,从此 Tailscale 畅通无阻
比 Tailscale 更好的内网穿透方案 - Headscale
headscale[1] 是一款今年 2021 年出现的一款 Tailscale 控制服务器的开源实现。也是唯一的一款。望能发展壮大。
公众号: 云原生生态圈
2022/04/08
7.2K1
比 Tailscale 更好的内网穿透方案 - Headscale
WireGuard 系列文章(四):WireGuard 快速上手
2.WireGuard 系列文章(二):WireGuard 简介 - 快速、现代、安全的 V** 隧道[2]
东风微鸣
2022/04/22
6.6K0
WireGuard 系列文章(四):WireGuard 快速上手
Openwrt 使用 Wireguard 异地组网(远程家庭网所有设备)
最近入手了一款友善 Nano pi (型号 FriendlyElec NanoPi R2S (CpuMark : 20651.944334 Scores)),直接作为家庭内网的主路由使用,各项性能比之前的 新路由3 要好太多了。
宋天伦
2023/10/20
13.5K0
Openwrt 使用 Wireguard 异地组网(远程家庭网所有设备)
下一代VPN工具:体验TailScale的简便和高效
tailscale管理端:https://login.tailscale.com/admin/machines
小尘要自信
2023/11/16
8.9K0
下一代VPN工具:体验TailScale的简便和高效
Tailscale ACL 访问控制策略完全指南!
❝原文链接🔗:https://icloudnative.io/posts/tailscale-acls/ 大家好,我是米开朗基杨。 前面几篇文章给大家给介绍了 Tailscale 和 Headscale,包括 👉Headscale 的安装部署和各个平台客户端的接入,以及如何打通各个节点所在的局域网。同时还介绍了👉如何自建私有的 DERP 服务器,并让 Tailscale 使用我们自建的 DERP 服务器。 还没看的赶紧去看!👇 芜湖,Tailscale 开源版本让你的 WireGuard 直接起飞~ 自建
米开朗基杨
2023/01/09
3.8K0
NAS新福音,“Tailscale”解决你的公网安全焦虑的新方案!(免费+开源+不限流量+内网穿透)
近期阿祥发表的文章“如何让自己家里NAS硬盘的小电影不被发现?现在就教你涨知识了!”引发了很多粉丝的关注和支持。而其中关于“使用桥接获取公网ip的方式”引发很多粉丝的争论,有些粉丝认为公网ip获取不到,有些粉丝认为获取了公网ip,也是存在一定的安全风险。这里想说的是条条道路通罗马,需求不同就会有不同的解决方式。既然有不同的需求场景,那阿祥就用两期的文章介绍内网穿透工具tailscale和szrotier,这两工具可以使个人在外地就能访问访问家里的电脑和NAS,来解决粉丝们公网和安全方面的顾虑。本文先介绍第一个工具tailscale。
ICT系统集成阿祥
2024/12/03
6.5K1
NAS新福音,“Tailscale”解决你的公网安全焦虑的新方案!(免费+开源+不限流量+内网穿透)
WireGuard 系列文章(六):Netmaker 安装
2.WireGuard 系列文章(二):WireGuard 简介 - 快速、现代、安全的 V** 隧道[2
东风微鸣
2022/04/22
4K0
WireGuard 系列文章(六):Netmaker 安装
基于 WireGuard 和 OpenVPN 的混合云基础架构建设
可以找一台能联网的 centos7 测试一下这个端口,如果没有 nc 工具可以yum install nc安装下。:
米开朗基杨
2021/04/23
8.1K1
基于 WireGuard 和 OpenVPN 的混合云基础架构建设
netmarker安装部署
Netmaker 是一个用来配置 WireGuard 全互联模式的可视化工具,它的功能非常强大,不仅支持 UDP 打洞、NAT 穿透、多租户,还可以使用 Kubernetes 配置清单来部署,客户端几乎适配了所有平台,包括 Linux, Mac 和 Windows,还可以通过 WireGuard 原生客户端连接 iPhone 和 Android。
吴易娃
2024/07/23
6480
netmarker安装部署
OpenWRT搭建WireGuard服务器
By HKL, on Friday 2019-11-29 15:25, tagged: 🏷️Networking 🏷️Operating
hiplon
2023/10/18
4.7K0
OpenWRT搭建WireGuard服务器
【运维】Wireguard+OpenVPN解决跨地区VPN的连接稳定性问题
UDP在实际使用上可能会被QOS限速,但是在长距离、高延迟的VPN环境中还是可以发挥不错的效果,不容易出现TCP经常断连的情况。
正汰
2024/01/16
4.5K0
【运维】Wireguard+OpenVPN解决跨地区VPN的连接稳定性问题
Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全
•Nomad 系列文章[1]•Traefik 系列文章[2]•Tailscale 系列文章[3]
东风微鸣
2023/09/14
6300
Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全
Tailscale 构建私有网络访问家中设备
在此前,我都是通过一些硬件设备来构建一个私有网络,并且能有一个稳定的公网 IP,外部可以通过设备厂商对应的外部资源来构建一个私有网络,随时随地访问家中设备,如:NAS 。但,人生无常,大肠包小肠,最近很不稳定,于是准备了一个后手方案,防止意外。
LinkinStar
2023/10/18
1.7K0
Fedora33下搭建WireGuard虚拟专用网
WireGuard 是一个易于配置、快速且安全的开源 Virtual Private Network,它利用了最新的加密技术。目的是提供一种更快、更简单、更精简的通用 Virtual Private Network,它可以轻松地在树莓派这类低端设备到高端服务器上部署。
yuanfan2012
2020/12/31
2.4K0
Fedora33下搭建WireGuard虚拟专用网
推荐阅读
相关推荐
贫苦家庭与野生公有云之间的 WireGuard Mesh 组网策略
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验