リレーを設定する

リレーは、2台のデバイスが直接つながれないときに転送を中継するサーバーです。自分で運用すれば、その通信を自社のインフラ内に留められます。個人利用は無料で、ビジネスライセンスを追加すると複数リレーの運用、同時転送の上限撤廃、利用状況の指標が利用できます。パブリックIPを持ち、Dockerが動作するサーバーが必要です。

インストール手順

  1. 1

    UDP 49737 を開放する

    サーバーのファイアウォールとクラウド側のセキュリティグループの両方で許可します。

    sudo ufw allow 49737/udp
  2. 2

    docker-compose.yml を作成する

    services:
      relay:
        image: ghcr.io/altersend/relay:latest
        network_mode: host
        restart: unless-stopped
        environment:
          RELAY_HOST: ${RELAY_HOST:?set RELAY_HOST to this server's public IP}
          ALTERSEND_LICENSE: ${ALTERSEND_LICENSE:-}
        volumes:
          - relay-data:/etc/altersend-relay
    
    volumes:
      relay-data:
  3. 3

    サーバーのアドレスを設定する

    composeはすべてのコマンドで .env を読むため、コマンドに直接書かずファイルに記述します。

    echo 'RELAY_HOST=203.0.113.7' > .env
  4. 4

    リレーを起動する

    初回起動時に固有の識別情報が生成され、ボリュームに保存されます。

    docker compose up -d
  5. 5

    リレーコードを控える

    ログにコードとスマートフォン用のQRコードが表示され、稼働中は30秒ごとに統計行が出力されます。

    docker compose logs relay
    AlterSend relay listening
    relay public key: 6fad022df811a2bfbc734260df47c55499973409bc34b89f66ad791c24be2197
    
    add this relay in AlterSend — Settings → Connection:
    
      relay:6fad022df811a2bfbc734260df47c55499973409bc34b89f66ad791c24be2197@203.0.113.7
    
    [stats] egress 0GB | sessions=0 pairings=0 matched=0
  6. 6

    AlterSendに追加する

    設定 → 接続 →「セルフホストリレー」。コードを貼り付けて送信ボタンを押すと、保存と接続テストが同時に行われます。

    コードが必要なのは自分のデバイスだけです。相手に送るときは、接続時にリレーの情報がアプリから相手へ渡されます。

ビジネスライセンス

.env にライセンスを追加して再起動すると、relay コードの代わりに org コードが表示されます。このコードをチーム全員のデバイスに設定すれば、裏側のサーバーは一元管理でき、変更しても貼り直しは不要です。

ALTERSEND_LICENSE=<ライセンス>

# 任意: 転送ごとに転送量と時刻のみを送信
REPORT_URL=https://example.com/hook
REPORT_TOKEN=<ベアラートークン>
[selfhost] licensed to Acme GmbH until 2027-08-27
[selfhost] published org relay record (seq 1)

add this relay in AlterSend — Settings → Connection:

  org:7f6f2d059d8a549e30314fa436a98fbe1f62d314a5ec2a2b2be980075ef75226

org コードは、アドレスを含むリレー一覧を保持した署名済みレコードの公開鍵です。デバイスはそこから一覧を読み取るため、サーバーを変更してもコードは変わりません。

複数のリレーを運用する

各サーバーに同じ手順でインストールし、同じライセンスを設定します(設定しないと上限がかかります)。新しいリレーの公開鍵を取得し、org コードを表示したサーバーから一覧をまとめて公開します。他のサーバーも初回起動時に独自の org コードを表示しますが、それらは使わず最初の1つだけを配布してください。

# 新しいサーバーで
docker compose exec relay node key.js

# org コードを表示したサーバーで
docker compose exec relay node conf/publish.js \
  <key1>@203.0.113.7@-5 \
  <key2>@198.51.100.4@8

更新とバックアップ

更新は新しいイメージを取得して再起動するだけです。識別情報と設定はボリュームに残るため、コードはそのまま使えます。

docker compose pull
docker compose up -d

うまくいかないときは

RELAY_HOST が設定されていないというエラーが出る

composeは up だけでなくすべてのコマンドで .env を読みます。docker-compose.yml と同じ場所に .env があり、RELAY_HOST が記述されているか確認してください。

アプリからリレーに接続できない

ほとんどの場合はUDP 49737が原因です。サーバーのファイアウォールとクラウド側のセキュリティグループを確認し、docker compose ps でコンテナが動作しているかを確かめてください。

転送が「直接接続」と表示される

通常は正常です。リレーは2台のデバイスが直接つながれないときだけ中継し、直接つながる場合はそのほうが高速です。まったく「リレー経由」と表示されない場合は、RELAY_HOST がドメインではなくIPアドレスになっているか確認してください。アプリは接続先アドレスを照合して表示を切り替えます。

誰がこのリレーを使えますか?

コードを知っている人は誰でも使えます。あとから変更できる共有シークレットではないため、招待コードのように扱ってください。いずれの場合もファイルはエンドツーエンドで暗号化されたままです。