회사·학교 네트워크에서 집 컴퓨터를 원격 제어할 때
보안이 엄격한 네트워크는 기기끼리 바로 연결하는 통신을 막는 경우가 많아요. 중계 서버를 거치면 연결돼요.
중계 서버(TURN)는 두 기기가 서로 바로 연결하지 못할 때, 그 사이에서 영상·소리·입력을 대신 전달해 주는 서버예요. Any Display는 보통 기기끼리 직접 연결하지만, 회사·학교 네트워크나 일부 모바일 데이터처럼 직접 연결을 막는 곳에서는 중계 서버가 있어야 원격 제어와 원격 카메라가 연결돼요.
왜 필요할까요? 인터넷에서 두 기기는 각자 공유기나 통신사 장비 뒤에 있어서, 서로의 주소로 바로 찾아가지 못할 때가 있어요. 대부분은 Any Display가 길을 찾아 직접 연결하지만, 보안이 엄격한 네트워크는 이 방법을 막아요. 이때 두 기기가 모두 접속할 수 있는 중계 서버를 하나 두면, 두 기기가 그 서버를 거쳐 연결돼요. 영상은 기기 사이에서 암호화된 채로 지나가서 서버는 내용을 볼 수 없어요. 이 가이드는 무료 TURN 서버 coturn을 Mac·Linux·Windows에 설치하고, 아이디·비밀번호를 정해 앱에 넣는 과정을 차례로 안내해요.
보안이 엄격한 네트워크는 기기끼리 바로 연결하는 통신을 막는 경우가 많아요. 중계 서버를 거치면 연결돼요.
일부 통신사 데이터망은 직접 연결이 잘 안 돼요. 집 중계 서버를 거쳐도 지연은 대개 거의 실시간 수준이에요.
같은 계정으로 로그인했는데 원격 연결이 계속 기다리기만 한다면 직접 연결이 막힌 경우일 수 있어요.
중계 서버는 항상 켜 두는 컴퓨터에 설치해요. 집이나 사무실의 Mac mini, Linux 미니 PC, Windows PC, 또는 클라우드 서버(VPS) 모두 돼요. 먼저 두 가지 주소를 적어 두세요. 공인 IP는 서버 컴퓨터에서 터미널에 curl -4 ifconfig.me 를 입력하면 나와요. 내부 IP는 Mac은 ipconfig getifaddr en0, Linux는 hostname -I, Windows는 ipconfig 로 확인해요(예: 192.168.0.20).
공유기 설정에서 이 컴퓨터의 내부 IP를 고정(DHCP 예약)해 두면 나중에 포트 포워딩이 끊기지 않아요.
세 운영체제 모두 아래와 같은 turnserver.conf 파일 하나로 설정해요. user= 줄이 Any Display에 입력할 아이디와 비밀번호예요. 형식은 user=사용자이름:비밀번호이고, myname과 CHANGE-THIS-LONG-PASSWORD를 내 값으로 바꿔요. 비밀번호는 길고 무작위로 만드세요. 터미널에서 openssl rand -base64 24 를 입력하면 하나 만들어 줘요. 콜론(:)은 비밀번호에 쓰지 마세요.
external-ip는 공유기 뒤에 있을 때 공인IP/내부IP 형식으로 적어요(앞 단계에서 확인한 값). 서버에 공인 IP가 바로 붙어 있는 VPS라면 이 줄을 지워도 돼요. min-port~max-port는 중계에 쓸 UDP 포트 범위예요. 개인 사용은 41개면 충분하고, 여러 사람이 동시에 쓰면 넓혀요.
listening-port=3478
fingerprint
lt-cred-mech
realm=anydisplay
user=myname:CHANGE-THIS-LONG-PASSWORD
min-port=49160
max-port=49200
external-ip=203.0.113.10/192.168.0.20
no-tls
no-dtls
no-cli
no-multicast-peersHomebrew가 있다면 터미널에서 아래 명령을 차례로 입력해요. 두 번째 명령으로 앞 단계의 설정 내용을 붙여 넣고 저장해요(nano에서는 Control+O, Enter, Control+X). Intel Mac은 경로가 /usr/local/etc/turnserver.conf 예요.
sudo brew services start coturn 은 Mac이 켜질 때 로그인하지 않아도 중계 서버를 자동으로 시작해요. 시스템 설정 › 네트워크 › 방화벽이 켜져 있다면 turnserver의 들어오는 연결을 허용해요.
brew install coturn
nano /opt/homebrew/etc/turnserver.conf
sudo brew services start coturn아래 명령으로 coturn을 설치하고 /etc/turnserver.conf 에 앞 단계의 설정 내용을 넣어요. 오래된 Debian·Ubuntu 패키지는 /etc/default/coturn 의 TURNSERVER_ENABLED=1 줄 앞 #을 지워야 시작돼요. systemctl enable --now 로 지금 시작하고 재부팅 뒤에도 자동으로 켜져요.
ufw 방화벽을 쓰지 않으면 마지막 두 줄은 건너뛰어요. Fedora·RHEL은 sudo dnf install coturn 으로 설치하고 설정 파일은 /etc/coturn/turnserver.conf 예요. 클라우드 서버라면 서비스 화면의 보안 그룹(방화벽)에서도 UDP 3478과 49160~49200을 열어요.
sudo apt update && sudo apt install coturn
sudo nano /etc/turnserver.conf
sudo systemctl enable --now coturn
sudo ufw allow 3478/udp
sudo ufw allow 49160:49200/udpcoturn은 Windows용 공식 설치 파일이 없어서, 무료 Docker Desktop으로 공식 coturn 이미지를 실행해요. Docker Desktop을 설치하고 설정에서 ‘로그인할 때 Docker Desktop 시작’을 켜 두세요. 그다음 PowerShell에서 아래 명령을 차례로 입력해요. 메모장이 열리면 앞 단계의 설정 내용을 붙여 넣고 저장해요.
Windows에서는 external-ip를 external-ip=공인IP 처럼 공인 IP만 적어요. 마지막 방화벽 명령은 관리자 권한 PowerShell에서 실행해요. --restart unless-stopped 덕분에 PC를 다시 켜도 Docker가 실행되면 중계 서버도 다시 켜져요.
mkdir C:\coturn
notepad C:\coturn\turnserver.conf
docker run -d --name coturn --restart unless-stopped -p 3478:3478/udp -p 49160-49200:49160-49200/udp -v C:\coturn\turnserver.conf:/etc/coturn/turnserver.conf coturn/coturn
New-NetFirewallRule -DisplayName "Any Display TURN" -Direction Inbound -Protocol UDP -LocalPort 3478,49160-49200 -Action Allow공유기 관리자 페이지의 포트 포워딩(포트 포워드, 가상 서버) 메뉴에서 두 규칙을 서버 컴퓨터의 내부 IP로 추가해요. UDP 3478 → 3478, UDP 49160~49200 → 49160~49200. 프로토콜은 반드시 UDP를 포함해야 해요.
공유기가 통신사 공유기 뒤에 한 번 더 있거나, 통신사가 공인 IP를 주지 않는 회선(CGNAT)이면 집에서는 밖으로 열 수 없어요. 이때는 클라우드 서버(VPS)에 Linux로 설치하세요.
아이디나 비밀번호를 바꾸려면 turnserver.conf 의 user= 줄을 고치고 중계 서버를 다시 시작해요. user= 줄을 여러 개 두면 사람마다 다른 계정을 줄 수 있어요. 지운 계정은 다시 시작한 뒤부터 쓸 수 없어요. 아래는 운영체제별 다시 시작 명령이에요.
비밀번호를 바꿨다면 Any Display에 저장한 비밀번호도 새 값으로 바꿔야 해요.
# macOS
sudo brew services restart coturn
# Linux
sudo systemctl restart coturn
# Windows (Docker)
docker restart coturnMac·Windows의 Any Display에서 설정 › 네트워크 › 중계 서버(TURN)을 열어요. ‘중계 서버 사용’을 켜고 ‘서버 주소’에 turn:공인IP:3478 형식으로 입력해요(아래 예시). 고정 주소가 없다면 공유기의 DDNS 주소를 써도 돼요(예: turn:myhome.example.com:3478). ‘사용자 이름’과 ‘비밀번호’에는 user= 줄에 적은 값을 넣어요.
‘연결 테스트’를 눌러 “연결됐어요. 이 서버로 중계할 수 있어요.”가 나오면 ‘저장’을 눌러요. ‘서버 이름’을 적고 ‘목록에 저장’을 누르면 ‘저장된 서버’에 남아 다음에 바로 불러올 수 있어요.
turn:203.0.113.10:3478iPhone·iPad·Android의 Any Display에서 설정 › 중계 서버(TURN)을 열고, 컴퓨터 앱과 같은 서버 주소·사용자 이름·비밀번호를 넣은 뒤 ‘연결 테스트’와 ‘저장’을 눌러요. 연결하는 두 기기 중 한쪽에만 설정해도 되지만, 밖에서 휴대폰 데이터로 접속하는 일이 많다면 휴대폰 쪽에 넣어 두면 편해요.
“서버가 응답하지 않아요”가 나오면 주소와 포트, 서버 컴퓨터가 켜져 있는지, 공유기의 UDP 3478 포워딩과 서버 방화벽을 확인해요. 같은 공유기 안에서 공인 IP로 테스트할 때 응답이 없다면 공유기가 헤어핀(NAT 루프백)을 지원하지 않는 경우예요. 휴대폰 데이터로 바꿔 다시 테스트해 보세요.
“로그인에 실패했어요”는 서버에는 닿았지만 아이디나 비밀번호가 틀린 거예요. user= 줄과 대소문자까지 같은지 확인하고, 설정을 고쳤다면 서버를 다시 시작해요. 테스트는 통과하는데 원격 연결 화면이 안 나오면 49160~49200 포워딩을 확인해요.
2026년 10월 8일 macOS(Homebrew coturn 4.18.0) 중계 서버와 Any Display 원격 카메라 연결로 확인했어요. Linux·Windows 절차는 coturn 공식 패키지와 Docker 이미지 문서를 기준으로 썼어요.