Headscale+Derp+Tailscale v1.0

[begin] WireGuard [/begin]  是一个易于配置、快速且安全的开源 VPN,它利用了最新的加密技术。目的是提供一种更快、更简单、更精简的通用 VPN,它可以轻松地在树莓派这类低端设备到高端服务器上部署。

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

[begin] Derp Server [/begin] 即 Detoured Encrypted Routing Protocol,这是 Tailscale 自研的一个协议。Tailscale 会自动选择离目标节点最近的 DERP server 来中继流量。所有客户端之间的连接都是先选择 DERP 模式(中继模式),这意味着连接立即就能建立(优先级最低但 100% 能成功的模式),用户不用任何等待。然后开始并行地进行路径发现,通常几秒钟之后,我们就能发现一条更优路径,然后将现有连接透明升级(upgrade)过去,变成点对点连接(直连)。因此,DERP 既是 Tailscale 在 NAT 穿透失败时的保底通信方式(此时的角色与 TURN 类似),也是在其他一些场景下帮助我们完成 NAT 穿透的旁路信道。换句话说,它既是我们的保底方式,也是有更好的穿透链路时,帮助我们进行连接升级(upgrade to a peer-to-peer connection)的基础设施。

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

更新

v1.0 基础内容(2022.09.03)

一. 安装部署

1.1 Headscale 部署

1.1.1 Headscale 是什么

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

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

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

1.1.2 二进制部署

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

首先ssh进入云服务器

输入命令

wget --output-document=/usr/local/bin/headscale \

需要到其 GitHub 仓库的 Release 页面下载最新版的二进制文件。
进入GitHuib官网

  • 搜索
  • juanfont/headscale
  • 点击Release页面
  • 找到对应云服务器系统的二进制文件
  • 复制链接地址
  • 黏贴至云服务器命令行中
  • 下载至指定路径中
图片[1]-Headscale+Derp+Tailscale v1.0-奥力呦给

如下

wget --output-document=/usr/local/bin/headscale \
https://github.com/juanfont/headscale/releases/download/v0.15.0/headscale_0.15.0_linux_amd64

对该文件赋权为可执行文件

chmod +x /usr/local/bin/headscale

创建配置目录:

mkdir -p /etc/headscale

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

mkdir -p /var/lib/headscale

创建空的 SQLite 数据库文件:

touch /var/lib/headscale/db.sqlite

下载 Headscale 配置文件:

wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /etc/headscale/config.yaml
  • 修改配置文件,将 server_url 改为公网 IP 或域名。如果是国内服务器,域名必须要备案。我的域名无法备案,所以我就直接用公网 IP 了。
图片[2]-Headscale+Derp+Tailscale v1.0-奥力呦给
  • 可自定义私有网段,也可同时开启 IPv4 和 IPv6:
图片[3]-Headscale+Derp+Tailscale v1.0-奥力呦给
  • 可定义DNS服务器
图片[4]-Headscale+Derp+Tailscale v1.0-奥力呦给
  • 定义headscale.sock文件位置,修改配置文件中的 unix_socket
图片[5]-Headscale+Derp+Tailscale v1.0-奥力呦给

创建 Systemd Service 配置文件

nano /etc/systemd/system/headscale.service

在headscale.service中添加如下配置

# /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 用户:

useradd headscale -d /home/headscale -m

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

chown -R headscale:headscale /var/lib/headscale

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

systemctl daemon-reload

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

systemctl enable --now headscale

查看运行状态:

systemctl status headscale

active(running):正在运行

图片[6]-Headscale+Derp+Tailscale v1.0-奥力呦给

查看占用端口:

ss -tulnp|grep headscale
图片[7]-Headscale+Derp+Tailscale v1.0-奥力呦给

在域名托管平台解析对应域名至云服务器公网ip

图片[8]-Headscale+Derp+Tailscale v1.0-奥力呦给

使用Nginx反向代理隐藏端口号

1.1.3 Headscale总结

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

1.2 Derp Server 部署

1.2.1 Derp Server 二进制部署-安装Golang环境

安装golang环境
进入官网下载地址
https://studygolang.com/dl/golang/
查看最新版本

图片[9]-Headscale+Derp+Tailscale v1.0-奥力呦给

ailscale项目使用的golang环境比较新,部署自定义derper服务要求golang版本1.16以上。推荐尽可能安装最新的版本,本文安装目前最新版本 1.18.4。

下载

golang官网在国外,直接从官网下载会比较慢,可以选择国内镜像站下载,如

wget https://studygolang.com/dl/golang/go1.18.4.linux-amd64.tar.gz

注意选择服务器的架构,本文中选择的是amd64架构也就是x86的64位处理器,系统Linux。

解压安装

tar -C /usr/local -xzf go1.18.4.linux-amd64.tar.gz

设置环境变量

编辑 /etc/profile文件,添加如下内容。编辑文件可以使用vim或者宝塔等其他工具。

nano /etc/profile

添加以下环境变量

export GOROOT=/usr/local/go
export GOPATH=/root/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin

保存退出后,执行以下命令使环境变量生效

source /etc/profile

检查golang是否安装成功

go version

查看golang版本,如果有相应信息返回,则说明golang环境安装成功。

图片[10]-Headscale+Derp+Tailscale v1.0-奥力呦给

1.2.2 Derp Server 二进制安装

下载

安装derper服务,执行以下命令

go install tailscale.com/cmd/derper@main

等待下载安装完成,查看是否安装成功

检查

derper -h

如果有以下提示信息

Usage of derper:
  -a string
        server address (default ":443")
  -bootstrap-dns-names string
        optional comma-separated list of hostnames to make available at /bootstrap-dns
  -c string
        config file path
  -certdir string
        directory to store LetsEncrypt certs, if addr's port is :443 (default "/root/.cache/tailscale/derper-certs")
  -dev
        run in localhost development mode
  -hostname string
        LetsEncrypt host name, if addr's port is :443 (default "derp.tailscale.com")
  -logcollection string
        If non-empty, logtail collection to log to
  -mesh-psk-file string
        if non-empty, path to file containing the mesh pre-shared key file. It should contain some hex string; whitespace is trimmed.
  -mesh-with string
        optional comma-separated list of hostnames to mesh with; the server's own hostname can be in the list
  -stun
        also run a STUN server
  -verify-clients
        verify clients to this DERP server through a local tailscaled instance.

则说明derper安装成功

部署好 derper 之后,就可以修改 Headscale 的配置来使用自定义的 DERP 服务器了。Headscale 可以通过两种形式的配置来使用自定义 DERP:

  • 一种是在线 URL,格式是 JSON,与 Tailscale 官方控制服务器使用的格式和语法相同。
  • 另一种是本地文件,格式是 YAML

我们可以直接使用本地的 YAML 配置文件,内容如下:

进入路径

cd /etc/headscale/

创建derp.yaml配置文件

nano derp.yaml

拷贝配置

# /etc/headscale/derp.yaml
regions:
  900:
    regionid: 900
    regioncode: thk 
    regionname: Tencent Hongkong 
    nodes:
      - name: 900a
        regionid: 900
        hostname: xxxx
        ipv4: xxxx
        stunport: 3478
        stunonly: false
        derpport: 12345

配置说明:

  • regions 是 YAML 中的对象,下面的每一个对象表示一个可用区,每个可用区里面可设置多个 DERP 节点,即 nodes
  • 每个可用区的 regionid 不能重复。
  • 每个 node 的 name 不能重复。
  • regionname 一般用来描述可用区,regioncode 一般设置成可用区的缩写。
  • ipv4 字段不是必须的,如果你的域名可以通过公网解析到你的 DERP 服务器地址,这里可以不填。如果你使用了一个二级域名,而这个域名你并没有在公共 DNS server 中添加相关的解析记录,那么这里就需要指定 IP(前提是你的证书包含了这个二级域名,这个很好支持,搞个泛域名证书就行了)。
  • stunonly: false 表示除了使用 STUN 服务,还可以使用 DERP 服务。
  • 上面的配置中域名和 IP 部分我都打码了,你需要根据你的实际情况填写。

接下来还需要修改 Headscale 的配置文件,引用上面的自定义 DERP 配置文件。需要修改的配置项如下:

nano /etc/headscale/config.yaml

在paths:下添加

/etc/headscale/derp.yaml
图片[11]-Headscale+Derp+Tailscale v1.0-奥力呦给

保存后重启服务

systemctl status headscale

启动derper服务

启动derper服务,执行以下命令即可。在此之前你需要完成以下准备:

  • 拥有一个域名,解析到服务器ip国内则需要先备案国内则需要先备案
  • 服务器安全组和系统防火墙放开443端口、3478端口
derper -c=$HOME/derper.conf -hostname=derp.xxxx.com -stun

当看到以下返回信息,则说明derper服务成功了
另有一条报错,443端口已被占用
因为使用nginx已使用443端口

图片[12]-Headscale+Derp+Tailscale v1.0-奥力呦给

在安装路径下/usr/local/gopath/bin下编写如下脚本:由于官方的443需要设置证书 这里我指定8081端口
如果没有该路径则自行创建
创建路径

mkdir -p /usr/local/gopath/bin/

进入该路径

cd /usr/local/gopath/bin/

创建启动脚本

nano runderper

添加配置

#!/bin/sh
cd /usr/local/gopath/bin
nohup ./derper -hostname derp.aoliyougei.com -c=derper.conf -a :8081 -http-port -1 -certdir /usr/local/cert -certmode manual -stun &
echo $! > app.pid

赋权runderper,可执行

chmod +x runderper

创建停止脚本

nano stopderper.sh

添加配置

#!/bin/sh

kill `cat app.pid`
rm -rf app.pid

赋权stopderper.sh,可执行

chmod +x stopderper.sh

然后在路径/etc/systemd/system目录中添加服务脚本derper.service 脚本内容如下

进入system路径

cd /etc/systemd/system/

创建启动服务

nano derper.service

添加配置

Description=derper服务
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/gopath/bin/runderper
ExecStop=/usr/local/gopath/bin/stopderper.sh

[Install]
WantedBy=multi-user.target

然后启动服务并设置开机启动,这样就可以守护程序不被恶意停止,依次执行如下命令

systemctl start derper
systemctl enable derper

重启服务器

reboot

验证是否正常启动

systemctl status derper

报错,提示该路径无执行文件

图片[13]-Headscale+Derp+Tailscale v1.0-奥力呦给

查找derper二进制文件位置

find / -name "derper"
图片[14]-Headscale+Derp+Tailscale v1.0-奥力呦给

拷贝derper文件至/usr/local/gopath/bin/路径中

cp /root/go/bin/derper /usr/local/gopath/bin/

再次重启

reboot

验证是否正常启动

systemctl status derper

报错,提示/usr/local/cert/你的域名.crt 缺少证书文件

图片[15]-Headscale+Derp+Tailscale v1.0-奥力呦给

进入路径nginx/letsencrypt/archive/,查看现有证书
由于我们还没为这个域名创建证书,并且之前只为其他域名创建了一个证书,故只有一个NPM-3文件夹

图片[16]-Headscale+Derp+Tailscale v1.0-奥力呦给

使用npm创建好域名然后申请证书再次查看多出一个npm-7文件夹

图片[17]-Headscale+Derp+Tailscale v1.0-奥力呦给

进入该文件夹

cd npm-7

fullchain1.pem:公钥
privkey1.pem:私钥

图片[18]-Headscale+Derp+Tailscale v1.0-奥力呦给

报错,没有该路径
手动创建

mkdir -p /usr/local/cert/

拷贝证书并重新命名至/usr/local/cert/

 cp /data/Docker/NPM/letsencrypt/archive/npm-7/fullchain1.pem /usr/local/cert/你的域名.crt
 cp /data/Docker/NPM/letsencrypt/archive/npm-7/privkey1.pem /usr/local/cert/你的域名.key

重启服务器

reboot

查看derper启动状态

systemctl status derper
图片[19]-Headscale+Derp+Tailscale v1.0-奥力呦给

验证derper服务器
输入hppts://你的域名:端口号

图片[20]-Headscale+Derp+Tailscale v1.0-奥力呦给

1.3 Tailscale 客户端部署

1.3.1 Linux 二进制文件安装

编译安装-二进制文件

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

wget https://pkgs.tailscale.com/stable/tailscale_1.26.2_amd64.tgz

解压:

tar zxvf tailscale_1.26.2_amd64.tgz

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

cp tailscale_1.26.2_amd64/tailscaled /usr/sbin/tailscaled
cp tailscale_1.26.2_amd64/tailscale /usr/bin/tailscale

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

cp tailscale_1.26.2_amd64/systemd/tailscaled.service /lib/systemd/system/tailscaled.service

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

cp tailscale_1.26.2_amd64/systemd/tailscaled.defaults /etc/default/tailscaled

遇到报错,提示tailscaled.service被锁定
Failed to start tailscaled.service: Unit tailscaled.service is masked.

解锁tailscaled.service

systemctl unmask tailscaled.service

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

systemctl enable --now tailscaled

查看服务状态:

systemctl status tailscaled

验证是否安装成功

tailscale version

1.3.2 Linux 官方脚本安装

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

验证是否安装成功

tailscale version

1.3.3 macOS 安装

macOS 有 3 种安装方法:

这三种安装包的核心数据包处理代码是相同的,唯一的区别在于在于打包方式以及与系统的交互方式。

应用商店里的应用运行在一个 应用沙箱中,与系统的其他部分隔离。在沙箱内,应用可以是一个 网络扩展,以实现 VPN 或者类 VPN 的功能。网络扩展实现的功能对应用商店之外的应用是无法生效的。

从 macOS 从 10.15 开始新增了 系统扩展,说白了就是运行在用户态的内核扩展,它相比于传统的网络扩展增强了很多功能,比如内容过滤、透明代理、DNS 代理等。Tailscale 独立于应用商店的安装包使用的就是系统扩展,通过 DMG 或者 zip 压缩包进行分发。

⚠️注意:不要同时安装应用商店版本和独立分发版本,同时只能装一个。

而命令行工具既没有使用网络扩展也没有使用系统扩展,而是使用的 utun 接口,相比于 GUI 版本缺少了部分功能,比如 MagicDNS 和 Taildrop。

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

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

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

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

1.3.4 Android 安装

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

我知道很多人一看麻烦就不想搞了,这个问题不大,已经有人 fork 了官方仓库并修改源码加入了自定义的控制服务器,具体改动可参考这个 PR: Add ability to choose a custom coordination server

我们只需进入该仓库的 Actions 页面,

然后进入运行成功的最新的 Workflow,就可以下载最新的 apk 了。

安装完成后打开 Tailscale App,选择 “Use login server”。

然后在输入框内输入你的控制服务器地址,例如 http://xxxx:8080。

然后点击 “Save and restart”,再重新打开 App,再次选择 “Use login server”,就会跳出这个页面:

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

1.3.5 Windows

Windows Tailscale 客户端想要使用 Headscale 作为控制服务器,只需在浏览器中打开 URL:http://<HEADSCALE_PUB_IP>:8080/windows,按照其中的步骤操作即可。

1.3.6 其他 Linux 发行版

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

1.3.7 iOS

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

1.3.8 OpenWRT 二进制安装

打通局域网

进入github中搜索adyanth/openwrt-tailscale-enabler项目
www.github.com
进入客户端下载标签

图片[21]-Headscale+Derp+Tailscale v1.0-奥力呦给

选择最新的客户端右键拷贝链接地址

图片[22]-Headscale+Derp+Tailscale v1.0-奥力呦给

在服务器中使用wget命令,黏贴入链接地址下载

wget https://github.com/adyanth/openwrt-tailscale-enabler/releases/download/v1.26.1-fbb5ac6-autoupdate/openwrt-tailscale-enabler-v1.26.1-fbb5ac6-autoupdate.tgz

如果下载后文件名为乱码,使用cp命令对该文件重新命名

cp 下载文件的名称 openwrt-tailscale-enabler-v1.26.1-fbb5ac6-autoupdate.tgz

下载完成后使用命令解压

tar x -zvC /root -f openwrt-tailscale-enabler-v1.26.1-fbb5ac6-autoupdate.tgz

解压完成

图片[23]-Headscale+Derp+Tailscale v1.0-奥力呦给

更新系统并安装依赖

opkg update
opkg install libustream-openssl ca-bundle kmod-tun

解压

tar -xf tailscale_1.6.0_arm64.tgz

进入目录

cd tailscale_1.6.0_arm64

三个文件 systemd tailscale tailscaled
systemd openwrt不支持systemd守护进程 systemd目录可以删掉

将 tailscale tailscaled 移动到 /usr/sbin/ 下

mv tailscale tailscaled /usr/sbin/

创建tailscale-procd守护进程

vim /etc/init.d/tailscale

写入
脚本来源

#!/bin/sh /etc/rc.common

# Copyright 2020 Google LLC.
# SPDX-License-Identifier: Apache-2.0

USE_PROCD=1
START=80

start_service() {
  /usr/sbin/tailscaled --cleanup

  procd_open_instance 
  procd_set_param command /usr/sbin/tailscaled

  # Set the port to listen on for incoming VPN packets.
  # Remote nodes will automatically be informed about the new port number,
  # but you might want to configure this in order to set external firewall
  # settings.
  procd_append_param command --port 41641

  # OpenWRT /var is a symlink to /tmp, so write persistent state elsewhere.
  procd_append_param command --state /etc/tailscale/tailscaled.state

  procd_set_param respawn
  procd_set_param stdout 1
  procd_set_param stderr 1

  procd_close_instance
}

stop_service() {
  /usr/sbin/tailscaled --cleanup
}

添加执行权限

chmod +x /etc/init.d/tailscale

启动

/etc/init.d/tailscale start

启动tailscale

/etc/init.d/tailscale start

验证是否安装成功

tailscale version

加入开机自启

/etc/init.d/tailscale enable

二. 配置运行

2.1 Headscale 配置

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

创建空间

headscale namespaces create default

查看命名空间:

headscale namespaces list

查看节点

headscale nodes list

2.2 Tailscale 客户端加入Headscale 服务端

2.2.1 通过 Pre-Authkeys 接入

前面的接入方法都需要服务端同意,步骤比较烦琐,其实还有更简单的方法,可以直接接入,不需要服务端同意。

首先在服务端生成 pre-authkey 的 token,有效期可以设置为 24 小时:

$ headscale preauthkeys create -e 24h -n default

查看已经生成的 key:

$ headscale -n default preauthkeys list
ID | Key                                              | Reusable | Ephemeral | Used  | Expiration          | Created            
1  | 57e419c40e30b0dxxxxxxxf15562c18a8c6xxxx28ae76f57 | false    | false     | false | 2022-05-30 07:14:17 | 2022-05-29 07:14:17

现在新节点就可以无需服务端同意直接接入了:

$ tailscale up --login-server=http://<HEADSCALE_PUB_IP>:8080 --accept-routes=true --accept-dns=false --authkey $KEY

2.2.2 Linux Tailscale 客户端接入

Tailscale 接入 Headscale:
将 换成你的 Headscale 公网 IP 或域名

tailscale up --login-server=https://xxx.xxxx.com --accept-routes=true --accept-dns=false

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

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

To authenticate, visit:

https://xxx.xxxx.com/register?key=905cf165204800247fbd33989dbc22be95c987286c45aac303393704

1150d846

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

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

$ headscale -n default nodes register --key 905cf165204800247fbd33989dbc22be95c987286c45aac3033937041150d846
Machine register

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

$ 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 规则。路由表可通过以下命令查看:

$ ip route show table 52

查看 iptables 规则:

$ 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

2.2.3 OpenWRT Tailscale 客户端接入

加入自建的headscale服务器,公告网段–advertise-routes=192.168.0.0/24

tailscale up --login-server=https://xxx.xxxx.com --accept-routes=true --accept-dns=false --advertise-routes=192.168.0.0/24

验证是否成功链接

ls /etc/rc.d/S*tailscale*

查看中继服务器是否连接

tailscale netcheck

在服务端查看节点ID

headscale nodes list

在服务端查看该openwrt路由,后面数字为节点ID

headscale routes list -i 6
截屏2022-07-16 下午12.38.22.png

开启对应节点路由功能

headscale routes enable -i 5 -r "192.168.0.0/24"
截屏2022-07-16 下午12.41.11.png

其他节点查看路由结果:

ip route show table 52|grep "192.168.0.0/24"

打开openwrt管理后台,自定义防火墙规则,添加一下规则

#tailscale
iptables -I FORWARD -i tailscale0 -j ACCEPT
iptables -I FORWARD -o tailscale0 -j ACCEPT
iptables -t nat -I POSTROUTING -o tailscale0 -j MASQUERADE

打开openwrt管理后台,创建接口

图片[26]-Headscale+Derp+Tailscale v1.0-奥力呦给

设置接口名称

图片[27]-Headscale+Derp+Tailscale v1.0-奥力呦给

填入该节点的ip地址

图片[28]-Headscale+Derp+Tailscale v1.0-奥力呦给

防火墙设置,分配至Lan口

图片[29]-Headscale+Derp+Tailscale v1.0-奥力呦给

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容