INFO
Categories

Tailscale基本部署+Derp中转部署

一、为何选择Tailscale

序号工具需要公网IP?中转/打洞?说明
1Frp受限于中转要你何用?
2ZerotierNoP2P直连备选,听说效率没有Tailscale高
3WireGuardNoP2P直连很好的技术,但设置较复杂
4TailscaleNoP2P直连较新技术,基于WireGuard

二、各终端部署

安装各平台/操作系统的客户端程序即可,分别有Windows/IOS/Android/Linux。与其他系统傻瓜式的安装流程相比,Linux当然是最复杂的,鉴于稳定性及灵活性考虑,我们选择小虚拟机Docker安装。

三、Derp安装

# 更新软件包列表 & 升级系统
sudo apt update && sudo apt upgrade -y

# 安装基本依赖
sudo apt install -y wget git openssl curl

# 下载Golang,我使用的是x86_64版本,您也可以根据需要选择合适的版本 [All releases - The Go Programming Language](https://go.dev/dl/) 
wget https://go.dev/dl/go1.24.4.linux-amd64.tar.gz

# 删除旧的Golang并解压新的内容
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.24.4.linux-amd64.tar.gz 

# 配置环境变量
echo "export PATH=$PATH:/usr/local/go/bin" >> /root/.bashrc
echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
source /root/.bashrc
source /etc/profile

# 检查Golang是否安装成功
go version

# 配置Golang环境(国外服务器可跳过)
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

# 安装Tailscale Derper
go install tailscale.com/cmd/derper@main

# 创建 /etc/derp 文件夹并赋予权限,以便后续修改文件重新编译到这里
mkdir -p /etc/derp/
chmod 777 /etc/derp/

# 进入到编译好的文件夹
cd ~/go/pkg/mod/tailscale.com@v1.67.0-pre.0.20240527202236-f1d10c12acf6/cmd/derper(要根据自己情况改)

# 编辑 cert.go 文件
vi cert.go

# 找到以下内容并将部分代码注释
// 原始代码
func (m *manualCertManager) getCertificate(hi *tls.ClientHelloInfo) (*tls.Certificate, error) {

    if hi.ServerName != m.hostname {

        return nil, fmt.Errorf("cert mismatch with hostname: %q", hi.ServerName)

    }
    
// 改为
func (m *manualCertManager) getCertificate(hi *tls.ClientHelloInfo) (*tls.Certificate, error) {

    // if hi.ServerName != m.hostname {

    //     return nil, fmt.Errorf("cert mismatch with hostname: %q", hi.ServerName)

    // }

# 编译文件到之前创建的文件夹
go build -o /etc/derp/derper

# 查看是否存在 derper 文件
ls /etc/derp

# 生成(自签)SSL证书
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"

# 开放端口(重要)
自行开放33445(tcp)、3478(udp)端口

开放端口(重要)

自行开放33445(tcp)、3478(udp)端口,如Centos8

firewall-cmd –zone=public –add-port=33445/tcp –permanent
firewall-cmd –zone=public –add-port=33445/udp –permanent
firewall-cmd –reload
firewall-cmd –list-ports

设置开机自启(创建derp.service)

sh -c "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 -stun -stun-port 3478 -http-port 33446 -certmode manual -certdir /etc/derp

RestartPreventExitStatus=1

[Install]

WantedBy=multi-user.target

EOF
"

启动服务

systemctl enable derp
systemctl start derp

验证 DERP 服务

浏览器打开:https://ip+33445 页面正常显示 DERP 即可

修改Tailscale 配置文件

  • IPv4 修改为自己服务器的 IP
  • RegionCode 自定义即可
  • RegionName 自定义即可
"derpMap": {
        "OmitDefaultRegions": true,
        "Regions": {
            "901": {
                "RegionID":   901,
                "RegionCode": "JP",
                "RegionName": "JP Derper",
                "Nodes": [
                    {
                        "Name":             "901",
                        "RegionID":         901,
                        "IPv4":             "XXX.XXX.XXX.XXX",
                        "DERPPort":         33445,
                        "STUNPort":         3478,
                        "InsecureForTests": true,
                    },
                ],
            },
        },
    },

检查可用性

在任意链接 Tailscale 的电脑上终端输入 tailscale netcheck

PS C:\Users\Administrator> tailscale netcheck

Report:
        * UDP: false
        * IPv4: (no addr found)
        * IPv6: no, but OS has support
        * MappingVariesByDestIP:
        * PortMapping:
        * CaptivePortal: false
        * Nearest DERP: ivwv· Derper
        * DERP latency:
                - ivwv·derp: 157.4ms (ivwv· Derper)
PS C:\Users\Administrator>

看到 - ivwv·derp: 157.4ms (ivwv· Derper) 有回显延迟即正确部署完毕

或者在互相访问后输入tailscale status