듀얼 스택 회선에서 IPv6로 NAS에 직결하는 완전 가이드: 포트 포워딩 없이, NAT 통과 없이

듀얼 스택 회선에서 IPv6로 NAS에 직결하는 완전 가이드: 포트 포워딩 없이, NAT 통과 없이

적용 전제: 회선이 이미 IPv4 + IPv6 듀얼 스택이어야 합니다(확실하지 않다면 먼저 IPv6 진단 도구에서 한 번 측정하세요)
목표: 외부에서 IPv6로 집 안의 NAS에 직접 접속하기 — 포트 포워딩 없음, frp 설치 없음, 중계 대역폭 구매 없음
소요 시간: 약 30분이며, 그 절반은 "주소가 정말 바뀌는지"를 확인하는 데 들어갑니다

먼저 오해 하나를 정리합니다: IPv6에는 포트 포워딩이 필요 없지만, 방화벽 허용은 필요합니다

많은 사람이 IPv6 직결을 처음 설정할 때 같은 지점에서 막힙니다. 공유기에서 "IPv6 포트 포워딩"을 한참 찾아봐도 그런 메뉴가 없어서, 자기 공유기가 지원하지 않는다고 생각합니다.

실은 개념이 어긋난 것뿐입니다.

IPv4 시대에 포트 포워딩(NAT 변환)이 필요했던 이유는, 집 안의 모든 기기가 하나의 공인 IPv4를 공유하므로 공유기가 "외부에서 들어온 5000번 포트를 어느 기기에 넘길지" 알아야 했기 때문입니다:

외부망 → 공인 IPv4:5000 → 공유기가 NAT 테이블 조회 → 192.168.1.100:5000(NAS)
                            ↑ 이 단계가 포트 포워딩

IPv6에서는 각 기기가 스스로 공인 주소를 가집니다. 공유기는 변환할 필요 없이 "이 패킷을 들여보낼지"만 결정합니다:

외부망 → [2408:xxxx:xxxx:xxxx::100]:5000 → 공유기 IPv6 방화벽 → NAS
                                            ↑ '허용/차단'만 있고 변환은 없음

따라서:

IPv4 IPv6 포트 포워딩이 필요한가 필요 불필요 공유기를 손대야 하는가 필요 필요(방화벽 인바운드 규칙을 바꾸는 것이며, 포워딩이 아님) 공인 IP가 필요한가 필요(대부분의 가정 회선은 받지 못함) 통신사가 이미 부여함 NAT 통과가 필요한가 대부분 필요 불필요

공유기의 IPv6 방화벽은 기본값이 "모든 인바운드 거부"입니다. 이는 설계 의도이며 마땅히 그래야 합니다. 여러분이 할 일은 NAS의 그 주소와 그 포트에 구멍 하나를 열어 주는 것뿐입니다. 메뉴를 찾을 때는 "포트 포워딩"이 아니라 **"IPv6 방화벽"**을 찾으세요.

직결이 중계보다 빠른 이유

여기서 구체적인 배수를 부풀리지는 않겠습니다(회선마다 차이가 너무 커서 통일된 숫자는 모두 지어낸 것입니다). 구조적인 차이만 말하겠습니다:

  • 중계/터널 경유: 여러분의 데이터는 NAS → 중계 서버 → 사용자, 한 바퀴 더 돌아가며,상한이 중계 노드의 대역폭과 그 유료 요금제에 묶입니다
  • IPv6 직결 경유: NAS → 사용자, 통신사 백본을 타고, 상한은 집 회선의 업로드 대역폭

가정 회선의 업로드는 보통 30~50 Mbps(기가비트 회선)이며, 이 수치가 바로 직결로 영상을 보거나 파일을 당길 때의 천장입니다. 중계 방식은 이 수치조차 채우지 못하는 경우가 많고, 여기에 "직결이 더 빠르다"는 말의 진짜 근거가 있습니다.

1단계: 자신이 정말 듀얼 스택인지 확인

열기: 17NAS의 IPv6 진단을 열고 결과가 어느 분류에 속하는지 봅니다:

진단 결과 의미 이 튜토리얼이 적용되는가 IPv4 ✅ + IPv6 ✅ 듀얼 스택, 가장 이상적 ✅ 완전히 적용 가능 IPv6만 순수 v6 네트워크 ✅ 적용 가능하나, 접속하는 쪽에도 v6가 있어야 함 IPv4만 통신사가 v6를 배포하지 않았거나 공유기에서 꺼져 있음 ❌ 먼저 IPv6를 켜세요. 글 끝의 관련 글 참고

함정 하나에 주의: 이 테스트가 측정하는 것은 "지금 이 기기"의 출구입니다. 스마트폰을 Wi-Fi에 연결해 IPv6가 나온다고 해서 NAS에도 있다는 뜻은 아닙니다 — NAS가 IPv6를 전달하지 않는 스위치/소프트 라우터 뒤에 물려 있거나, NAS 자체가 IPv6를 꺼 두었을 수 있습니다. 그래서 다음 단계에서는 NAS를 따로 확인합니다.

겸사겸사 측정된 주소 프리픽스(2408:/240e:/2409: 등)를 기억해 두세요. 나중에 NAS 주소와 대조할 때 씁니다.

2단계: NAS가 받은 것이 "공인 IPv6"인지 확인

IPv6 주소는 있으면 되는 게 아니라 공인 라우팅 가능한 종류여야 합니다. 세 가지 주소를 반드시 구분하세요:

주소 시작 종류 원격 접속 가능 여부 fe80:: 링크 로컬 주소(Link-Local) ❌ 같은 세그먼트에서만 유효, 절대 통하지 않음 fd00:: ~ fdff:: 고유 로컬 주소(ULA), v6판 사설 주소에 해당 ❌ 라우팅 불가 2000::/3(즉 2xxx: 240e: 2408: 2409: 240c: 등) 글로벌 유니캐스트 주소(GUA) ✅ 바로 이것

플랫폼별 확인 방법

Synology DSM: 제어판 → 네트워크 → 네트워크 인터페이스 → LAN 선택 → 편집 → IPv6, 모드를 "자동"으로 하면 아래에 받아온 주소가 표시됩니다.

QNAP QTS: 제어판 → 네트워크 및 가상 스위치 → 인터페이스 → 해당 NIC → IPv6.

fnOS / Linux / Synology SSH:

ip -6 addr show scope global

Windows(NAS가 Windows이거나 소프트 라우터 가상머신인 경우):

ipconfig /all

NAS에 fe80::로 시작하는 주소만 있다면, 공유기가 LAN 쪽에 IPv6 프리픽스를 배포하지 않은 것입니다. 공유기로 돌아가서:

  • WAN 쪽 IPv6 연결 유형: DHCPv6 또는 SLAAC 선택(국내 통신사는 대부분 DHCPv6-PD)
  • 프리픽스 획득 방식: DHCPv6-PD(프리픽스 위임), 프리픽스 길이는 보통 /60 또는 /56
  • LAN 쪽 할당 방식: SLAAC 또는 SLAAC + 상태 비저장 DHCPv6

변경 후 1~2분 기다렸다가 NAS에서 다시 확인하세요. 그래도 없으면 NAS 네트워크 어댑터를 사용 안 함으로 바꿨다가 다시 사용으로 설정하세요.

3단계(가장 자주 건너뛰는 단계): NAS 주소를 안정시키기

설정하고 이틀 뒤 갑자기 접속이 안 된다면 십중팔구 여기가 원인입니다. IPv6 주소는 두 부분으로 조립됩니다:

2408:8210:1234:5678  :  a1b2:c3d4:e5f6:0789
└── 프리픽스(통신사 부여) ──┘  └── 인터페이스 ID(기기 결정)──┘

두 부분 모두 바뀔 수 있습니다. 하지만 원인과 대책은 완전히 다릅니다.

변화 1: 인터페이스 ID가 바뀜(IPv6 프라이버시 확장)

고정 주소로 추적당하는 것을 막기 위해 많은 시스템이 "임시 주소/프라이버시 확장"을 기본으로 켜 두며, 인터페이스 ID는 매일, 심지어 몇 시간마다 바뀝니다. 데스크톱에서는 좋은 일이지만 NAS에서는 재앙입니다 — DDNS가 영원히 따라잡지 못합니다.

자신이 해당하는지 판단하는 법:

ip -6 addr show scope global

출력에 temporary 또는 secondary 문구가 있으면 임시 주소입니다. 또 하나의 거친 방법:주소 중간에 ff:fe가 들어 있으면 EUI-64 주소(NIC의 MAC에서 유도되어 본래 안정적입니다). 규칙성이 보이지 않고 매일 바뀌는 문자열은 임시 주소입니다.

끄는 방법:

Linux / fnOS / Synology SSH:

# 먼저 임시로 적용해 검증
sudo sysctl -w net.ipv6.conf.all.use_tempaddr=0
sudo sysctl -w net.ipv6.conf.default.use_tempaddr=0

# 문제가 없으면 /etc/sysctl.conf에 기록해 영구 적용
echo "net.ipv6.conf.all.use_tempaddr=0" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.default.use_tempaddr=0" | sudo tee -a /etc/sysctl.conf

Windows(관리자 PowerShell / CMD):

netsh interface ipv6 set global randomizeidentifiers=disabled
netsh interface ipv6 set privacy state=disabled

Synology DSM과 QNAP은 기본적으로 EUI-64를 사용하므로 인터페이스 ID는 대체로 안정적입니다. 그래도 위 방법으로 한 번 확인해 보시길 권합니다. 버전마다 동작이 다릅니다.

변화 2: 프리픽스가 바뀜(통신사가 IP를 교체)

이것은 여러분이 통제할 수 없습니다. 중국전신/중국연통/중국이동의 가정 회선은 광단말기 재접속, 회선 공사, 장시간 접속 유지 후에 새 프리픽스로 바뀔 수 있습니다. 증상은 주소 뒷부분은 그대로인데 앞 4개 그룹이 바뀌는 것입니다.

대책은 하나뿐입니다: DDNS(7단계에서 자세히 다룹니다). 수동으로 정적 IPv6를 설정하려 하지 마세요 — 프리픽스가 바뀌는 순간 정적으로 설정한 주소는 즉시 무효가 됩니다.

공유기가 "IPv6 인터페이스 ID 수동 지정"을 지원하면(OpenWrt, iKuai, 일부 ASUS 기종에 있습니다), NAS의 인터페이스 ID를 기억하기 쉬운 값, 예컨대 ::100로 고정할 수 있습니다. 그러면 프리픽스가 바뀌어도 주소의 앞부분만 바뀌어 문제 파악이 훨씬 수월합니다.

4단계: 공유기 IPv6 방화벽 허용

핵심 동작: NAS의 전체 IPv6 주소의 지정 포트로의 원격 접속을 허용한다.

먼저 어떤 포트를 열지 정합니다. 흔한 것들은 다음과 같습니다:

서비스 기본 포트 권장 Synology DSM 5000 (HTTP) / 5001 (HTTPS) 기본이 아닌 포트로 바꾸고 HTTPS만 개방 QNAP QTS 8080 / 443 위와 같음 fnOS 5666 위와 같음 리버스 프록시 443 가장 권장: 이것 하나만 개방 SSH 22 필요하지 않으면 열지 말고, 열려면 포트 변경 + 키 로그인

리버스 프록시로 443 하나에 모을 수 있다면 여러 개를 열지 마세요. 포트를 하나 더 열 때마다 스캔당할 입구가 하나 더 늘어납니다.

브랜드별 설정 위치

ASUS
방화벽 → IPv6 방화벽 → IPv6 방화벽 활성화 = 예 → 규칙 추가:

항목 입력 내용 원격 IP / 길이 비워 둠(모든 출처를 의미) 로컬 IP NAS의 전체 IPv6 주소(축약형도 아니고, ::100도 아님) 포트 범위 예: 5001 프로토콜 TCP

TP-LINK
IPv6 설정 → 방화벽 / "IPv6 전달 규칙"(펌웨어마다 명칭이 다름). NAS의 IPv6 주소와 포트를 입력합니다. 일부 구형 펌웨어에는 "IPv6 방화벽 켜기/끄기" 마스터 스위치만 있습니다.

Xiaomi / Redmi
일반 라우팅 → 고급 설정 → IPv6 설정. 대부분의 기종에는 방화벽 마스터 스위치만 있습니다. 마스터 스위치만 조작할 수 있다면 반드시 NAS 쪽에서 보안을 구성하세요(8단계).

Huawei
추가 기능 → 보안 설정 → IPv6 방화벽. "사용자 지정"을 선택한 뒤 허용 규칙을 추가합니다. "끄기"를 선택하면 전부 허용이 되므로 권장하지 않습니다.

OpenWrt / iStoreOS(가장 정밀, 권장)
SSH로 접속해 실행:

uci add firewall rule
uci set firewall.@rule[-1].name='Allow-NAS-DSM'
uci set firewall.@rule[-1].src='wan'
uci set firewall.@rule[-1].dest='lan'
uci set firewall.@rule[-1].proto='tcp'
uci set firewall.@rule[-1].dest_ip='2408:xxxx:xxxx:xxxx::100'
uci set firewall.@rule[-1].dest_port='5001'
uci set firewall.@rule[-1].family='ipv6'
uci set firewall.@rule[-1].target='ACCEPT'
uci commit firewall
/etc/init.d/firewall restart

여기서 dest_ip를 NAS의 실제 주소로 바꿉니다. 프리픽스가 바뀌면 이 규칙은 무효가 됩니다 — 더 견고한 방식은 인터페이스 ID만 일치시키는 것이며, OpenWrt는 ::100/::ffff:ffff:ffff:ffff 같은 마스크 형식을 지원합니다. 버전 차이가 크므로 설정 후 반드시 6단계 방법으로 실측하세요.

광단말기도 한 번 막을 수 있습니다

만약 광단말기가 라우터 모드라면(자체적으로 다이얼), 데이터는 먼저 광단말기를 거쳐 공유기를 지나야 하므로 광단말기의 IPv6 방화벽도 똑같이 막습니다. 이 이중 구조는 조정이 매우 어렵습니다.

먼저 광단말기를 브리지 모드로 바꾸고 공유기가 다이얼하도록 해서 한 계층만 남기시길 강력히 권합니다. 참고: 10분 만에 광단말기 브리지 전환하기.

⚠️ 간편하다고 IPv6 방화벽을 통째로 끄지 마세요. 그건 NAS의 모든 대기 포트(SMB, SSH, 데이터베이스, Docker 안의 수많은 컨테이너 포함)를 전부 공인망에 노출하는 것과 같습니다. 클릭 두 번 더 하고 규칙을 추가하는 편이 낫습니다.

5단계: NAS 자체의 방화벽도 잊지 마세요

공유기에서 허용해도 NAS 자체에 또 하나의 문이 있습니다. 이것이 "공유기 규칙은 분명히 넣었는데도 안 된다"는 흔한 원인입니다.

Synology DSM: 제어판 → 보안 → 방화벽. 규칙의 "출처 IP"를 확인하세요. 이전에 IPv4 대역(예: 192.168.1.0/24)만 적어 두었다면 IPv6 트래픽은 기본 규칙에 막힙니다. 해당 포트를 허용하고 출처를 "모두"로 한 규칙을 추가해야 합니다.

QNAP: 제어판 → 시스템 → 보안 → 허용/거부 목록.

Linux(ufw):

sudo ufw allow proto tcp to any port 5001
sudo ufw status verbose

주의: /etc/default/ufw 의 IPV6=yes 를 반드시 켜야 합니다(최신 버전은 기본으로 켜져 있음). 그렇지 않으면 규칙이 IPv4에만 적용됩니다.

Docker로 배포한 서비스는 따로 검증해야 합니다. 컨테이너 네트워크의 IPv6 동작은 Docker 버전과 daemon 설정에 따라 달라지며, -p 5001:5001 어떤 환경에서는 IPv6가 통하고 어떤 환경에서는 통하지 않습니다. 경험으로 단정하지 말고 다음 단계의 방법으로 실측하세요. 실측에서 통하지 않으면 흔한 해법 두 가지가 있습니다:

  • 컨테이너를 network_mode: host 로 변경(가장 간편)
  • /etc/docker/daemon.json 에서 IPv6 지원을 켜기("ipv6": true 와 "ip6tables": true 조합). 변경 후 dockerd 재시작

6단계: 검증 — 공인망에서 실제로 역접속

이 단계를 "집에서 한번 연결해 봤다"로 대충 넘기지 마세요.내부망에서 통한다고 공인망에서 통하는 것은 아닙니다: 집에서 NAS의 IPv6 주소에 접속하면 패킷이 공유기 밖으로 나가지 않으므로, 방화벽 규칙이 적용되는지 전혀 측정할 수 없습니다.

반드시 외부에서 검증하세요. 아래 두 명령을 NAS에서(SSH 또는 Synology 터미널) 직접 실행하는 것이 가장 빠른 방법입니다:

1. 먼저 NAS 자체에 IPv6 출구가 있는지 확인하고, 그 공인 주소를 얻기

curl -6 https://v6.17nas.com

보통은 그대로 주소가 돌아옵니다. 예: 2408:8210:1234:5678:a1b2:c3d4:e5f6:789.

  • 오류 / 시간 초과 → NAS에 IPv6 출구가 아예 없습니다. 2단계로 돌아가세요
  • 돌아온 주소가 DSM에서 본 것과 다름 → 십중팔구 임시 주소가 원인입니다. 3단계로 돌아가세요

위치와 통신사까지 함께 보고 싶다면:

curl -6 "https://v6.17nas.com?format=json"

2. 공인 서버가 여러분의 포트로 능동적으로 역접속하게 하기

curl -6 "https://17nas.com/api/tools/port-check.php?port=5001"

이 엔드포인트는 17NAS 서버에서 방금 그 주소의 지정 포트로 TCP 연결을 한 번 능동적으로 시도하고, 그 결과를 알려 줍니다. 반환값은 대략 이렇습니다:

{"success":true,"status":"open","ip":"2408:8210:...","port":5001,"ip_version":6,"latency_ms":24}

status 세 가지 결과가 서로 완전히 다른 세 가지 문제에 대응합니다:

status 의미 어디를 볼까 open 통과 설정 완료. 7단계로 진행 refused 패킷은 NAS에 도달했지만 그 포트에 대기하는 것이 없음(RST 수신) 공유기 방화벽은올바름. 문제는 NAS 쪽: 서비스가 실행되지 않았거나 포트를 잘못 적음 filtered 패킷이 버려지고 아무 응답도 없음 공유기/광단말기 방화벽이 허용하지 않았거나 NAS 자체 방화벽이 막음

이 둘을refused 와 filtered 를 구분할 수 있으면 헛짓거리 시간을 절반으로 줄일 수 있습니다 — 전자면 공유기를 그만 만지고, 후자면 NAS를 그만 만지세요.

주의: 이 엔드포인트는 요청을 보낸 그 주소로만 역접속하며, 임의의 IP 지정은 받지 않습니다. 따라서 명령은 반드시 NAS에서 실행해야 합니다. 여러분의 PC에서 실행하면 그 PC를 측정합니다. 시간당 30회 제한.

3. 브라우저 검증(대괄호를 잊지 마세요)

IPv6 주소는 콜론투성이여서 브라우저가 이를 포트 구분자로 해석합니다. 반드시 대괄호로 감싸야 합니다:

❌ https://2408:8210:1234:5678::100:5001
✅ https://[2408:8210:1234:5678::100]:5001

스마트폰을 이용해스마트폰의 Wi-Fi를 끄고 4G/5G로 이 주소를 열어 보세요. 실제 사용 상황에 가장 가까운 검증입니다. 스마트폰 통신사망에 IPv6가 없으면 열리지 않습니다 — 이는 여러분의 설정 실수가 아니라 스마트폰 쪽 문제입니다.

7단계: 주소가 바뀌므로 DDNS(AAAA 레코드)를 설정

이제 연결됩니다. 하지만 주소는 아무도 외울 수 없는 16진수 나열이고, 프리픽스는 언제든 바뀝니다. 해결책은 도메인의 AAAA 레코드(IPv6는 AAAA, IPv4가 A)를 현재 주소로 자동 지정하는 것입니다.

방안 A: ddns-go(권장, GUI 제공)

Cloudflare, Alibaba Cloud, Tencent Cloud, DNSPod 등을 지원하며 Docker 한 줄로 시작합니다:

docker run -d --name ddns-go --restart=always \
  --network=host \
  -v /opt/ddns-go:/root \
  jeessy/ddns-go

접속 주소 http://NAS 내부 IP:9876 에 접속해 설정합니다.핵심 설정:

  • "IPv6"를 켜고 도메인 유형은 AAAA
  • 획득 방식: "네트워크 인터페이스로 획득"을 우선 선택하고, 정규식으로 임시 주소를 걸러내기
  • TTL은 60~120초 로 설정. 기본값 600초는 프리픽스가 바뀌면 10분을 기다려야 한다는 뜻입니다

방안 B: 직접 스크립트 작성(가장 간단하고 확실)

앞의 엔드포인트와 조합하면 cron 하나로 충분합니다. Cloudflare를 예로 듭니다:

#!/bin/bash
# /opt/ddns6.sh — AAAA 레코드를 5분마다 동기화

TOKEN="your_Cloudflare_API_Token"
ZONE_ID="your_Zone_ID"
RECORD_ID="Record_ID_of_the_AAAA_record"
NAME="nas.example.com"

IP6=$(curl -6 -sS --max-time 10 https://v6.17nas.com)
[ -z "$IP6" ] && exit 0                       # 못 가져오면 아무것도 하지 않음. 레코드를 비우지 말 것

LAST=$(cat /tmp/.ddns6_last 2>/dev/null)
[ "$IP6" = "$LAST" ] && exit 0                # 변동이 없으면 요청을 보내지 않음

curl -sS -X PUT \
  "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  --data "{\"type\":\"AAAA\",\"name\":\"$NAME\",\"content\":\"$IP6\",\"ttl\":120,\"proxied\":false}" \
  && echo "$IP6" > /tmp/.ddns6_last

실행 권한을 주고 crontab에 등록합니다:

chmod +x /opt/ddns6.sh
crontab -e
# 이 줄을 추가
*/5 * * * * /opt/ddns6.sh >> /var/log/ddns6.log 2>&1

ZONE_ID 는 Cloudflare 도메인 개요 페이지 오른쪽 아래에 있습니다. RECORD_ID 는 먼저 AAAA 레코드를 수동으로 하나 만든 뒤 API로 레코드 목록을 조회해 얻어야 합니다.

실수하기 쉬운 세 가지:

  1. 스크립트는 반드시 NAS에서 실행해야 합니다. 왜냐하면 curl -6 v6.17nas.com 가 반환하는 것은 "요청을 보낸 그 기기의 주소"이기 때문입니다. 공유기에서 실행하면 공유기의 주소가 나오며 둘은 다릅니다.
  2. proxied는 반드시 false여야 합니다. Cloudflare 주황 구름을 켜면 트래픽이 다시 중계로 돌아가 직결의 의미가 사라집니다(게다가 5000/5001 같은 포트는 주황 구름도 프록시하지 않습니다).
  3. 주소를 얻지 못했을 때는 레코드를 갱신하지 마세요. 위 스크립트의 [ -z "$IP6" ] && exit 0 줄이 바로 그 일을 합니다 — 네트워크가 잠깐 흔들려 AAAA 레코드를 빈 값으로 만들어 놓고 두 시간 동안 "도메인이 왜 갑자기 해석되지 않지"를 파헤치는 사람을 너무 많이 봤습니다.

8단계: 보안 — 이 단계는 앞의 일곱 단계를 다 합친 것보다 중요합니다

냉정하게 인식해야 합니다: IPv6 직결은 여러분의 NAS가 정말로 공인망에 서 있다는 뜻이며, 더 이상 NAT가 아무것도 막아 주지 않습니다.

널리 퍼진 잘못된 위안이 있습니다. "IPv6 주소 공간이 워낙 커서 나는 스캔되지 않는다." 2018년이라면 성립했을지 몰라도 지금은 아닙니다. 공격자는 더 이상 주소 공간을 무차별 대입하지 않고, 다음과 같은 곳에서 활성 주소를 직접 얻습니다:

  • 인증서 투명성 로그(CT Log): Let's Encrypt로 nas.example.com 의 인증서를 발급받으면 그 도메인은 당일 공개 CT 로그에 나타나 누구나 조회할 수 있습니다
  • DNS 레코드 무차별 대입: nas. home. syno. ds. 같은 서브도메인은 사전의 첫 몇 개에 들어 있습니다
  • 패시브 DNS 데이터베이스, 그리고 여러분이 포럼에 직접 올린 스크린샷

결론: 도메인을 설정한 순간 주소는 이미 공개되었다고 가정하세요. 보안은 설정 그 자체로 확보해야 하며, "아무도 나를 모른다"에 기대면 안 됩니다.

필수 체크리스트

포트 측면

  • 필요한 포트만 허용하고, 리버스 프록시로 443에 모을 수 있으면 443만 여세요
  • 절대 노출하지 마세요: 445/139(SMB, 랜섬웨어의 최대 입구), 111/2049(NFS), 3389(RDP), 3306/5432(데이터베이스), Docker의 2375
  • 관리 포트(DSM 5000/5001, QTS 8080)는 10000 이상의 비표준 포트로 변경
  • SSH는 필요하지 않으면 열지 말고, 열려면 포트 변경 + 비밀번호 로그인 비활성화, 키만 사용

계정 측면

  • 기본 관리자 계정을 비활성화/이름 변경(Synology의 admin, QNAP의 admin). 이것이 스캐너의 첫 번째 총알입니다
  • 관리자 계정에 **2단계 인증(2FA)**을 켜세요. 이 항목의 가성비가 가장 높습니다
  • 비밀번호는 16자 이상, 다른 사이트와 중복되지 않게

방어 측면

  • Synology: 제어판 → 보안 → 계정 → 켜기자동 차단(5분 내 5회 실패 시 IP 차단 권장)
  • 켜기알림. 로그인 성공/실패를 스마트폰으로 푸시
  • 시스템과 패키지를 최신으로 유지 — Synology와 QNAP 모두 과거에 대규모로 악용된 원격 취약점이 있었고, 패치 적용이 무엇보다 효과적입니다

암호화 측면

  • 원칙적으로 HTTPS를 사용하고, 평문 HTTP로 비밀번호를 보내지 마세요
  • 인증서 발급은 DNS-01 검증 을 우선하세요(DNS에 TXT 레코드 하나 추가). 80번 포트를 열 필요가 없고 "통신사의 80 차단"에도 영향받지 않습니다
  • Synology DSM 내장 Let's Encrypt는 HTTP-01을 사용해 80번 포트 도달성이 필요합니다. 80이 차단되어 있으면 acme.sh로 바꿔 DNS-01을 쓰세요

한 걸음 더

  • 자신과 가족만 쓴다면 가장 견고한 방법은 웹 패널을 직접 노출하지 않고 WireGuard/Tailscale 입구 하나만 여는 것입니다. 암호화된 메시 연결을 맺은 뒤 내부망에 접속합니다. IPv6 직결은 여기서도 가치가 있습니다 — WireGuard가 중계 없이 P2P 연결을 직접 맺을 수 있게 해 줍니다
  • 로그인 로그를 주기적으로 확인하세요(Synology: 제어판 → 로그 센터)

자주 묻는 문제 빠른 참조

증상 가장 가능성 높은 원인 해결 curl -6 v6.17nas.com 시간 초과 NAS에 IPv6 출구가 없음 2단계로 돌아가 공유기의 IPv6 배포 확인 NAS에 fe80:: 주소만 있음 공유기가 프리픽스 위임을 하지 않음 공유기 WAN을 DHCPv6-PD, LAN을 SLAAC로 변경 port-check가 filtered 반환 공유기/광단말기 방화벽이 허용하지 않음 4단계로 돌아가기. 광단말기가 라우터 모드면 먼저 브리지 전환 port-check가 refused 반환 포트에 대기하는 것이 없음 서비스 미실행 또는 포트 번호 오기. 공유기와 무관 내부망은 되는데 외부는 안 됨 내부망만 측정하고 공인 경로를 검증하지 않음 6단계 방법으로 공인망에서 역접속 어제는 됐는데 오늘은 안 됨 주소가 바뀜 임시 주소(3단계) 또는 프리픽스 변경(7단계 DDNS) 스마트폰 4G에서는 안 열리고 집 Wi-Fi에서는 열림 스마트폰 통신사망에 IPv6가 없음 다른 회선으로 시도. 자신의 설정 실수가 아님을 확인 브라우저가 주소가 유효하지 않다고 함 대괄호를 빠뜨림 http://[주소]:포트 회사/학교 네트워크에서 접속 불가 그쪽이 순수 IPv4 네트워크 이 상황에서는 IPv6 직결을 쓸 수 없음. 아래 참고 Docker 안의 서비스는 안 되고 호스트 서비스는 됨 컨테이너에 IPv6가 없음 network_mode: host 로 변경하거나 dockerd에 IPv6 활성화

IPv6 직결로 충분하지 않은 경우

솔직히 말해 IPv6 직결에는 강한 전제가 하나 있습니다: 접속하는 쪽에도 IPv6가 있어야 합니다. 다음 상황에서는 실패합니다:

  • 회사/학교 내부망(많은 기업 네트워크가 지금도 순수 IPv4)
  • 일부 호텔, 공공 Wi-Fi
  • IPv6를 아직 개통하지 않은 소수 회선 요금제
  • 다른 사람에게 공유해 접속하게 해야 하는데 상대의 네트워크 환경을 통제할 수 없는 경우

이런 경우에는 "IPv4 착지점"을 보완으로 마련해야 합니다. 흔한 방법은 CDN/엣지 노드로 IPv4에서 IPv6로의 오리진 변환을 하는 것입니다 — 방문자는 IPv4로 CDN에 접속하고, CDN이 IPv6로 집 안 NAS에 오리진 접속합니다. 자세한 내용은: 공인 IPv4가 없다면? Tencent Cloud EdgeOne + IPv6로 가정 회선 NAT 통과 구현하기.

최선의 방법은 두 다리로 걷는 것입니다. IPv6 직결을 주 경로(빠르고, 무료이며, 무제한)로 두고 CDN이나 Tailscale을 보험으로 삼습니다.

관련 도구와 참고 자료

설정 과정에서 쓰게 될 검증 도구:

참고 자료:

마지막으로 다시 강조합니다: 6단계의 검증은 반드시 하고, 8단계의 보안도 반드시 하세요. 전자는 시간을 아끼고, 후자는 NAS의 모든 데이터를 지켜 줄 수 있습니다.

데이터 참고: 거주하는 지역과 통신사의 IPv6 보급 상황을 알고 싶다면 중국 각 성 IPv6 도달률 통계 를 확인하세요(최근 30일 실제 테스트 표본, 매시간 갱신).