爱极客专注分享-好玩的docker应用-源码分享

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

创作不易,欢迎请作者喝杯咖啡☕☕☕

1. 前言

我们这期分享一下tailscale具体的玩法,本文内容细节会非常多,不仅包括了一些简单的玩法和技巧,也包括Tailscale异地组网的玩法,还有docker版的Tailscale玩法以纯IP双战中转服务器的搭建和headscale搭建的玩法等等内容相对来说已经很全了

2. Tailsclae安装方法

安卓,ios,windows,mac都有图形界面,我就不介绍了,大家自行在tailscale官网上下载安装客户端

2.1 openwrt安装

相关地址:https://github.com/adyanth/openwrt-tailscale-enabler

openwrt安装我用的是这个openwrt-tailscale-enabler这个项目,这里感谢作者分享

首先进入项目的releases页面中,复制项目下载地址

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

在openwrt中使用wget工具下载程序文件

使用ssh工具连接openwrt,然后复制这段代码下载程序文件

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

将 root 的内容提取到文件系统根目录

tar x -zvC / -f openwrt-tailscale-enabler-<tag>.tgz

安装 wget 和 tailscale 的先决条件

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

第一次运行tailscale

/etc/init.d/tailscale start
tailscale up --accept-dns=false --advertise-routes=局域网网段/24  

这两个命令都会下载 tailscale 包以将二进制文件保存到 /tmp。/etc/init.d/tailscale 将启动 tailscale 守护进程。下一个命令使用 tailscale CLI 配置登录并添加一些设置以防止 dns 更改和通告路由。使用打印的 URL 登录 tailscale。

此时会显示一条网址,复制到浏览器中打开,授权登录后就添加完成设备了

tailscale开启开机自启

/etc/init.d/tailscale enable

验证是否运行

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

进入tailscale管理后台设置

默认情况下是有密钥过期的,一段时间之后你需要重新登录再进行授权,如何避免这个情况呢,很简单点击这个选项,这个就是进入密钥过期时间的选项
这样这个节点密钥就不会失效

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

进入openwrt后台创建接口及防火墙

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

这时候呢,外面的节点就可以跟局域网的设备进行互访了

补充:如果以上设置完还是不能异地访问,可以用一下命令打开ip转发

# 设置IP转发
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
EOF

# 配置生效
sysctl -p /etc/sysctl.conf

2.2 群晖docker安装

获取sodu权限

sudo -i

输入密码

然后输入这两行代码

echo -e '#!/bin/sh -e \ninsmod /lib/modules/tun.ko' > /usr/local/etc/rc.d/tun.sh
chmod a+x /usr/local/etc/rc.d/tun.sh
/usr/local/etc/rc.d/tun.sh
ls /dev/net/tun

然后复制这段代码

docker run -d \
  --name=ts \
  --restart=always  \
  -v /var/lib:/var/lib \
  -v /dev/net/tun:/dev/net/tun \
  --network=host    \
  --cap-add=NET_ADMIN   \
  --cap-add=NET_RAW \
  --env TS_STATE_DIR=/etc/ts \
  --env TS_SOCKET=/var/run/tailscale/tailscaled.sock \
  --env TS_USERSPACE=false \
  --env TS_ROUTES=局域网网段  \  #这里网段填写NAS局域网网段
  --env TS_EXTRA_ARGS="--accept-routes --advertise-exit-node --reset" \   #--advertise-exit-node 如果你不希望NAS作为全隧道模式的出口
节点的话可以删掉,这里只是备用
  --env TS_AUTHKEY=API密钥   \ Tailscale网络授权密钥
tailscale/tailscale

密钥如何获得呢

登录tailscale管理后台,操作如图

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

等待docker安装完成,输入这行命令查看ip情况

ip addr

看到这个接口,还有虚拟ip,这就说明成功授权了

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

然后和之前一样,登录tailscale管理后台把nas设备的子网打开,别忘了关闭密钥过期。

这时候你的NAS设备可以和其他设备互访了。

下面我要做的是NAS局域网内的设备和其他局域网内的设备互访,

命令行直接执行这行代码

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

3. DERP中转服务器部署

这里中转服务器的玩法还比较特别,因为中转服务器官方的方法是需要一个域名的,而在国内搭建域名是需要备案的,但是我没有备案的域名,所以这期我直接给大家分享一下不需要域名,纯IP的中转服务器的玩法。

3.1 操作环境

3.2 操作步骤

远程登录云服务器 输入这行命令更新软件包

apt update && apt upgrade

安装需要的工具

apt install -y wget git openssl curl

下面我们需要安装一下go,输入这行命令(go的最新下载地址https://go.dev/dl/)

wget https://go.dev/dl/go1.21.2.linux-amd64.tar.gz

运行这行命令解压刚才下载的go

rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.2.linux-amd64.tar.gz

然后输入这两行命令

export PATH=$PATH:/usr/local/go/bin
go version

出现这行命令说明安装成功了

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

下面输入这两行命令,把go添加到环境变量当中方便之后使用

echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
source /etc/profile

下面我们再输入这两行命令,让go可以使用国内的代理源,提高go所需工具的下载速度,(我使用的国外的服务器,所以不需要了)

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

然后输入这行命令,开始拉取并编译Dope中转服务器

go install tailscale.com/cmd/derper@main

然后进入这个目录下面,编辑go文件

cd ~/go/pkg/mod/tailscale.com@v1.1.1-0.20231007034813-6f36f8842c3e/cmd/derper

打开cert.go文件,把这3行注释掉,并保存

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

输入这行命令,对derp进行编译,并输出到指定目录下

go build -o /etc/derp/derper

编译完成后cd到根目录

cd

输入这行命令,查看是否有derper文件

ls /etc/derp

下面我们自签一个域名启用derper

输入这行命令,这里说明一下derp.myself.com这个域名是瞎编的,你自己也可以编一个,或者直接用我的。域名本身不会出现在网络上,只是用来启用derper的运行。

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout /etc/derp/derp.myself.com.key -out /etc/derp/derp.myself.com.crt -subj "/CN=derp.myself.com" -addext "subjectAltName=DNS:derp.myself.com"

下面我们把derper变成服务并启用derper,输入这部分代码
这里说明一下33445是https协议用端口,33446是HTTP协议用端口,这个端口主要是为了防止可能的端口冲突,没有实际的用途
manual然后这个参数的意思是证书采取手动指定的方式,后面这个目录就是证书的目录

顺便提一下,大家需要把云服务器的33445端口和3478端口打开

cat > /etc/systemd/system/derp.service <<EOF
[Unit]
Description=TS Derper
After=network.target
Wants=network.target
[Service]
User=root
Restart=always
ExecStart=/etc/derp/derper -hostname derp.myself.com -a :33445 -http-port 33446 -certmode manual -certdir /etc/derp
RestartPreventExitStatus=1
[Install]
WantedBy=multi-user.target
EOF

输入这行命令开启derp服务开机自启动并运行

systemctl enable derp
systemctl start derp

这时候浏览器输入云服务器的IP+33445端口,注意是HTTPS协议的会显示不安全,点击高级继续就可以,这样就能看到中转服务器在运行

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

然后再登录tailscale管理后台,进入ACL界面,添加我这段代码,注意:代码位置必须严格按照我截图中的位置,save保存

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建
"derpMap": {
        "OmitDefaultRegions": true,
        "Regions": {
            "901": {
                "RegionID":   901,
                "RegionCode": "Myself",
                "RegionName": "Myself Derper",
                "Nodes": [
                    {
                        "Name":             "901a",
                        "RegionID":         901,
                        "DERPPort":         33445,
                        "IPv4":   "服务器IP",
                        "InsecureForTests": true,
                    },
                ],
            },
        },
    },

这时候我们去到一个Tailscale的Linux系统,客户端输入这行命令

tailscale netcheck
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

然后还需要输入这行命令,查看一下中转服务器是不是正常的状态

tailscale status

没有报错就是正常的情况。如果出现这样的信息,说明还是有问题的你需要找一下之前是不是哪一个步骤弄错了

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

这样,IPV4状态下的中转服务器就完成了。但这种情况下,支持公网IPV6的节点是没有办法进行直连的,因为目前他没有IPV6的中转服务器
下面我们要解决的是中转服务器对于IPV6中转的支持其实有两种办法

3.3 IPV6支持

3.3.1 方法一 利用官方IPV6中转服务器

ACL中代码修改

"derpMap": {
        //"OmitDefaultRegions": true,
        "Regions": {
            "901": {
                "RegionID":   901,
                "RegionCode": "Myself",
                "RegionName": "Myself Derper",
                "Nodes": [
                    {
                        "Name":             "901a",
                        "RegionID":         901,
                        "DERPPort":         33445,
                        "IPv4":   "服务器IP",
                        "InsecureForTests": true,
                    },
                ],
            },
            "1":  null,
            "2":  null,
            "3":  null,
            "4":  null,
            "5":  null,
            "6":  null,
            "7":  null,
            "8":  null,
            "9":  null,
            "10": null,
            "11": null,
            "12": null,
            "13": null,
            "14": null,
            "15": null,
            "16": null,
            "17": null,
            "18": null,
            "19": null,
            //"20": null,
            "21": null,
            "22": null,
            "23": null,
            "24": null, 
            "25": null,
        },
    },

3.3.1 方法二 自己云服务器开启ipv6

现在一些云服务器商没有开启这个服务,但是我们可以借助he隧道来实现
让云服务器也有公网IPV6的目标
我们需要打开这个网址https://www.tunnelbroker.net/
这里需要自己注册一下我就不演示了
注册完之后登录进去
点击这里创建隧道,这里需要填你云服务器的公网IP,复制备用

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建云服务器输入这行代码,查看私网ip

ip addr
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

修改云服务器配置文件,帮刚才的代码复制进去

nano /etc/network/interfaces
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

按ctrl+x ,y,回车 保存

reboot重启云服务器,连接云服务

查看ipv6地址

ip addr
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

输入这行命令,查看ipv6是否可用

ping6 240C::6666
Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建

然后再ACL这里添加你云服务器的IPV6地址

Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建
© 版权声明
THE END
喜欢就支持一下吧
点赞12赞赏分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容