Unraid [3부] Unraid 초고속 우회 허브: Zapret 구축 및 하드웨어 가속 통합 가이드
* 본 글은 실제 Unraid 서버 운영 환경에서 철저한 검증 및 튜닝을 거쳐 작성된 실전 구축 가이드입니다.
국내 인터넷 환경에서 갈수록 고도화되는 통신사의 SNI 기반 DPI(Deep Packet Inspection) 차단을 우회하기 위해 흔히 상용 VPN을 사용하곤 합니다. 하지만 VPN은 모든 트래픽이 해외 서버를 경유하므로 기가비트 회선의 대역폭을 낭비하고 극심한 지연 시간(Ping)을 유발합니다.
이번 3편에서는 VPN의 속도 저하 없이 오직 서버 내부의 로컬 패킷 변조(Desync) 기술만으로 통신사 검열을 0ms 지연 시간으로 완벽히 무력화하는 zapret(nfqws2) 구축법을 정리합니다. 특히 앞선 1, 2편에서 구축한 CrowdSec Raw Table 방화벽, AdGuard Home DNS 필터링, WireGuard VPN 환경과 충돌 없이 완벽히 융합시키고, 인텔 12700H 하이브리드 CPU(P/E-Core) 하드웨어 가속까지 집약된 최종 프로덕션 구성을 공유합니다.

💡 핵심 원리: 하이브리드 자동 학습(Autohostlist)이란?
모든 웹사이트에 무차별적으로 패킷 조작(Desync)을 가하면 국내 포털이나 금융 사이트, 고속 스트리밍 CDN에서 오류가 발생할 수 있습니다. 따라서 평소에는 일반 인터넷을 100% 직통(Bypass)시키되, 수동 등록 파일(list.txt)에 있는 사이트와 통신사 검열 장비가 보낸 차단 신호(TCP RST)를 실시간 감지하여 자동 기록되는 파일(zapret-hosts-auto.txt)의 도메인만 선별적으로 우회시키는 가장 진보된 지능형 파이프라인을 구축합니다.
1. 사전 폴더 준비 및 호스트리스트 생성
Unraid 터미널(Web CLI)을 열고 zapret 설정 및 자동 학습 도메인이 저장될 디렉터리와 기본 파일들을 생성합니다.
# 1. zapret 저장용 디렉터리 생성
mkdir -p /mnt/cache/appdata/zapret_tunnel
# 2. 기본 수동 화이트리스트 파일 생성 (우회가 필요한 도메인 사전 등록)
cat << 'EOF' > /mnt/cache/appdata/zapret_tunnel/list.txt
rutracker.org
btdig.com
EOF
# 3. 실시간 자동 감지 파일 생성 및 읽기/쓰기 권한 부여 (필수)
touch /mnt/cache/appdata/zapret_tunnel/zapret-hosts-auto.txt
chmod 666 /mnt/cache/appdata/zapret_tunnel/zapret-hosts-auto.txt
2. Docker Compose: nfqws2 최적화 서비스 배포
최신 bol-van/zapret v69+ 엔진 기반의 nfqws2를 구동하는 Docker Compose 설정입니다. 호스트 디스크의 도메인 목록을 마운트하고 통신사 RST 감지 및 멀티스플릿(multisplit) 우회 알고리즘을 적용합니다.
작업 경로: /mnt/cache/appdata/zapret_tunnel/docker-compose.yml
services:
zapret2:
image: bolvan/zapret:latest
container_name: zapret2
network_mode: host
restart: unless-stopped
privileged: true
volumes:
- /mnt/cache/appdata/zapret_tunnel:/zapret_config:rw
command:
- nfqws2
- --qnum=200
- --uid=0:0
# [하이브리드 호스트리스트 연동]
- --hostlist=/zapret_config/list.txt
- --hostlist-auto=/zapret_config/zapret-hosts-auto.txt
- --hostlist-auto-fail-threshold=3
- --hostlist-auto-fail-time=60
- --hostlist-auto-retrans-threshold=2
# [국내 통신사 DPI 무력화 멀티스플릿 기법]
- --dpi-desync=multisplit
- --dpi-desync-split-pos=midsld,1
- --dpi-desync-fooling=badseq
- --dpi-desync-autottl=2
터미널에서 cd /mnt/cache/appdata/zapret_tunnel && docker compose up -d 명령어를 실행하여 컨테이너를 실행합니다.
3. 핵심 라우팅: Mangle 테이블 및 인바운드 RST 감지
Unraid의 mangle 테이블을 활용하여 내부 사설 IP와 DNS 트래픽은 온전히 보존하면서, 외부 HTTPS 트래픽과 통신사 차단 RST 신호만 NFQUEUE 200번으로 정확히 배달하는 지능형 라우팅입니다.
🎯 라우팅 3대 원칙
- 내부 격리(Bypass): 로컬 LAN(
192.168.0.0/16), 도커 브리지(172.16.0.0/12), 로컬 DNS(53 포트)는 검열 우회 큐를 타지 않고 즉시 반환(RETURN)합니다. - 아웃바운드 패킷 가로채기: 외부로 나가는 모든 TCP 443 패킷을 큐 200번으로 보내 화이트리스트 대조 및 Desync를 수행합니다.
- 인바운드 RST 차단 포획 (핵심): 통신사 DPI가 쏘는
RST,ACK패킷을PREROUTING단계에서 큐 200번으로 가로채autohostlist가 실시간으로 차단을 인지하도록 만듭니다.
4. 인텔 12700H 빅리틀 하드웨어 최적화
인텔 12세대 엘더레이크 모바일 CPU(12700H)는 6개의 P-Core와 8개의 E-Core로 구성되어 있습니다. 네트워크 패킷 스티어링(RPS)이 E-Core로 튀면 코어 간 클럭 및 파이프라인 차이로 인해 TCP 패킷 순서 역전(Out-of-Order)이 발생하여 웹 로딩이 멈칫거릴 수 있습니다.
- RPS(Receive Packet Steering) 비활성화: 물리 인터페이스의
rps_cpus를0으로 지정하여 멀티코어 간 불필요한 패킷 핑퐁을 차단합니다. - 네트워크 인터럽트(IRQ) P-Core 고정: 초고속 패킷 처리를 전담하는 P-Core(Core 2~Core 4)에 네트워크 프로세스를 집중시켜 0.01ms 수준의 극초단 응답성을 확보합니다.
- NIC 체크섬 오프로딩 해제: 랜카드가 패킷 체크섬을 검사하여 변조된 desync 패킷을 폐기하지 않도록 물리 랜카드의 하드웨어 오프로딩을 소프트웨어 처리로 전환합니다.
5. 최종 마스터 자동화 스크립트 (User Scripts)
서버 부팅 시 1편의 CrowdSec Raw Table, 2편의 WireGuard MSS Clamping, 그리고 3편의 Zapret Mangle 및 12700H CPU 가속을 일괄 완벽하게 세팅하는 최종 통합 스크립트입니다.
User Scripts 등록
- Unraid 웹 GUI → Settings > User Scripts 이동
- Add New Script 클릭 → 이름:
Zapret-Master-Engine입력 - 스케줄을 At Startup of Array로 설정하고 아래 코드를 저장합니다.
#!/bin/bash
# ================================================================
# [FINAL MASTER V5.1] Unraid All-in-One Network & Zapret Engine
# Hardware: Intel 12700H (P/E-Core Tuning) + SKB ISP
# ================================================================
LAN_NET="192.168.0.0/16"
DOCKER_NET="172.16.0.0/12"
ZAPRET_CONTAINER="zapret2"
QNUM=200
echo "⏳ [$(date)] 네트워크 최적화 및 Zapret 라우팅 초기화 시작..."
# 1. 인텔 12700H 하드웨어 가속 및 체크섬 오프로딩 안전 해제
for iface in eth0 eth1; do
if [ -d "/sys/class/net/$iface" ]; then
ethtool -K $iface tx off rx off gso off gro off tso off >/dev/null 2>&1
# P/E 코어 패킷 역전 방지를 위해 RPS 비활성화
echo 0 > /sys/class/net/$iface/queues/rx-0/rps_cpus 2>/dev/null
fi
done
# 2. 커널 파라미터 최적화 (BBR 및 IP 포워딩)
sysctl -w net.ipv4.ip_forward=1 >/dev/null
sysctl -w net.core.default_qdisc=fq >/dev/null
sysctl -w net.ipv4.tcp_congestion_control=bbr >/dev/null
# 3. Zapret 컨테이너 기동 확인
if [ "$(docker inspect -f '{{.State.Running}}' $ZAPRET_CONTAINER 2>/dev/null)" != "true" ]; then
docker start $ZAPRET_CONTAINER >/dev/null 2>&1
sleep 3
fi
# 4. Mangle 테이블 ZAPRET 체인 재구축 (완전 멱등성 보장)
iptables -t mangle -D PREROUTING -j ZAPRET 2>/dev/null
iptables -t mangle -D FORWARD -j ZAPRET 2>/dev/null
iptables -t mangle -D OUTPUT -j ZAPRET 2>/dev/null
iptables -t mangle -F ZAPRET 2>/dev/null
iptables -t mangle -X ZAPRET 2>/dev/null
iptables -t mangle -N ZAPRET
# 5. 내부 트래픽 예외(Bypass) 규칙 등록
iptables -t mangle -A ZAPRET -d $LAN_NET -j RETURN
iptables -t mangle -A ZAPRET -d $DOCKER_NET -j RETURN
iptables -t mangle -A ZAPRET -p udp --dport 53 -j RETURN
iptables -t mangle -A ZAPRET -p tcp --dport 53 -j RETURN
# 6. 통신사 DPI 차단 및 우회 트래픽 큐 배정
# (1) 아웃바운드 HTTPS 트래픽: desync 적용
iptables -t mangle -A ZAPRET -p tcp --dport 443 -j NFQUEUE --queue-num $QNUM --queue-bypass
# (2) [핵심] 인바운드 RST 패킷 포획: autohostlist 자동 학습용
iptables -t mangle -A ZAPRET -p tcp --sport 443 --tcp-flags RST,ACK RST -j NFQUEUE --queue-num $QNUM --queue-bypass
# 7. 글로벌 체인에 ZAPRET 연결
iptables -t mangle -I PREROUTING -j ZAPRET
iptables -t mangle -I FORWARD -j ZAPRET
iptables -t mangle -I OUTPUT -j ZAPRET
# 8. WireGuard MSS Clamping 보장
iptables -t mangle -C FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu 2>/dev/null || \
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
echo "✅ [$(date)] Zapret 라우팅 및 12700H 가속 세팅 완료!"
6. 최종 동작 검증 및 실시간 모니터링
모든 설정이 완료되었습니다. 실제로 통신사의 검열이 우회되고 자동 감지 파일에 도메인이 기록되는지 확인해 봅니다.
# 1. zapret 컨테이너 로그 실시간 확인
docker logs -f zapret2
# 2. 통신사 차단 사이트 접속 테스트 (터미널)
curl -Iv https://rutracker.org
# 3. 실시간 자동 학습 도메인 파일 누적 확인
tail -f /mnt/cache/appdata/zapret_tunnel/zapret-hosts-auto.txt
# 4. mangle 테이블 패킷 카운트 실시간 확인
iptables -t mangle -L ZAPRET -v -n
차단 사이트에 접속했을 때 브라우저에서 '연결이 재설정되었습니다(ERR_CONNECTION_RESET)' 에러 없이 즉시 페이지가 열리고, 호스트의 zapret-hosts-auto.txt 파일에 해당 사이트 도메인이 자동으로 한 줄 싹 적히면 모든 구축이 완벽히 끝난 것입니다.
시리즈를 마치며: 완벽한 홈 네트워크의 완성
- 🛡️ 1편 (NPM + CrowdSec + Raw Table): Cloudflare Proxy 없이도 서버 원본 IP를 커널 최상단에서 디도스 및 침입 공격으로부터 방어
- 🚫 2편 (AdGuard Home + WireGuard): 집 안팎 어디서나 광고 없는 쾌적한 암호화 DNS 터널링 환경 구축
- 🚀 3편 (Zapret + 12700H 가속): 지연 시간 0ms, 회선 대역폭 100%를 유지하며 통신사 DPI 검열을 지능적으로 무력화
이로써 외부 위협 방어, 광고 박멸, 검열 우회, 그리고 하드웨어 가속까지 완벽히 조화된 엔터프라이즈급 홈 서버 네트워크 인프라가 완성되었습니다. 긴 여정을 함께 구축하신 모든 분들의 쾌적하고 안전한 홈랩 생활을 응원합니다!