Nexmoe

Nexmoe

一个开发者。关于勇敢与热爱,互联网/创造/赛博朋克
twitter
github

Caddy、Docker シンプルな自己構築 Tailscale DERP

サービスは、エンドツーエンドの接続を持ち、フルエンドツーエンドの暗号化を提供する。Tailscale の無料アカウントは現在、100 台のデバイスに接続することができ、個人ユーザーには十分な容量がある。私のローカルネットワークのデバイスのほとんどは Tailscale を使用して接続しています。以前の記事「VS Code でサーバーを管理する - 私のユニークなサーバー管理方法」で、私は Remote SSH を使用するのが好きで、Tailscale を使用してローカルネットワークを構築し、Remote SSH を使用してリモート開発を行っています。

しかし、Tailscale は中国のネットワーク環境では遅延や接続の問題が頻繁に発生するという問題があります。幸いなことに、公式ではユーザーが自分自身で DERP サーバーを構築し、この問題を解決することを許可しています。コードを書いている最中に接続が途切れる心配はもうありませんし、優れたネットワーク体験により、VS Code のポートフォワードの体験も向上し、リモートプレビュー開発が容易になります。

私自身、低構成のクラウドサーバーを持っているため、以前は Caddy を逆プロキシサーバーとして使用して Alist プロジェクトを実行していました。したがって、今回は同じサーバー上で DERP プロジェクトをデプロイするために Caddy を逆プロキシとして使用することを検討しました。

Caddy を採用する主な理由は、Nginx と比較して非常に簡単な構成でほとんどの要件を満たすことができること、そして優れた自動 SSL 管理のエクスペリエンスがあることです。多くの手間を省くことができます。

それでは、設定を始めましょう。

Docker の設定#

// docker-compose.yml
version: '3'
services:
  derper:
    image: fredliang/derper
    restart: always
    ports:
      - 3478:3478/udp
      - 23333:443
    environment:
      - DERP_DOMAIN=derp.example.com

そして起動します。

sudo docker compose up

Caddy の設定#

// Caddyfile
derp.example.com {
    reverse_proxy localhost:23333
}

Caddy の設定をリロードします。

sudo docker compose exec -w /etc/caddy caddy caddy reload

ドメインを Caddy サーバーに解決するのを忘れないでください。

Tailscale の設定#

アクセスコントロールで設定します。

直接リンク:https://login.tailscale.com/admin/acls/file

{
  // ... 他のACL設定
  "derpMap": {
    "OmitDefaultRegions": true, // 自己構築のderperノードのみに接続するかどうか
    "Regions": {
      "900": {
        "RegionID": 900,
        "RegionCode": "myderp",
        "Nodes": [
          {
            "Name": "1",
            "RegionID": 900,
            "HostName": "derp.example.com", // ドメイン
            "STUNPort": 3478,
            "DERPPort": 443,
          }
        ]
      }
    }
  }
}

以上です。

参考#

  1. GitHub - fredliang44/derper-docker: tailscale‘s selfhosted derp-server docker image
  2. Custom DERP Servers
  3. How NAT traversal works
  4. Tailscale 基础教程:部署私有 DERP 中继服务器
  5. 浅探 Tailscale DERP 中转服务
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。