Photon運営事務局です。
サーバーサイドの続編として、NAPT環境下での設定についてお話をしていきたいと思います。
利用する環境によっては、すべてのサーバーがファイアーウォールやロードバランサーなどの配下にあり、プライベートIPアドレスしか持てず、外部からのアクセスはポートフォワードの設定が必要といった場合も多々あるかと思います。
そういった場合でも、うまく設定をしていくことによってPhoton Serverを利用することが可能です。その辺りについて、ご説明していきます。
なお、前提として前回の複数台構成でのPhoton Serverのインストールの設定は済んでいるものとします。予めご覧になっておいてください。
また、ポート番号の一覧についてはドキュメントのTCP and UDP Port Numbersをご覧ください。
https://doc.photonengine.com/ja/onpremise/current/operations/tcp-and-udp-port-numbers
ポートフォワードの設定方針
グローバルIPアドレスが複数割り当てできる場合と単一の場合で異なりますが、ここではより厳しいグローバルIPアドレスが単一の場合で考えていきたいと思います。
Master Server、Game Serverで外部に公開が必要なポートはそれぞれ下記の通りです。
Master/Game | TCP/UDP | ポート番号 | 用途 |
---|---|---|---|
Master | TCP | 843 | Flash / Unity Policy |
TCP | 943 | Silverlight Policy | |
TCP | 4530 | Client-Master間通信 (TCP) | |
UDP | 5055 | Client-Master間通信 (UDP) | |
TCP | 9090 | Client-Master間通信 (WebSocket) | |
Game | TCP | 4531 | Client-Game間通信 (TCP) |
UDP | 5056 | Client-Game間通信 (UDP) | |
TCP | 9091 | Client-Game間通信 (WebSocket) |
単一の場合、すべてのサーバーのポートを1つのグローバルIPアドレスに割り当てる必要がありますので、ポート番号の割り振りを考えなければなりません。
まずMaster Serverについては、1台のみですので、そのまま割り当ててしまうのが分かりやすいでしょう。
Game Serverについて、こちらは規模が大きくなるにつれて台数が増えていく可能性があります。ですので、増えても対応できるように設計しなければなりません。
Game Serverのポートについては、
TCP | 4530 + n |
---|---|
UDP | 5055 + n |
WebSocket | 9090 + n |
(nはサーバーの数) |
とするのがわかりやすいでしょう。
ベースのポート番号はデフォルトであるMaster Serverの続きとしましたが、これは他とかぶることがなければ変更しても問題ありません。例えば、
TCP | 10100 + n |
---|---|
UDP | 10200 + n |
WebSocket | 10300 + n |
(nはサーバーの数) |
とするのもよいでしょう。
上記をまとめると、ポートフォワードの設定は下記のようになります。
TCP/UDP | グローバル側ポート | サーバー | プライベート側ポート | 用途 |
---|---|---|---|---|
TCP | 843 | Master | 843 | Flash / Unity Policy |
TCP | 943 | 943 | Silverlight Policy | |
TCP | 4530 | 4530 | Client-Master間通信 (TCP) | |
UDP | 5055 | 5055 | Client-Master間通信 (UDP) | |
TCP | 9090 | 9090 | Client-Master間通信 (WebSocket) | |
TCP | 4531 | Game 1 | 4531 | Client-Game間通信 (TCP) |
UDP | 5056 | 5056 | Client-Game間通信 (UDP) | |
TCP | 9091 | 9091 | Client-Game間通信 (WebSocket) | |
TCP | 4532 | Game 2 | 4531 | Client-Game間通信 (TCP) |
UDP | 5057 | 5056 | Client-Game間通信 (UDP) | |
TCP | 9092 | 9091 | Client-Game間通信 (WebSocket) | |
TCP | 4530 + n | Game n | 4531 | Client-Game間通信 (TCP) |
UDP | 5055 + n | 5056 | Client-Game間通信 (UDP) | |
TCP | 9090 + n | 9091 | Client-Game間通信 (WebSocket) |
なお、グローバルIPアドレスが複数の場合は、上記表にグローバルIPアドレスも追加しておけばよいでしょう。Game Serverと同じ数だけのグローバルIPアドレスが使えるのであれば、グローバル側とプライベート側(サーバー側)のポート番号を合わせられるので、わかりやすくなります。
各自の環境に合わせて、上記のような表を作成して理解しておきましょう。
Master Serverの設定
Master Server自身の設定は基本的に変更する必要はありません。
ただし、Game Serverのポート番号をPolicyのファイルに記載する必要があります。
(server-sdk)¥deploy¥Policy¥assets¥socket-policy.xml
デフォルトのポート番号をそのまま使っていて、Game Serverが2台までならそのままでも大丈夫ですが、ポート番号を変更している場合や3台以上ある場合は変更が必要です。
例えば、デフォルトのポート番号でGame Serverが3台という構成の場合は、下記のように変更してください。
<cross-domain-policy> <allow-access-from domain="*" to-ports="5055,5056,5057,5058,4530,4531,4532,4533,9090,9091,9092,9093" /> </cross-domain-policy>
Silverlightを利用する場合は、同じフォルダにあるsocket-policy-silverlight.xmlも同様に変更をしてください。
Master Serverの設定は上記で以上です。
Game Serverの設定
Game Serverの設定が重要です。
アプリケーション固有の設定ファイルであるPhoton.LoadBalancing.dll.configを変更していきます。
(server-sdk)¥deploy¥Loadbalancing¥GameServer1¥bin¥Photon.LoadBalancing.dll.config
こちらの16-34行目の部分は、Master ServerがClientに対して、このGame Serverへ接続を指示する際に通知する接続情報となります。Clientは、受け取った接続情報を元に、Game Serverへの接続を試みます。
まず最初は、通知するグローバルIPアドレスです。グローバルIPアドレスを持つ環境では自動設定でも問題ないですが、NAPT環境では自分で設定する方が安全でしょう。
<!-- Leave empty and the the IP address will be looked up dynamically at runtime. --> <setting name="PublicIPAddress" serializeAs="String"> <value>210.172.1.1</value> </setting>
続いてはClient-Game間のTCP通信のポート番号です。こちらはClientに通知するポート番号となりますので、グローバル側のポート番号を記載する必要があります。
例えば、デフォルトのポート番号で3台目のGame Serverとする場合は、4533となりますので、下記のようになります。
<!-- Client-to-Gameserver TCP connections. Needs to match the TCPListener in PhotonServer.config --> <setting name="GamingTcpPort" serializeAs="String"> <value>4533</value> </setting>
次にUDP通信のポート番号です。TCPと同様にグローバル側のポート番号を記載します。
TCPと同様に3台目とする場合は5058となります。
<!-- Client-to-Gameserver UDP connections. Needs to match the UDPListener in PhotonServer.config --> <setting name="GamingUdpPort" serializeAs="String"> <value>5058</value> </setting>
最後はWebSocket通信のポート番号です。こちらも同様にグローバル側のポート番号です。
こちらも同様に3台目とする場合は9093となります。
<!-- Client-to-Gameserver WebSocket connections. Needs to match the WebSocketListener in PhotonServer.config --> <setting name="GamingWebSocketPort" serializeAs="String"> <value>9093</value> </setting>
変更内容は以上となります。
変更を反映させるには、インスタンスの再起動を行ってください。
まとめ
設定するところはさほど多くありません。どういった構成で動かすか、各自の環境でしっかり設計することが重要です。
その内容を表として作成したほうがわかりやすいでしょう。そしてその表を確認しながら設定するのが確実です。
そして、Game Serverの設定はClientに通知するためのグローバル側のポート番号、IPアドレスである、ということをしっかり認識しておいてください。
引き続き、Photon Serverについてもご紹介していきたいと思います。
リクエストなどもお待ちしております!
コメント
0件のコメント
サインインしてコメントを残してください。