Tailscaleは非常に便利なネットワークツールで、異なるネットワーク環境、さらには異なる国や地域にあるデバイスを同じ仮想LANに接続できます。しかし、公式のDERPサーバーはすべて海外にあり、うまくトンネルを開けない場合、中継遅延が非常に高くなります。そこで、国内(または使用地域に最も近い場所)に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タブを選択し、内容を編集します:
2. 検証
Tailscaleに接続されているクライアントでtailscale netcheckを実行し、出力に自前のDERPサーバーが含まれているか確認します:
クライアント検証の設定
デフォルトでは、自前のDERPサーバーはサーバーIPを知っているすべてのTailscaleユーザー(Headscaleインスタンスを含む)によって使用できます。クライアント検証機能を設定して、自分のネットワークのみが利用できるように制限できます。
1. サーバーにTailscaleをインストール
サーバーにTailscaleをインストールし、あなたのネットワークに参加する必要があります。具体的な手順は公式サイトを参照してください。この記事では詳しく説明しません。
2. 設定の変更
以前のSystemdサービス設定ファイルに-verify-clientsパラメータを追加し、変更後のファイルは次のようになります:
その後、サービスを再起動します: