Parsec Relay Serverを使ってリモートPCへの接続を中継する

2021.08.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Parsec for TeamsのEnterpriseを購入すると、High performance relay serverというものが使えるようになります。

これはすべてのParsecトラフィックを1つのパブリックIPアドレスを介してルーティングする、ファイアウォール/NAT設定を管理するためのソリューションとして利用できます。

軽量のサーバープログラムが提供されていて、仮想サーバーや物理サーバーにインストールして使うことができます。

使ってみよう

本記事ではAmazon linux2(t3.medium )でのインストールを試しています

前提条件の確認

サーバーの最小仕様

  • 2コア
  • 4GB RAM
  • 1gbps + NIC 

サポートされているオペレーティングシステム:

  • Ubuntu 18.04 , Ubuntu 20.04 ,RHEL 7 ,RHEL 8 ,CentOS 7 ,CentOS 8

ダウンロード

Teams Global AppSettingsページからリレーサーバーのダウンロードURLをコピーします。

サーバーにsshでログインし、以下のコマンドを実行します 

wget <リレーダウンロードURL> 
tar -xf <relay.tar.gz> 
cd parsechpr1.0

インストール

sudo cp parsechpr /bin
sudo cp parsechpr.service /etc/systemd/system

設定 

parsechpr.serviceを編集します。 

vi /etc/systemd/system/parsechpr.service

ファイルを開いた後、ExecStart の部分を書き換えます 。

構文は以下です。

ExecStart=/bin/parsechpr [パブリックIPアドレス] [WAN/パブリックインターフェイスポート] [LAN/内部インターフェイスポート]

例)ExecStart=/bin/parsechpr 1.2.3.4 5000 4900

サービスの起動

sudo systemctl start parsechpr
sudo systemctl enable parsechpr

起動しているか確認 

sudo systemctl status parsechpr
● parsechpr.service - Parsec High Performance Relay
   Loaded: loaded (/etc/systemd/system/parsechpr.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-08-06 02:49:35 UTC; 6s ago
 Main PID: 2650 (parsechpr)
   CGroup: /system.slice/parsechpr.service
           └─2650 /bin/parsechpr [パブリックIP] [WAN/パブリックインターフェイスポート] [LAN/内部インターフェイスポート]

Aug 06 02:49:35 ip-10-10-100-214.ap-northeast-1.compute.internal systemd[1]: Started Parsec High Performance Relay.

parsec for teamsの管理画面での設定 

Teams Global AppSettingsページで、relay serverのプライベートIPプライベートポートを入力します.

このページで設定すると、すべてのホストのリレーがこのアドレスとなります。

ホスト個別で設定する場合

ホスト個別で設定する場合は、ホストで設定を編集することで可能になります。

設定ファイルは C:\ProgramData\Parsec\config.txt です。

app_stun_addressという項目を追加し、parsecサービスを再起動しましょう。

app_stun_address = `relay serverのプライベートIP`@`プライベートポート`

※ 最大10個のaddress@portペアを、コンマで区切って構成できます

複数のリレーサーバーが使用可能な場合、Parsecは接続の試行ごとにランダムにリレーサーバーを選択するとのことです

リモートPCに接続できるか確認

クライアントPC(macOS) <====> Relay server <====> EC2 リモートホスト(windows)

上記の構成で接続できるか確認します。

Relay serverでポートを許可

今回の検証では以下のポートを許可して動作を確認していました。

  • インバウンド
    • 4900 UDP <<プライベートネットワークのCIDR>>
    • 5000 UDP <<クライアントPCのGIP>>
  • アウトバウンドは全て

リモートホストでポートを許可

  • インバウンド
    • 0 - 65535 UDP <<Relay serverのプライベートIP>>
  • アウトバウンドは全て

上記の状態でParsecで接続してみると、成功するはずです。

※ クライアント側からParsecでアクセスを試みると、Relay serverのmessagesに以下のような出力があります。

Aug  6 08:20:46 ip-10-10-100-214 parsechpr: qViy7g:uaYsgw added to map
Aug  6 08:20:47 ip-10-10-100-214 parsechpr: qViy7g:uaYsgw paired

すべてのP2PトラフィックをRelay server経由で強制する場合は、ホストのconfig.txtまたはレジストリに次の行を追加して、Parsecを再起動します。

app_force_relay = 1

※Parsecを再起動しても挙動が変わらない場合は、サーバー自体を再起動してみます

強制している状態で、Relay serverをstopしているともちろんホストには接続できませんでした。

多数の同時接続を効率的に中継できるようなソリューションのため、ファイアウォール/NAT設定を厳しくしたいときに使えそうですね。