본문으로 건너뛰기

NAT 통과 및 터널

기기에 접근 가능한 인터넷 진입점이 없다면 FRP나 cloudflared가 내부 네트워크에서 아웃바운드 터널을 만들고 외부 요청을 fn-knock 게이트웨이로 전달할 수 있습니다. 터널은 네트워크 토폴로지만 바꿉니다. 요청이 게이트웨이에 들어온 뒤에는 여전히 Host 또는 호환 경로를 기준으로 라우팅하고 접근 정책을 적용합니다.

시스템 설정 → 모드에서 리버스 프록시 모드를 선택합니다. 새로 배포할 때는 서브도메인 매핑을 선택하고 기존 단일 도메인 경로 진입점이 있을 때만 권장하지 않음으로 표시된 경로 모드를 선택합니다.

Synology DSM 7 SPK는 FRP와 Cloudflared의 내장 리소스 및 프로세스 관리를 제공합니다. Windows x86_64에는 이러한 리소스가 없으므로 이 문서의 시스템 설정 → FRP시스템 설정 → Cloudflared 단계가 적용되지 않습니다. 같은 Windows 호스트에서 터널 클라이언트를 직접 실행한다면 127.0.0.1:7999를 오리진으로 지정할 수 있지만 해당 프로세스의 설치, 자격 증명 및 수명 주기는 관리자가 직접 담당합니다.

두 가지 터널

방식외부 의존 요소적합한 상황
FRPfrps를 실행하는 공인 서버와 원격 포트공인 주소, 포트 및 전송 설정을 직접 제어해야 함
cloudflaredCloudflare Tunnel과 공개 호스트 이름(Public Hostname)Cloudflare를 이미 사용하고 있으며 frps를 관리하지 않고 도메인으로 연결하려는 경우

두 방식 모두 실제 게이트웨이 진입점을 로컬 대상으로 사용하며 일반적으로 127.0.0.1:7999입니다. 게이트웨이 포트를 변경했다면 관리 패널과 배포 설정에 표시된 값을 사용합니다.

라우팅 방식 선택

서브도메인 매핑

권장 경로는 다음과 같습니다.

text
nas.example.com -> FRP / Cloudflared -> fn-knock -> Host nas.example.com -> fnOS

터널은 원래 Host를 유지하고 인증 Host와 서비스 Host를 모두 같은 게이트웨이로 전달하도록 구성합니다. cloudflared에서는 *.example.com 공개 호스트 이름을 사용할 수 있습니다. FRP TCP 포워딩에서는 DNS와 원격 포트가 함께 frps를 가리킵니다.

경로 모드

호환 경로는 다음과 같습니다.

text
https://example.com/alist -> 터널 -> fn-knock -> 경로 /alist -> AList

기존 URL을 유지할 수 있지만 애플리케이션에 접두사 제거, HTML 다시 작성 또는 루트 모드가 필요할 수 있습니다. 터널을 사용한다는 이유만으로 새 서비스에 경로 라우팅을 기본 선택하지 않습니다.

FRP

먼저 시스템 설정 → FRP에서 리소스를 다운로드한 뒤 리버스 프록시 모드 → FRP로 이동합니다. 자동 생성되는 기본 프록시에는 일반적으로 다음 설정이 포함됩니다.

toml
type = "tcp"
localIP = "127.0.0.1"
localPort = 7999
transport.proxyProtocolVersion = "v2"

PROXY Protocol v2는 인터넷 클라이언트 주소를 게이트웨이까지 전달하는 데 사용됩니다. frps, 포워딩 경로 또는 사용자 지정 설정에서 이를 지원하지 않으면 게이트웨이에 FRP 노드 주소만 표시될 수 있으며 허용 목록과 로그인 IP 접근 권한도 잘못 적용됩니다.

페이지에서는 다음 두 가지 편집 방식을 제공합니다.

  • 폼 모드에서는 서버 주소, 포트, 토큰, 로컬 포트 및 원격 포트를 관리합니다. 지원되는 필드만 수정하며 그 밖의 유효한 TOML은 유지합니다.
  • 사용자 지정에서는 frpc.toml을 직접 편집합니다. 저장 전에 frpc verify를 실행합니다. 구문 오류가 있으면 저장할 수 없으며 폼으로 안전하게 되돌아갈 수도 없습니다.

기존 사용자 지정 설정이 있다면 원문을 먼저 백업한 뒤 편집 방식을 전환합니다.

Cloudflared

먼저 시스템 설정 → Cloudflared에서 리소스를 다운로드한 뒤 리버스 프록시 모드 → Cloudflared에서 터널 토큰을 저장합니다. 인터넷 공개 도메인과 오리진 Service는 fn-knock가 아니라 Cloudflare 대시보드에서 설정합니다.

Host 라우트의 권장 설정과 TLS 선택 기준은 Cloudflared 터널 설정을 참고합니다.

접근 정책 및 실제 클라이언트 IP

터널은 fn-knock 로그인, 허용 목록 또는 자격 증명 범위를 대신하지 않습니다. Host 편집 페이지의 로그인 필요로 공개와 로그인 우선 정책을 전환합니다. 이전 설정의 엄격한 허용 목록 규칙은 계속 출발지 IP를 기준으로 적용됩니다. 경로 모드에서는 매핑별로 로그인 여부를 결정합니다.

인증은 게이트웨이가 최종적으로 식별한 클라이언트 IP를 기준으로 판단합니다. 사설망, 루프백 및 링크 로컬 출발지는 local_exempt로 표시되어 일반 로그인과 엄격한 허용 목록 검사를 건너뜁니다. 따라서 출발지 전달은 터널 보안 경계의 일부입니다.

  • FRP에서는 기본 PROXY Protocol v2를 우선 유지합니다.
  • Cloudflared에는 전용 리버스 프록시 모드 서브도메인 경로를 사용하고 EdgeOne / ESA 스위치를 적용하지 않습니다.
  • 시작한 뒤 모바일 네트워크에서 접속하고 요청 로그의 클라이언트 IP가 127.0.0.1, 컨테이너 주소 또는 터널 노드 주소가 아니라 방문자의 공인 주소인지 확인합니다.

프로세스 감시 및 실패 진단

fn-knock가 관리하는 FRP 및 Cloudflared 프로세스는 중지됨, 시작 중, 실행 중 또는 재시작 대기 상태를 표시합니다. 계속 실행하도록 설정된 프로세스가 예기치 않게 종료되면 약 1, 2, 5, 10, 30, 60, 120, 300초의 단계적 지연과 약간의 무작위 변동을 적용해 자동으로 다시 시작합니다. 약 5분 동안 안정적으로 실행되면 연속 실패 횟수가 초기화됩니다. 수동 중지는 예정된 재시도를 취소합니다.

재시작 대기 중에는 연속 실패 횟수, 다음 재시도 시각 및 최근 진단을 표시합니다. 로그에는 PID, 시작 및 종료 시각, 실행 시간, 종료 코드 또는 시그널, 실패 요약과 최근 stdout/stderr가 남아 토큰, TLS, 네트워크, 설정 및 실행 파일 문제를 구분할 수 있습니다. 로그를 공유하기 전에 토큰, 도메인, 공인 주소 및 서버 정보를 가립니다.

fn-knock 서비스 자체가 다시 시작되면 계속 실행 상태로 저장된 터널을 복원하고 검증 가능한 경우 아직 실행 중인 프로세스를 이어받습니다. 이 감시는 fn-knock가 시작한 내장 FRP / Cloudflared에만 적용됩니다. Windows나 다른 외부 프로세스는 관리자가 직접 관리합니다.

플랫폼별 지원 범위

  • 터널은 아웃바운드 연결이므로 fn-knock가 호스트 방화벽에 규칙을 쓰는 기능에 의존하지 않으며 Docker에서도 사용할 수 있습니다.
  • 실행 환경의 아키텍처와 일치하는 FRP / Cloudflared 실행 리소스를 사용합니다. 시스템 설정 → FRP 또는 시스템 설정 → Cloudflared에 표시되는 준비 상태를 기준으로 합니다.
  • Synology DSM 7 SPK는 이러한 내장 리소스를 지원합니다. 관리 진입점은 DSM 데스크톱 CGI에서만 제공되며 서비스 트래픽은 계속 7999 게이트웨이로 들어갑니다.
  • Windows는 이러한 내장 리소스나 준비 상태를 제공하지 않습니다. 직접 배포한 터널 프로세스는 fn-knock의 시작·중지 및 로그 관리 대상이 아닙니다.
  • Docker에서 127.0.0.1은 현재 컨테이너를 가리킵니다. fn-knock 게이트웨이와 터널 프로세스가 같은 컨테이너에 있으면 사용할 수 있지만 별도의 터널 컨테이너를 직접 만든 경우에는 서비스 이름이나 컨테이너 네트워크 주소를 사용합니다.
  • 리버스 프록시 모드에서는 Smart Connect와 프로토콜 매핑을 제공하지 않습니다. 추가 TCP / UDP 서비스는 FRP나 Cloudflare 플랫폼에 별도로 설계합니다.
  • 리버스 프록시 모드에서 다른 모드로 전환하면 시스템은 fn-knock가 관리하는 터널 프로세스를 중지하려고 시도합니다. 외부에서 독립적으로 실행하는 프로세스는 제어 대상이 아닙니다.

시작 및 확인

  1. 라우팅 방식, 인증 Host 및 하나 이상의 서비스 매핑을 저장합니다.
  2. FRP 또는 Cloudflared 설정을 저장하고 시작합니다.
  3. 실행 상태가 연결됨인지 확인합니다. 재시작 대기라면 연속 실패 횟수, 다음 재시도 시각 및 최근 진단을 확인한 뒤 토큰, TLS, 네트워크 또는 포트 오류를 점검합니다.
  4. 외부 네트워크에서 인증 Host와 서비스 Host에 접근합니다.
  5. 요청 로그에서 Host, 클라이언트 IP, 권한 유형 및 업스트림 대상(타깃)을 대조합니다.

설정 절차는 리버스 프록시 모드 시작하기리버스 프록시 접속 튜토리얼을 참고합니다.

QQ 커뮤니티: 1081609274