zixiba

zixiba

自己構築のTailscale DERPリレーサーバー(海外版)

原文アドレス:大内网战略 (6.5):自建 Tailscale DERP 中继服务器 海外版
大内网战略 (6):自建 Tailscale DERP 中继服务器 保姆级教程
作者:凉拖捞佬 Pro

先决条件#

  • 海外の VPS が必要です(私は RackNerd で購入した最も安い VPS を使用しています)。
  • ドメインを購入しました(namesilo で購入することをお勧めします。より安くなります)そして、DNS を cloudflare に解析しました。
  • ドメインを VPS に解析しました。サブドメインである必要はありません(http://xxx.com)三級ドメイン(http://yyy.xxx.com)でもかまいません。
  • 基本的な Linux 操作の知識が必要です。
    注意:Cloudflare のドメイン解析ではプロキシを有効にしないでください。以下の図のように:

image

ファイアウォールの設定#

まず、ポートを永久に開放する必要があります:TCP 56473(任意のポートに変更してもかまいません)および UDP 3478(変更しないでください)。そして、一時的にファイアウォールを閉じます(acme が SSL 証明書の申請を完了した後に再度開きます)。

一般的に使用される Linux ファイアウォールには、iptables、UFW、および VPS が提供するネットワークセキュリティグループがあります。状況に応じて設定してください。ここではチュートリアルはありません。

SSL 証明書の申請#

以下のコマンドを順番に入力して SSL 証明書を申請します。3 つの証明書の申請方法のいずれかを選択し、失敗した場合は別の方法に変更してください。コマンド内のを自分のドメインに置き換えてください。

VPS に nginx または apache が実行されている場合、コマンド内の --standalone を --nginx または --apache に変更するか、一時的にこれらのサービスを停止する必要があります。

sudo -i

curl https://get.acme.sh | sh; apt install socat -y || yum install socat -y; ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt

#3つの方法のいずれかを選択し、失敗した場合は別の方法に変更してください
#証明書の申請方法1:
~/.acme.sh/acme.sh --issue -d <your domain> --standalone -k ec-256 --force --insecure
#証明書の申請方法2:
~/.acme.sh/acme.sh --register-account -m "${RANDOM}@chacuo.net" --server buypass --force --insecure && ~/.acme.sh/acme.sh --issue -d <your domain> --standalone -k ec-256 --force --insecure --server buypass
#証明書の申請方法3:
~/.acme.sh/acme.sh --register-account -m "${RANDOM}@chacuo.net" --server zerossl --force --insecure && ~/.acme.sh/acme.sh --issue -d <your domain> --standalone -k ec-256 --force --insecure --server zerossl

証明書のエクスポート:

sudo mkdir /usr/local/cert

~/.acme.sh/acme.sh --install-cert -d <your domain> --ecc --key-file /usr/local/cert/<your domain>.key --fullchain-file /usr/local/cert/<your domain>.crt

Tailscale のインストール#

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

tailscale up を入力し、表示される URL をブラウザにコピーして認証します。

Golang のインストール#

古いバージョンのアンインストール#

サーバーに古いバージョンの go に依存する他のソフトウェアがある場合、新しいバージョンにアップグレードすると予期しない結果が発生する可能性があるため、注意して評価してください。

古いバージョンの golang は、derp のインストールに失敗する可能性が非常に高いです。go version を実行して古いバージョンが表示される場合:

image
アンインストール:rm -rf /usr/local/go
サーバーを再起動することをお勧めします。

最新バージョンの確認#

次の URL を開きます:https://go.dev/doc/install
以下のスクリーンショットには、最新バージョンが 1.21.1 であることが表示されています。

image

最新バージョンのダウンロード#

wget https://go.dev/dl/go<latest version number>.linux-amd64.tar.gz
tar -C /usr/local -xzf go<latest version number>.linux-amd64.tar.gz

vim /etc/profileを入力して Enter キーを押し、以下のコマンドを末尾に入力して保存して終了します:

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

source /etc/profileを入力し、go version を入力して go 言語が正常にインストールされているかを確認します。

derper サービスのインストール#

ディレクトリを作成します:sudo mkdir -p /usr/local/gopath/bin

インストール:

go env -w GOPROXY=https://goproxy.cn,direct
go install tailscale.com/cmd/derper@main

vim /usr/local/gopath/bin/runderperを入力し、以下の内容を入力して保存します:(56473 ポートを変更した場合はここでも変更することを忘れないでください)

#!/bin/sh
cd /usr/local/gopath/bin
nohup ./derper -hostname <your domain> -c=derper.conf -a :56473 -http-port -1 -certdir /usr/local/cert -certmode manual -verify-clients -stun > console.log 2>&1 &
echo $! > app.pid

vim /usr/local/gopath/bin/stopderper.shを入力し、以下の内容を入力して保存します:

#!/bin/sh
kill `cat app.pid`
rm -rf app.pid

権限を付与します:

chmod +x /usr/local/gopath/bin/runderper
chmod +x /usr/local/gopath/bin/stopderper.sh

vim /etc/systemd/system/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

次に、https://<your domain>:56473/を開き、以下のページが表示されればデプロイに成功しています。

image

リレーノードの追加#

Tailscale ウェブコントロールパネルに戻り、アクセスコントロールを開き、以下のコードをsshの前に追加します:

"derpMap": {
		// OmitDefaultRegions 用来忽略官方的中继节点,一般自建后就看不上官方小水管了
		"OmitDefaultRegions": true,
		"Regions": {
			// 这里的 901 从 900 开始随便取数字
			"901": {
				// RegionID 和上面的相等
				"RegionID": 901,
				// RegionCode 自己取个易于自己名字
				"RegionCode": "RackNerd",
				"Nodes": [
					{
						// Name 保持 1不动
						"Name":     "1",
						// 这个也和 RegionID 一样
						"RegionID": 901,
						// 域名
						"HostName": "<your domain>",
						// 端口号
						"DERPPort": 56473,
					},
				],
			},
			// 多个服务器添加在下面
			"902": {
				// RegionID 和上面的相等
				"RegionID": 902,
				// RegionCode 自己取个易于自己名字
				"RegionCode": "xxxx",
				"Nodes": [
					{
						// Name 好像可以改成2我也不是很懂
						"Name":     "2",
						// 这个也和 RegionID 一样
						"RegionID": 902,
						// 域名
						"HostName": "<your domain>",
						// 端口号
						"DERPPort": 56473,
					},
				],
			},
            // 多个服务器添加在上面
		},
	},

保存を忘れないでください

接続ノードの確認#

接続されているデバイスの CMD でtailscale netcheckを入力して、接続ノードと遅延を確認します。
image

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。