본문으로 건너뛰기

fnOS 공유 우회

fnOS 공유 우회를 활성화하면 로그인하지 않은 방문자가 fnOS에서 검증된 네이티브 /s/... 공유 링크를 바로 열 수 있습니다. 현재 공유에만 적용되는 제한된 단기 접근 세션을 만들며 fnOS 사이트 전체, 다른 Host 또는 다른 경로를 공개하지 않습니다.

이 기능은 공인 IP 직접 연결 방식의 서브도메인 모드, 리버스 프록시 모드의 서브도메인 매핑과 경로 모드에서 사용할 수 있습니다. 직접 연결 모드에서는 사용할 수 없습니다.

적용 조건

  1. 외부 요청이 먼저 fn-knock 게이트웨이로 들어옵니다.
  2. 현재 요청이 실제 fnOS를 가리키는 HTTP 라우트와 일치해야 합니다.
  3. 링크에는 fnOS에서 생성한 표준 /s/{shareId} 공유 엔드포인트를 사용합니다.
  4. 시스템 설정 → fnOS에서 fnOS 공유 우회를 활성화합니다.

Host 라우트에는 fnOS를 명확히 가리키는 서비스 매핑을 하나 유지합니다. 예:

text
fnos.example.com -> http://127.0.0.1:5666

게이트웨이는 현재 요청이 실제로 일치한 대상, Host 및 라우트 식별자로 fnOS 업스트림을 확인하며 다른 매핑에서 백엔드를 추측하지 않습니다. 경로 모드에서 fnOS가 기본 라우트일 필요는 없지만 /s/...와 관련 리소스 경로는 같은 fnOS 라우트와 일치해야 합니다. 다른 경로 규칙이나 기본 라우트가 처리하면 공유 우회는 요청을 거부합니다.

관련 설정은 서브도메인 매핑 또는 경로 매핑을 참고합니다.

요청 흐름

text
방문자가 /s/{shareId} 열기
  -> fn-knock가 fnOS 업스트림에 공유 검증 요청
  -> 유효하거나 공유 비밀번호가 필요함: /s 전용 단기 공유 세션 발급
  -> 해당 공유의 페이지, 미리 보기, 썸네일, 다운로드 및 정적 리소스 허용
  -> 무효, 시간 초과, 식별 불가 또는 접근 범위 초과: 세션을 정리하고 / 반환

URL 형식만 보고 검증하는 것은 아닙니다. fn-knock는 fnOS 업스트림에 같은 공유 엔드포인트를 요청하고 공유 데이터를 해석합니다. 업스트림에서 유효한 공유라고 확인하거나 공유 비밀번호가 필요한 정상 링크라고 확인해야만 공유 절차를 시작합니다. 확인할 수 없으면 기본적으로 거부합니다.

세션 범위

정상 공유는 경로가 /s로 제한된 fn-knock-fnos-share-session 쿠키를 기록합니다. 세션 레코드는 shareId 하나와 현재 라우트에서 일치한 fnOS 백엔드에 함께 연결되며 해당 백엔드에서 공유에 필요한 다음 경로 계열만 허용합니다.

  • /s/{shareId} 및 그 하위 경로
  • /s/preview/{shareId}
  • /s/thumb/{shareId}
  • /s/static/..., /s/busstatic/.../s/download/...

일치하는 리소스에 접근할 때마다 세션이 갱신됩니다. 해당 쿠키로 다른 공유, 다른 Host나 라우트 백엔드에 접근하거나 허용된 경로를 벗어나면 게이트웨이가 쿠키를 지웁니다. 공유 세션은 백엔드 사이에서 재사용할 수 없습니다.

이 세션은 fn-knock의 일반 로그인 세션과 분리되어 있으며 관리 페이지, fnOS 데스크톱 또는 다른 애플리케이션을 여는 데 사용할 수 없습니다.

다른 접근 방식과의 관계

  • Host의 로그인 필요와 기존의 엄격한 허용 목록 규칙은 일반 요청을 계속 보호합니다. 정상 공유 경로만 우회 경로로 들어갑니다.
  • local_exempt는 이보다 먼저 적용되는 별도의 출발지 예외입니다. 게이트웨이가 루프백, 사설망 또는 링크 로컬 출발지로 식별하면 원래부터 일반 로그인을 건너뜁니다. LAN 테스트만으로 공유 우회가 인터넷에서 정상 작동한다고 판단할 수 없습니다.
  • Basic Auth 건너뛰기는 Host가 업스트림에 대상 서비스의 자격 증명을 삽입하는 기능입니다. 공유 접근 권한이 아니며 임의의 /s/... 요청을 자동으로 허용하지도 않습니다.
  • fnOS 공유 자체의 비밀번호, 유효 기간 및 취소 상태는 계속 fnOS에서 결정합니다. fn-knock는 이러한 설정을 대신하지 않습니다.

기본값 및 UI 제한

현재 페이지에는 활성화 스위치만 제공됩니다. 백엔드는 다음 기본값을 사용하며 일반 사용자는 페이지에서 변경할 수 없습니다.

동작기본값용도
업스트림 검증 제한 시간2500 msfnOS 공유 페이지의 응답을 기다림
검증 캐시30 s같은 공유에 대한 반복 검증을 줄임
동시 검증 잠금5 s같은 공유에 대한 동시 검증을 하나로 합침
공유 세션300 s연속 탐색을 유지하며 일치하는 리소스에 접근할 때 갱신

명확하게 해석할 수 있는 유효 및 무효 결과는 캐시됩니다. 업스트림 시간 초과나 페이지 해석 실패처럼 불확실한 결과는 캐시하지 않습니다. 공유를 취소한 직후에는 잠시 캐시된 결과가 보일 수 있지만 공유 세션은 여전히 원래 공유 경로로만 제한됩니다.

플랫폼별 제한

  • 이 기능은 게이트웨이 기능이므로 호스트 방화벽에 의존하지 않습니다. fnOS FPK, Docker, OpenWrt, Linux, Synology DSM 7 SPK 및 Windows에서 지원되는 Host / 경로 게이트웨이에서 사용할 수 있습니다.
  • 직접 연결 모드는 로그인 후 원본 포트를 허용할 뿐 공유 우회가 처리할 통합 프록시 경로가 없으므로 사용할 수 없습니다.
  • Docker에서 127.0.0.1:5666은 컨테이너 자체를 가리킵니다. fnOS가 호스트에서 실행된다면 Host 대상(타깃)을 컨테이너에서 접속할 수 있는 호스트 주소로 변경합니다.
  • fn-knock는 현재 fnOS 버전이 반환하는 공유 페이지 구조만 검증할 수 있습니다. 업스트림에 접속할 수 없거나 응답이 너무 느리거나 구조가 바뀌면 요청을 거부하며 공개 접근으로 전환하지 않습니다.
  • 이 기능은 fnOS 업데이트, 권한 설정, 공유 취소 및 백업을 대신하지 않습니다.

활성화 및 검증

  1. 현재 모드가 직접 연결 모드가 아닌지 확인합니다.
  2. Host 라우트에 fnOS 매핑을 유지합니다. 경로 모드에서는 /s/...와 관련 리소스 경로가 실제로 fnOS 대상과 일치하는지 확인합니다.
  3. fn-knock 실행 환경에서 fnOS 대상(타깃)과 유효한 공유 하나를 직접 엽니다.
  4. 시스템 설정 → fnOS에서 스위치를 활성화합니다.
  5. 실제 공유 링크를 새로 만들고 모바일 네트워크의 시크릿 창이나 로그인하지 않은 기기에서 엽니다.
  6. 세부 정보, 미리보기, 썸네일, 다운로드 및 비밀번호로 보호된 공유의 입력 절차를 검증합니다.
  7. fnOS 루트 경로와 다른 애플리케이션에도 접속하여 일반 로그인 절차로 들어가거나 거부되는지 확인합니다.

로그인된 브라우저나 LAN에서만 검증하면 안 됩니다. 일반 세션과 local_exempt가 공유 우회의 실제 작동 여부를 가릴 수 있습니다.

문제 해결

  1. 계속 로그인 페이지로 이동하거나 루트 엔드포인트가 반환됨: 스위치가 활성화되어 있고 시스템이 fnOS 대상(타깃)을 식별할 수 있는지 확인합니다.
  2. Host 라우트 실패: fnOS를 명확히 가리키는 Host 매핑을 유지하고 현재 Host가 실제로 이 라우트와 일치하는지, 대상에 접속할 수 있는지 확인합니다.
  3. 경로 모드 실패: 다른 경로 규칙이나 기본 라우트가 /s/...를 처리하는지 확인합니다. 순서나 일치 범위를 조정한 뒤 라우트를 다시 동기화합니다.
  4. 엔드포인트는 열리지만 리소스가 실패함: /s/preview, /s/thumb, 정적 리소스 또는 다운로드 요청이 같은 게이트웨이를 거치는지 확인합니다.
  5. 공유 상태를 방금 변경했지만 이전 결과가 계속 표시됨: 캐시가 만료될 때까지 약 30초 기다린 뒤 다시 시도합니다.
  6. 간헐적으로 시간 초과가 발생함: fnOS 부하, 대상(타깃) 주소 및 중간 프록시를 먼저 확인하고 Host 전체를 공개 상태로 바꾸지 않습니다.

실행 모드 절차는 리버스 프록시 모드 시작하기서브도메인 모드 시작하기를 참고합니다. 전체 설정은 시스템 설정, 터널 경로는 터널을 참고합니다.

QQ 커뮤니티: 1081609274