リレーを設定する
リレーは、2台のデバイスが直接つながれないときに転送を中継するサーバーです。自分で運用すれば、その通信を自社のインフラ内に留められます。個人利用は無料で、ビジネスライセンスを追加すると複数リレーの運用、同時転送の上限撤廃、利用状況の指標が利用できます。パブリックIPを持ち、Dockerが動作するサーバーが必要です。
インストール手順
- 1
UDP 49737 を開放する
サーバーのファイアウォールとクラウド側のセキュリティグループの両方で許可します。
sudo ufw allow 49737/udp - 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
サーバーのアドレスを設定する
composeはすべてのコマンドで .env を読むため、コマンドに直接書かずファイルに記述します。
echo 'RELAY_HOST=203.0.113.7' > .env - 4
リレーを起動する
初回起動時に固有の識別情報が生成され、ボリュームに保存されます。
docker compose up -d - 5
リレーコードを控える
ログにコードとスマートフォン用のQRコードが表示され、稼働中は30秒ごとに統計行が出力されます。
docker compose logs relayAlterSend 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
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:7f6f2d059d8a549e30314fa436a98fbe1f62d314a5ec2a2b2be980075ef75226org コードは、アドレスを含むリレー一覧を保持した署名済みレコードの公開鍵です。デバイスはそこから一覧を読み取るため、サーバーを変更してもコードは変わりません。
複数のリレーを運用する
各サーバーに同じ手順でインストールし、同じライセンスを設定します(設定しないと上限がかかります)。新しいリレーの公開鍵を取得し、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アドレスになっているか確認してください。アプリは接続先アドレスを照合して表示を切り替えます。
誰がこのリレーを使えますか?
コードを知っている人は誰でも使えます。あとから変更できる共有シークレットではないため、招待コードのように扱ってください。いずれの場合もファイルはエンドツーエンドで暗号化されたままです。
