fnOS 공유 우회
fnOS 공유 우회를 활성화하면 로그인하지 않은 방문자가 fnOS에서 검증된 네이티브 /s/... 공유 링크를 바로 열 수 있습니다. 현재 공유에만 적용되는 제한된 단기 접근 세션을 만들며 fnOS 사이트 전체, 다른 Host 또는 다른 경로를 공개하지 않습니다.
이 기능은 공인 IP 직접 연결 방식의 서브도메인 모드, 리버스 프록시 모드의 서브도메인 매핑과 경로 모드에서 사용할 수 있습니다. 직접 연결 모드에서는 사용할 수 없습니다.
적용 조건
- 외부 요청이 먼저 fn-knock 게이트웨이로 들어옵니다.
- 현재 요청이 실제 fnOS를 가리키는 HTTP 라우트와 일치해야 합니다.
- 링크에는 fnOS에서 생성한 표준
/s/{shareId}공유 엔드포인트를 사용합니다. 시스템 설정 → fnOS에서fnOS 공유 우회를 활성화합니다.
Host 라우트에는 fnOS를 명확히 가리키는 서비스 매핑을 하나 유지합니다. 예:
fnos.example.com -> http://127.0.0.1:5666게이트웨이는 현재 요청이 실제로 일치한 대상, Host 및 라우트 식별자로 fnOS 업스트림을 확인하며 다른 매핑에서 백엔드를 추측하지 않습니다. 경로 모드에서 fnOS가 기본 라우트일 필요는 없지만 /s/...와 관련 리소스 경로는 같은 fnOS 라우트와 일치해야 합니다. 다른 경로 규칙이나 기본 라우트가 처리하면 공유 우회는 요청을 거부합니다.
관련 설정은 서브도메인 매핑 또는 경로 매핑을 참고합니다.
요청 흐름
방문자가 /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 ms | fnOS 공유 페이지의 응답을 기다림 |
| 검증 캐시 | 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 업데이트, 권한 설정, 공유 취소 및 백업을 대신하지 않습니다.
활성화 및 검증
- 현재 모드가 직접 연결 모드가 아닌지 확인합니다.
- Host 라우트에 fnOS 매핑을 유지합니다. 경로 모드에서는
/s/...와 관련 리소스 경로가 실제로 fnOS 대상과 일치하는지 확인합니다. - fn-knock 실행 환경에서 fnOS 대상(타깃)과 유효한 공유 하나를 직접 엽니다.
시스템 설정 → fnOS에서 스위치를 활성화합니다.- 실제 공유 링크를 새로 만들고 모바일 네트워크의 시크릿 창이나 로그인하지 않은 기기에서 엽니다.
- 세부 정보, 미리보기, 썸네일, 다운로드 및 비밀번호로 보호된 공유의 입력 절차를 검증합니다.
- fnOS 루트 경로와 다른 애플리케이션에도 접속하여 일반 로그인 절차로 들어가거나 거부되는지 확인합니다.
로그인된 브라우저나 LAN에서만 검증하면 안 됩니다. 일반 세션과 local_exempt가 공유 우회의 실제 작동 여부를 가릴 수 있습니다.
문제 해결
- 계속 로그인 페이지로 이동하거나 루트 엔드포인트가 반환됨: 스위치가 활성화되어 있고 시스템이 fnOS 대상(타깃)을 식별할 수 있는지 확인합니다.
- Host 라우트 실패: fnOS를 명확히 가리키는 Host 매핑을 유지하고 현재 Host가 실제로 이 라우트와 일치하는지, 대상에 접속할 수 있는지 확인합니다.
- 경로 모드 실패: 다른 경로 규칙이나 기본 라우트가
/s/...를 처리하는지 확인합니다. 순서나 일치 범위를 조정한 뒤 라우트를 다시 동기화합니다. - 엔드포인트는 열리지만 리소스가 실패함:
/s/preview,/s/thumb, 정적 리소스 또는 다운로드 요청이 같은 게이트웨이를 거치는지 확인합니다. - 공유 상태를 방금 변경했지만 이전 결과가 계속 표시됨: 캐시가 만료될 때까지 약
30초 기다린 뒤 다시 시도합니다. - 간헐적으로 시간 초과가 발생함: fnOS 부하, 대상(타깃) 주소 및 중간 프록시를 먼저 확인하고 Host 전체를 공개 상태로 바꾸지 않습니다.
실행 모드 절차는 리버스 프록시 모드 시작하기와 서브도메인 모드 시작하기를 참고합니다. 전체 설정은 시스템 설정, 터널 경로는 터널을 참고합니다.
