서버 사이드의 속편으로, NAPT 환경에서의 설정에 대해서 설명해 드리고자 합니다.
이용하는 환경에 따라서는 모든 서버가 방화벽이나 로드 밸런서 등의 관리 하에 있고, 프라이빗 IP주소밖에 가지지 않아 외부로부터의 접속은 포트 포워드의 설정이 필요한 경우도 많이 있을 것 같은데요.
그런 경우에도, 알맞게 잘 설정하면 Photon Server를 이용할 수 있습니다. 그 부분에 대해서 설명해 드리겠습니다.
구성에서의 Photon Server 인스톨 설정이 완료되어 있는 상태를 전제로 합니다. 미리 확인해 두세요.
또한, 포토 번호 리스트는 기술문서 "TCP and UDP Port Numbers"를 참조해주세요.
https://doc.photonengine.com/ko-kr/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) |
IP주소가 하나인 경우, 모든 서버의 포트를 그 글로벌 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대까지라면 그대로도 괜찮지만, 포토 번호를 변경한 경우이거나 Game Server가 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개
댓글을 남기려면 로그인하세요.