네트워크 설정
PCS가 사용자에게 앱을 제공하려면 안정적인 인터넷 연결이 필요합니다. 이 가이드는 네트워크 작동 방식과 일반적인 네트워크 문제를 해결하는 방법을 설명합니다.
PCS의 연결 방식
PCS는 여러 네트워크 계층을 사용합니다:
- 인터넷 연결 — PCS가 ISP를 통해 연결됩니다.
- NSL.SH 라우팅 — Yundera의 메시 네트워크가
yourdomain.nsl.sh를 PCS의 공인 IP로 라우팅합니다. - Caddy 리버스 프록시 — Caddy가 PCS에서 실행되어 서브도메인을 기반으로 수신 요청을 올바른 앱 컨테이너로 라우팅합니다.
- Docker 네트워킹 — 각 앱은 격리된 네트워킹을 가진 자체 Docker 컨테이너에서 실행됩니다.
포트 요구사항
PCS가 인터넷에서 접근 가능해야 하는 포트:
| 포트 | 용도 | 필수 여부 |
|---|---|---|
| 443 | HTTPS — 모든 웹 트래픽 | 예 |
| 80 | HTTP — HTTPS로 리다이렉트 | 권장 |
| 22 | SSH — 원격 관리 접근 | 선택 (원격 SSH가 필요한 경우만) |
포트가 열려 있는지 확인하는 방법
관리자 패널 → 터미널에서:
# 포트 443이 수신 대기 중인지 확인
sudo ss -tlnp | grep 443
# 외부 접근 테스트 (다른 컴퓨터에서)
curl -I https://yourdomain.nsl.sh
포트 포워딩 (가정용 네트워크)
PCS가 가정용 라우터 뒤에 있다면 포트를 포워딩해야 합니다:
단계별 안내
- PCS의 로컬 IP 찾기 — 터미널에서:
ip addr show | grep inet - 라우터에 로그인 — 보통
192.168.1.1또는192.168.0.1 - 포트 포워딩 설정 찾기 — 주로 "고급", "NAT" 또는 "가상 서버"에 있음
- 규칙 추가:
- 외부 포트 443 → 내부 IP
<PCS 로컬 IP>포트 443 - 외부 포트 80 → 내부 IP
<PCS 로컬 IP>포트 80
- 외부 포트 443 → 내부 IP
- 저장 및 적용
고정 IP / DHCP 예약
라우터가 PCS에 다른 IP를 할당하지 않도록:
- 터미널에서 PCS의 MAC 주소를 찾습니다:
ip link show - 라우터의 DHCP 설정에서 해당 MAC 주소를 고정 로컬 IP에 바인딩하는 예약을 생성합니다.
ISP 제한
일부 ISP는 가정용 연결에서 호스팅을 제한하거나 차단합니다.
일반적인 ISP 문제
| 문제 | 증상 | 해결 방법 |
|---|---|---|
| 포트 443 차단 | 외부에서 PCS에 접근 불가 | Cloudflare 프록시 사용 (실제 포트를 숨김) |
| 포트 80 차단 | Let's Encrypt가 인증서 발급 불가 | HTTPS 종료를 위해 Cloudflare 사용 |
| CGNAT (대규모 NAT) | 공인 IP 미할당 | ISP에 공인 IP 요청, 또는 Cloudflare 터널 사용 |
| 동적 IP | IP 변경 후 PCS에 접근 불가 | PCS 자가 점검이 새 IP를 자동 감지. 매일 밤과 재부팅 시 실행. |
CGNAT 감지 방법
터미널에서:
# 공인 IP 확인
curl -s ifconfig.me
# 라우터의 WAN IP 확인
# 이 두 IP가 다르면 CGNAT 뒤에 있는 것입니다
라우터의 WAN IP가 100.64.x.x 범위에 있다면 CGNAT 뒤에 있으므로 ISP에 연락하거나 터널을 사용해야 합니다.
네트워크 솔루션으로서의 Cloudflare
Cloudflare는 대부분의 ISP 관련 네트워크 문제를 해결할 수 있습니다:
Cloudflare 프록시 모드
Cloudflare 프록시 모드로 커스텀 도메인을 설정하면 (커스텀 도메인 참조):
- 트래픽 흐름: 사용자 → Cloudflare → PCS
- 실제 IP가 숨겨짐
- Cloudflare가 DDoS 보호 처리
- ISP가 포트 80을 차단해도 작동 (Cloudflare는 443으로 연결)
Cloudflare 터널 (고급)
CGNAT 뒤에 있거나 심각한 ISP 제한이 있는 경우, Cloudflare 터널은 PCS에서 Cloudflare로의 아웃바운드 연결을 생성하여 포트 포워딩이 전혀 필요 없습니다:
- Cloudflare Zero Trust에 가입 (무료 플랜 가능)
- PCS에
cloudflared설치 - 도메인을
localhost:443에 매핑하는 터널 생성 - 포트 포워딩이나 공인 IP 불필요
동적 IP 처리
대부분의 가정용 인터넷 연결은 주기적으로 변경되는 동적 IP를 가집니다. PCS는 이를 자동으로 처리합니다:
- 야간 자가 점검이 현재 공인 IP를 감지합니다.
- IP가 변경된 경우 PCS가 NSL.SH 라우팅을 업데이트합니다.
- sslip.io 도메인도 IP 기반이므로 자동으로 업데이트됩니다.
더 빠른 감지가 필요하면:
- 관리자 패널 → 상태에서 지금 실행을 클릭하여 즉시 자가 점검을 실행하세요.
- 재부팅 후에는
@reboot자가 점검이 자동으로 실행됩니다.
대역폭 고려사항
얼마나 많은 대역폭이 필요한가?
사용 방식에 따라 다릅니다:
| 사용 사례 | 권장 대역폭 |
|---|---|
| 문서 사이트 / 블로그 | 업로드 5 Mbps |
| 개인 클라우드 (파일, 메모) | 업로드 10 Mbps |
| 사진 갤러리 (Immich) | 업로드 20 Mbps |
| 미디어 스트리밍 (Jellyfin) | 동시 스트림당 업로드 30+ Mbps |
대역폭 확인
내장 속도 테스트를 사용하세요:
- 관리자 패널 → 리소스 → 네트워크 탭으로 이동합니다.
- 네트워크 속도 테스트 실행을 클릭합니다.
- 다운로드 및 업로드 속도를 확인합니다.
DNS 구성
NSL.SH 도메인
.nsl.sh 도메인의 경우 DNS가 Yundera에 의해 자동으로 관리됩니다. 별도의 구성이 필요 없습니다.
SSLIP.IO 도메인
<ip>.sslip.io 도메인은 IP 기반 와일드카드 DNS 서비스입니다. 도메인 이름의 IP를 기반으로 자동 해석됩니다. 구성이 필요 없습니다.
커스텀 도메인
커스텀 도메인에 대해서는 커스텀 도메인과 관리자 패널 → 도메인의 상세 설정을 참조하세요.
네트워크 문제 해결
터미널에서 빠른 확인
# 인터넷 연결 확인
ping -c 3 8.8.8.8
# DNS 해석 확인
nslookup yourdomain.nsl.sh
# Caddy 실행 여부 확인
docker ps | grep caddy
# Caddy 오류 로그 확인
docker logs caddy --tail 50
# 현재 공인 IP 확인
curl -s ifconfig.me
# 수신 대기 중인 포트 확인
sudo ss -tlnp | grep -E '(80|443)'
더 많은 네트워크 문제는 문제 해결을 참조하세요.