Tailscale Derperのデプロイ方法
Tailscaleは、異なるネットワーク環境や異なる国や地域にあるデバイスを同じ仮想LANに接続できる便利なネットワーキングツールです。しかし、公式のDERPサーバーはすべて海外にあるため、直接接続(NAT traversal)が失敗した場合、中継レイテンシが非常に高くなります。中国国内(または利用地域に最も近い場所)に1つまたは複数のDERPサーバーを展開することで、中継レイテンシを低減し、アクセス速度を向上させることができます。
Headscaleをセルフホストしている場合、独自のDERPサーバーを構築する必要があります。
Headscaleには組み込みのDERPサーバーが付属していますが、使用はお勧めしません(中継トラフィックが多すぎると、制御情報の正常な転送に影響を与える可能性があるため)。
準備作業
パブリックIPアドレスを持つサーバーを用意し、ファイアウォールでTCP 80、TCP 443、UDP 3478ポートを開放する必要があります。また、ドメインを用意し、そのドメインをサーバーに解決する必要があります。
注意:中国本土のサーバーを使用する予定の場合、ドメインはICP备案を完了する必要があります。
Golangのインストール
次のステップに進む前に、サーバーにGolangをインストールする必要があります。具体的な手順はgo.devの説明を参照してください。ここでは詳述しません。
コンパイルとインストール
以下のコマンドを順に実行してください。
git clone https://github.com/tailscale/tailscale.git
cd tailscale
go build cmd/derper
sudo mv derper /usr/sbin/derper
システムサービスのインストール
以下の内容を /etc/systemd/system/derper.service に書き込みます。
[Unit]
Description=Derper
Wants=network-pre.target
After=network-pre.target NetworkManager.service systemd-resolved.service
[Service]
ExecStart=/usr/sbin/derper --hostname 将这里换成你提前准备的域名 -a :443 -http-port 80 -certmode letsencrypt --certdir /var/lib/derper/certs
Restart=on-failure
[Install]
WantedBy=multi-user.target
その後、以下のコマンドを順に実行してデータフォルダを作成し、サービスを有効化して起動します。
mkdir -p /var/lib/derper
sudo systemctl daemon-reload
sudo systemctl enable derper
sudo systemctl start derper
Tailscaleの設定
1. ACLの変更
Tailscale管理バックエンドに入り、Access controlsタブを選択し、内容を編集します。
{
// ...
"grants": [
// ...
],
// ...
// 追加以下信息
"derpMap": {
"Regions": {
"900": {
"RegionID": "900",
"RegionCode": "my_derper",
"RegionName": "My Derper",
"Nodes": [
{
"Name": "My Derper",
"RegionID": "900",
"HostName": "将这里换成你提前准备的域名"
}
]
},
// 禁用官方 DERP 服务器,如果不需要可以不写
"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, # 避免自建的derper挂掉后tailscale无法使用,保留20(Hong Kong)作为备选
"21": null,
"22": null,
"23": null,
"24": null,
"25": null,
"26": null,
"27": null,
"28": null
}
}
}
2. 検証
Tailscaleに接続済みのクライアントで tailscale netcheck を実行し、出力に自前のDERPサーバーが含まれているか確認します。
Report:
* Time: 2025-07-30T15:17:57.176736Z
* UDP: true
* IPv4: yes, 127.0.0.1:114514
* IPv6: no, but OS has support
* MappingVariesByDestIP: true
* PortMapping:
* CaptivePortal: false
* Nearest DERP: My Derper
* DERP latency:
- my_derper: 162ms (My Derper)
クライアント認証の設定
デフォルトでは、自前のDERPサーバーはサーバーのIPアドレスを知っているすべてのTailscaleユーザー(Headscaleインスタンスを含む)に使用されます。クライアント認証機能を設定して、自分のネットワークのみが使用できるように制限できます。
1. サーバーにTailscaleをインストール
サーバーにTailscaleをインストールし、あなたのネットワークに参加させる必要があります。具体的な手順は公式サイトを参照してください。ここでは詳述しません。
2. 設定の変更
先ほどのSystemdサービス設定ファイルに -verify-clients パラメーターを追加します。修正後のファイルは次のようになります。
[Unit]
Description=Derper
Wants=network-pre.target
After=network-pre.target NetworkManager.service systemd-resolved.service
[Service]
ExecStart=/usr/sbin/derper --hostname 将这里换成你提前准备的域名 -a :443 -http-port 80 -certmode letsencrypt --certdir /var/lib/derper/certs -verify-clients
Restart=on-failure
[Install]
WantedBy=multi-user.target
その後、サービスを再起動します。
sudo systemctl daemon-reload
sudo systemctl restart derper