집에 있는 시놀로지 NAS에 밖에서 접속할 때 my-nas.synology.me 같은 DDNS 주소 대신 개인 도메인(nas.example.com)을 쓰도록 바꿨습니다. 루트 도메인 example.com은 이 블로그 서버로 쓰고 있어서, NAS는 하위 도메인 + CNAME으로 붙였습니다. 하는 김에 공유기 포트포워딩을 점검해 보니 11개나 열려 있었고, 실제로 쓰는 포트를 확인해 4개만 남기고 정리했습니다. 실제 설정 화면 기준으로 정리합니다.
※ 보안을 위해 이 글의 실제 도메인과 계정명은 예시 값(nas.example.com, my-nas.synology.me, admin)으로 바꿨고, 캡처 속 도메인·DDNS 주소·서버 주소·포트 번호는 블러 처리해 가렸습니다.

결론
- 시놀로지 DDNS(my-nas.synology.me)가 집 공인 IP를 따라가고, 도메인 쪽에는
nas→my-nas.synology.meCNAME 하나만 추가하면 됩니다. - 집 IP가 바뀌어도 DDNS만 갱신되면 되므로 도메인 DNS를 다시 고칠 필요가 없습니다.
- DSM 인증서에 nas.example.com 인증서를 만들어 기본 인증서로 지정해야 브라우저 경고 없이 HTTPS로 접속됩니다.
- 포트포워딩 11개 중 실제로 NAS가 받고 있던 포트는 80·443(웹)과 Immich 컨테이너 하나뿐이었습니다. 안 쓰는 포트를 지우고 80·443·5001(TCP), 1194(UDP)만 남겼습니다.
환경
| 항목 | 내용 |
|---|---|
| NAS | Synology NAS (DSM 7 계열, 화면 기준) |
| DDNS | Synology DDNS — my-nas.synology.me |
| 도메인 | example.com (DNS는 도메인 등록 업체에서 관리) |
| 사용 주소 | nas.example.com (DSM), photo.example.com |
| 외부 포트 (정리 후) | 80·443·5001/TCP, 1194/UDP |
구성. 도메인 → DDNS → 집 공인 IP
접속 순서는 이렇습니다.
nas.example.com --CNAME--> my-nas.synology.me --DDNS--> 집 공인 IP --포트포워딩 5001--> NAS
- A 레코드로 집 IP를 직접 넣으면, 가정용 인터넷 IP가 바뀔 때마다 도메인 DNS를 손으로 고쳐야 합니다.
- CNAME으로 DDNS 주소를 가리키면 IP 변경은 NAS가 DDNS에 알아서 갱신합니다.
- 루트(@)와 www는 블로그 서버 A 레코드라서 그대로 두고, NAS는 하위 도메인만 씁니다.
설정 방법
1. 시놀로지 DDNS 등록
- 제어판 → 외부 액세스 → DDNS → 추가
- 서비스 공급자 Synology 선택 → 호스트 이름 입력(예: my-nas) →
.synology.me선택 - 저장 후 목록에서 상태: 정상, 외부 주소에 집 공인 IP가 보이는지 확인합니다.

2. 도메인 DNS에 CNAME 추가
- 도메인 등록 업체의 DNS 레코드 관리 화면으로 이동
- 유형 CNAME, 호스트 이름 nas, 값 my-nas.synology.me 입력 후 저장
- 다른 서비스도 같은 방식으로 추가합니다. 저는
photo도 같은 DDNS 주소로 CNAME을 걸었습니다.
[직접 확인] DNS 레코드는 루트(@)·www가 블로그 서버 A 레코드, nas·photo가 my-nas.synology.me CNAME이며 TTL은 모두 180초입니다. 루트를 블로그로 옮긴 뒤에도 NAS 주소는 하위 도메인이라 서로 겹치지 않습니다.
3. DSM 인증서 만들고 기본 인증서로 지정
- 제어판 → 보안 → 인증서 → 추가 → 새 인증서 추가
- 도메인 이름에 nas.example.com를 넣고 발급
- 발급된 인증서를 기본 인증서로 지정하거나, 설정에서 DSM 서비스에 nas.example.com 인증서를 연결합니다.

[직접 확인] 인증서 목록에서 nas.example.com가 (기본 인증서)로 표시되고, photo.example.com 인증서도 따로 있습니다. 두 인증서 만료일은 2027-02-01입니다.
[참고 · 직접 확인하지 않음] DSM의 Let’s Encrypt 인증서는 발급·갱신 때 Let’s Encrypt 서버가 외부에서 80번 포트로 접속해 도메인을 확인하는 방식이라, 80번을 닫으면 갱신이 실패하는 것으로 알려져 있습니다. 그래서 포트를 정리할 때 80은 남겼습니다.
4. 공유기 포트포워딩 점검
공유기 포트포워딩 목록을 열어 보니 예전에 이것저것 테스트하면서 연 포트가 11개 남아 있었고, 대부분 프로토콜이 전부(TCP+UDP)로 되어 있었습니다.

어떤 포트를 실제로 쓰는지는 NAS에 SSH로 접속해 확인했습니다. 방법은 아래 참고: 명령어로 확인하기에 있습니다. 확인 결과는 이렇습니다.
| 포트 | NAS에서 받는 프로그램 | 조치 |
|---|---|---|
| 80, 443 | DSM 웹 서버(nginx) — Let’s Encrypt 갱신, 역방향 프록시 | 남김, 프로토콜 TCP로 변경 |
| 2282 | Docker 컨테이너 immich_server (Immich 사진 백업) | 삭제 — photo.example.com 역방향 프록시(443)로 접속하므로 불필요 |
| 8080, 9000, 2222, 8081, 9091, 6009 | 받는 프로그램 없음 | 삭제 |
| 5001 / 1194 | DSM HTTPS / OpenVPN | 남김 |
- 공유기 관리 화면 → 포트포워딩에서 쓰지 않는 줄을 삭제
- 남기는 줄은 수정에서 프로토콜을 서비스에 맞게 지정 (웹·DSM은 TCP, OpenVPN은 UDP)
- 예전에 열어 둔 5000/TCP(HTTP)는 이미 삭제한 상태

[직접 확인] Immich는 DSM 역방향 프록시에 photo.example.com(443) → localhost:2282 규칙이 있어서, 외부 2282 포트포워딩을 지워도 photo.example.com로 접속됩니다.
5. 접속 확인
- 휴대폰 LTE/5G처럼 집 밖 네트워크에서
https://nas.example.com:5001접속 - 주소창에 자물쇠가 뜨고 인증서 경고 없이 DSM 로그인 화면이 나오면 완료
[직접 확인] 평소에는 NAS의 OpenVPN으로 접속해서 쓰고, VPN 없이 파일만 잠깐 볼 때를 위해 DSM은 5001만 열어 두었습니다. 두 방식 모두 외부에서 정상 접속됩니다.
주의사항
- 5000(HTTP)은 외부에 열지 마세요. 로그인 정보가 암호화되지 않은 채로 오갑니다.
- 외부에 DSM을 연다면 제어판 → 보안 → 보호의 자동 차단, 관리자 계정 2단계 인증을 켜 두는 것이 좋습니다.
- 포트포워딩 프로토콜을 전부로 두면 필요 없는 UDP까지 열립니다. 서비스에 맞게 TCP 또는 UDP 하나만 지정하세요.
- Docker 컨테이너 포트를 외부에 직접 열기보다 역방향 프록시(443)로 받으면 HTTPS가 적용되고 열린 포트도 줄어듭니다.
- CNAME 값에는
http://나 포트 번호를 넣지 않습니다. 주소(my-nas.synology.me)만 넣습니다. - 집 내부에서 nas.example.com로 접속이 안 되면 공유기의 NAT 루프백(헤어핀) 지원 여부 문제일 수 있습니다. 내부에서는 NAS 내부 IP로 접속하면 됩니다.
참고: 명령어로 확인하기
포트를 실제로 쓰는 프로그램 찾기 (NAS SSH)
제어판 → 터미널 및 SNMP → SSH 서비스 활성화 후 관리자 계정으로 NAS에 SSH 접속합니다. 확인이 끝나면 SSH는 다시 꺼 두는 것이 좋습니다.
nas.example.com
admin@NAS:~$
sudo netstat -tlnp | grep -E ':(8080|9000|2222|443|8081|80|9091|6009|2282) '
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13168/nginx: master tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 13168/nginx: master tcp 0 0 0.0.0.0:2282 0.0.0.0:* LISTEN 19406/docker-proxy tcp6 0 0 :::80 :::* LISTEN 13168/nginx: master tcp6 0 0 :::443 :::* LISTEN 13168/nginx: master tcp6 0 0 :::2282 :::* LISTEN 19414/docker-proxy
Readyssh2VT100
- 역할: 포트포워딩에 걸린 포트 중 NAS에서 실제로 대기(LISTEN) 중인 포트와 프로그램을 보여 줍니다.
- 결과 해석: 80·443은 DSM 웹 서버(nginx), 2282는 Docker 컨테이너(docker-proxy)입니다. 목록에 안 나온 포트(8080, 9000, 2222, 8081, 9091, 6009)는 받는 프로그램이 없으니 포트포워딩을 지워도 됩니다.
- 5001(DSM)과 1194(OpenVPN)는 쓰는 줄 알고 있어 이번 검색에서 뺐습니다. 필요하면 grep 목록에 추가하세요.
nas.example.com
admin@NAS:~$
sudo docker ps --format '{{.Names}} {{.Image}} {{.Ports}}' | grep 2282immich_server ghcr.io/immich-app/immich-server:release 0.0.0.0:2282->2283/tcp, :::2282->2283/tcp
Readyssh2VT100
- 역할: docker-proxy가 잡고 있는 포트가 어느 컨테이너 것인지 찾습니다.
- 결과 해석: 2282는 Immich 서버 컨테이너(내부 2283)였습니다. DSM 역방향 프록시가 photo.example.com로 받아 넘겨 주고 있어 외부 포트포워딩은 필요 없었습니다.
DNS·포트 연결 확인 (Windows PowerShell)
PS C:\>
nslookup nas.example.com
- 역할: nas.example.com가 어떤 주소로 연결되는지 조회합니다.
- 결과 해석: 별칭(Aliases)에
my-nas.synology.me가 보이고, 마지막 Address가 DDNS 화면의 외부 주소와 같으면 정상입니다. Non-existent domain이 나오면 CNAME 레코드가 없거나 아직 반영 전입니다. TTL(여기서는 180초)만큼 기다린 뒤 다시 확인합니다.
PS C:\>
Test-NetConnection nas.example.com -Port 5001
- 역할: 외부에서 5001 포트까지 실제로 연결되는지 확인합니다. 집 밖 네트워크에서 실행해야 의미가 있습니다.
- 결과 해석:
TcpTestSucceeded : True면 포트포워딩까지 정상, False면 공유기 포트포워딩이나 DSM 방화벽을 확인합니다.
정리
- 시놀로지 DDNS(my-nas.synology.me)를 등록해 집 공인 IP를 따라가게 한다.
- 도메인 DNS에 nas → my-nas.synology.me CNAME을 추가한다. 루트·www는 그대로 둔다.
- DSM 인증서에 nas.example.com를 발급해 기본 인증서로 지정한다.
- 공유기 포트포워딩을 netstat·docker ps로 점검해 안 쓰는 포트는 지우고, 남는 포트는 TCP/UDP를 정확히 지정한다 (여기서는 80·443·5001/TCP, 1194/UDP).
- 집 밖에서 https://nas.example.com:5001 로 접속해 확인한다.
설정했는데 접속이 안 된다면 댓글로 nslookup 결과(IP는 가리고)를 남겨 주세요. 확인해 보고 답변드리겠습니다.