개발 - WebRTC

WebRTC 보이스채팅 개발하기 - 3. TURN 서버 구축

개미v 2023. 4. 7. 00:36

 

서로 다른 공유기 사용자들한테는 중간에 릴레이를 시켜줄 TURN 서버가 필요할 것으로 생각 되었는데, 예상외로 그런 케이스는 드물 것 같아서 일단 TURN 서버 구축은 통과 하기로 하였습니다.

 

공유기 환경에서 테스트

서로 다른 공유기 환경에서 서로 연결이 되는지 데모 소스로 확인해 보았습니다.

네트워크 구성은 이렇습니다.

 

PC1(192.168.50.8) ------- Signaling 서버(공인IP) ------- PC2(192.168.59.220)

 

이론적으로 안되야 할 것 같은데 신기하게도 음성채팅이 잘 됩니다.

 

Wireshark로 어떻게 연결되는지 확인해 보았습니다.

 

PC1의 IP주소는 192.168.50.8이고, 공유기의 공인IP주소는 27.126.11.151 입니다.

그리고 Wireshark 패킷을 보면 27.126.11.151의 32728포트로 맵핑이 됩니다.

인바운드로 들어오는 것은 공유기에서 포트포워딩이 설정되어 있어야 가능할 텐데 그냥 되네요.

 

공유기 설정중에 포트포워드 UPnP 릴레이라는 설정이 눈에 보이길래, 해당 기능을 중지 시켜보고 해도 WebRTC 연결이 됩니다.

 

그리고 스마트폰의 LTE 인터넷 환경도 TURN 없이 잘 됩니다.

 

(가설) 공유기나 휴대폰 통신사에서 WebRTC관련된 STUN 프로토콜에 대해서 처리가 되고 있는 것일까요?

 

이쯤되면 NAT, 방화벽 등이 있는 기업이나 기관의 네트워크 환경 빼고, 일반 개인과 가정집은 다 될 것 같습니다.

그래서 TURN 구축은 하지 않기로 결론 내렸습니다.

(인터넷 회선비, 서버PC구입비, 전기요금 등의 문제도 포함)

 

TURN 서버 구축

나중을 위해서 TURN 서버 구축에 대해서 조금 찾아 봤습니다.

오픈소스가 있고 이것 가지고 하면 어렵지 않게 할 수 있다고 합니다.

 

https://github.com/coturn/coturn

 

GitHub - coturn/coturn: coturn TURN server project

coturn TURN server project. Contribute to coturn/coturn development by creating an account on GitHub.

github.com

 

WebRTC 소스에 설정 방법

매우 간단하게도 ICE_SERVERS 설정에서 STUN서버와 추가로 TURN서버 정보를 넣어주면 됩니다.

// ASIS
var ICE_SERVERS = [
	{
		urls:"stun:stun.l.google.com:19302"
	}
];
 
// TOBE
var ICE_SERVERS = [
	{
		urls:"stun:stun.l.google.com:19302"
	},
	{
		urls: "turns:turnserver.example.org",
		username: "webrtc",
		credential: "turnpassword",
	}
];
 
 

 

※ 위 내용은 랜덤보이스채팅 이오이카를 개발하면서 공부한 내용입니다.
https://voice.eoeca.com