공인 IP 직접 연결: 서브도메인 라우팅
기기에 공인 IPv4나 외부에서 접속 가능한 IPv6가 있거나, 엣지 플랫폼을 통해 오리진 연결을 구성한 환경에 적합합니다. fn-knock는 접속 도메인에 따라 요청을 전달하며, 사용자는 통합 로그인 절차를 거친 뒤 해당 서비스에 들어갑니다.
- 네트워크 토폴로지: 공인 IP 직접 연결
- 라우팅 방식:
Host로 서비스 구분 - 권장 정책: 로그인 우선
- 관리 패널 위치:
시스템 설정 → 모드 → 서브도메인 모드
시작 전 준비
다음 항목이 필요합니다.
- DNS를 관리할 수 있는 도메인(예:
example.com) - 인터넷 엔드포인트에서 fn-knock 게이트웨이에 도달할 수 있는 경로. fnOS 네이티브 FPK, Docker Compose, OpenWrt, Linux, Synology DSM 7 SPK, Windows는 기본적으로
7999를 사용합니다. 아래에서는 이를 모두 '실제 게이트웨이 포트'라고 부릅니다. - 사용할 수 있는 로그인 방식 하나 이상: TOTP, 비밀번호, 패스키 또는 구성된 OIDC
- fn-knock가 실행되는 기기에서 서비스에 접속할 수 있는 네트워크 경로
인터넷에서 직접 들어오는 경로가 없다면 NAT 통과: 서브도메인 라우팅을 사용합니다. SSH, 원격 데스크톱 같은 원본 TCP/UDP 포트를 보호해야 한다면 원본 포트 직접 접근을 참고합니다.
배포별 기능 범위
| 배포 방식 | 사용 가능 여부 | 주의 사항 |
|---|---|---|
| fnOS 네이티브 FPK | 완전 지원 | 자동 HTTPS, 호스트 방화벽, Smart Connect 사용 가능 |
| Docker Compose | 서브도메인 라우팅 지원 | 호스트 방화벽을 관리하지 않으며 Smart Connect와 자동 HTTPS를 제공하지 않음 |
| OpenWrt 패키지 | 서브도메인 라우팅 지원 | 호스트 방화벽과 함께 사용 가능. 자동 HTTPS는 제공하지 않음. Smart Connect는 기존 dnsmasq와 /etc/dnsmasq.d/ 포함 설정에 의존 |
| Synology DSM 7 SPK | 서브도메인 라우팅 지원 | 직접 연결, 호스트 방화벽 관리, Smart Connect 미지원. DSM 방화벽과 라우터/NAT에서 인바운드 경로 관리 |
| Windows x86_64 | 공인 IP 게이트웨이로 사용 가능 | 7999가 기본적으로 모든 인터페이스에서 수신. Windows 방화벽 프로필, 라우터/NAT, IPv6 방화벽, ISP 인바운드 정책을 직접 확인해야 하며 직접 연결 접근 허용은 미지원 |
Docker에서 127.0.0.1은 컨테이너 자체를 뜻합니다. 서비스가 호스트나 다른 기기에 있다면 컨테이너에서 접속할 수 있는 주소를 입력합니다.
1. 인터넷 엔드포인트와 DNS 설정
인증 도메인과 서비스 도메인이 인터넷 엔드포인트를 가리키도록 설정합니다. 예시는 다음과 같습니다.
| 도메인 | 용도 | DNS 대상 |
|---|---|---|
auth.example.com | 통합 로그인 | 192.0.2.10 |
nas.example.com | NAS 서비스 | 192.0.2.10 |
*.example.com 와일드카드 DNS 레코드를 사용할 수도 있습니다.
라우터는 공인 포트를 fn-knock 게이트웨이로 전달합니다.
- 공인
443→ 실제 게이트웨이 포트: 접속 URL에 포트를 쓰지 않아도 되는 경우가 일반적입니다. - 사용자 지정 공인 포트 → 실제 게이트웨이 포트: 접속 URL에 해당 공인 포트를 유지합니다.
관리 엔드포인트는 fn-knock 설정에만 사용하며 인터넷 오리진 대상으로 사용해서는 안 됩니다. 배포별 포트는 포트 및 엔드포인트를 참고합니다.
2. 서브도메인 모드로 전환
시스템 설정 → 모드에서 서브도메인 모드를 선택하고 저장합니다.
저장 후 사이드바에 서브도메인 매핑이 표시되는지 확인합니다. 이전에 리버스 프록시 모드를 사용했다면 모드 전환 시 관련 터널이 중지됩니다. 경로 매핑도 정리될 수 있으므로 전환하기 전에 기존 설정을 백업합니다.
Docker 배포는 호스트 방화벽을 자동으로 변경하지 않습니다. 계획한 공인 포트만 직접 엽니다.
3. 루트 도메인 설정
서브도메인 매핑에서 서브도메인 모드 설정을 펼치고 다음 값을 입력합니다.
도메인:example.com인증 서비스의 외부 HTTPS 포트: 사용자가 실제로 접속하는 공인 포트를 입력합니다. 예를 들어 공인443을 실제 게이트웨이 포트로 전달한다면443을 입력합니다.Edge 실제 IP 감지: EdgeOne 또는 ESA를 사용할 때만 해당 플랫폼을 선택합니다.
루트 도메인은 서브도메인 매핑의 전체 접속 주소를 결정합니다. 값을 바꾼 뒤 기존 인증 서비스와 서비스 매핑이 계속 일치하는지 확인합니다.
4. 인증 서비스 추가
서브도메인 매핑에서 인증 서비스 추가를 눌러 auth.example.com을 추가합니다. 저장 후 서브도메인 모드 설정 → 현재 인증 서비스에 표시됩니다.
인증 서비스는 다음 조건을 충족합니다.
- 인증 엔드포인트는 하나만 구성합니다.
- 공개 접근을 허용합니다. 그렇지 않으면 사용자가 로그인 페이지에 들어갈 수 없습니다.
- 이전 매핑에 엄격한 허용 목록 규칙이 남아 있다면 그대로 인증 서비스로 사용할 수 없습니다. 기존 설정을 기록한 뒤 인증 서비스를 다시 만듭니다.
- DNS와 공인 포트를 통해 fn-knock 게이트웨이에 도달 가능한 구성이 필요합니다.
서비스를 추가하기 전에 모바일 데이터에서 인증 주소를 열어 로그인 페이지가 보이는지 확인합니다.
5. 서비스 매핑 추가
서브도메인 매핑에서 서비스를 추가합니다. 예시는 다음과 같습니다.
| 설정 항목 | 예시 |
|---|---|
| 서브도메인 | nas |
| 대상 | http://192.168.1.20:5666 |
| 로그인 필요 | 켬 |
| 호스트 응답 | 기본값은 사용자가 접속한 Host 유지. 업스트림이 자체 주소/Host만 허용할 때만 끔 |
저장 후 서비스 엔드포인트는 https://nas.example.com 또는 실제 공인 포트를 포함한 주소입니다.
업스트림에서 Basic Auth를 사용한다면 매핑의 고급 설정에서 Basic Auth 건너뛰기를 켜고 업스트림 자격 증명을 입력합니다. fn-knock에서 업스트림으로 보내는 요청에만 적용되며 사용자 로그인 방식이 아닙니다.
호스트 응답 설정은 리버스 프록시 모드 → 서브도메인 매핑에도 적용됩니다. 업스트림이 외부 Host를 명시적으로 거부하지 않는 한 기본값인 'Host 유지'를 사용합니다. 애플리케이션이 잘못된 콜백 URL이나 리디렉션 주소를 생성하는 문제를 피할 수 있습니다.
호스트 응답은 런타임에서 업스트림 대상(타깃)을 기준으로 적용됩니다. 여러 Host가 같은 대상(타깃)을 재사용하면 이 설정도 공유합니다. 서로 다른 응답 정책이 필요하다면 별도의 대상(타깃)을 사용합니다.
6. 접근 정책 설정
현재 Host 편집 페이지에서는 로그인 필요 스위치를 제공합니다.
| 설정 | 동작 |
|---|---|
해당 Host 매핑의 로그인 필요를 끔 | 공개 접근. fn-knock 로그인과 허용 목록을 확인하지 않음 |
로그인 필요를 켬 | 수동 출발지 접근 허용은 독립적으로 통과할 수 있습니다. 자동 IP 접근 허용은 일반적으로 같은 출발지의 후속 요청을 허용하지만 브라우저에 이미 적용된 서비스 범위 거부보다 우선하지 않습니다. 사용할 수 있는 출발지 접근 권한이 없을 때 세션을 확인합니다. |
| 기존의 엄격한 허용 목록 규칙 | 로그인 필요를 꺼도 공개되지 않을 수 있습니다. 유효한 출발지 접근 허용 기록(수동 또는 로그인 후 자동 생성)만 확인하며 세션 쿠키 자체로는 출발지 조건을 대신할 수 없습니다. |
새 개인 서비스에는 일반적으로 로그인 필요를 켭니다. 현재 UI에서 엄격한 허용 목록 규칙을 새로 선택할 수는 없습니다. 업그레이드 후 이러한 규칙이 남아 있다면 수동 및 자동 IP 접근 허용 기록을 모두 확인합니다. 기존의 엄격한 규칙에서 벗어나려면 전체 매핑을 기록한 뒤 현재 UI에서 다시 만듭니다. 로그인 필요만 끄는 것으로는 공개되지 않습니다. 엄격한 규칙에서 수동 출발지만 허용하려면 로그인 후 자동 IP 접근 허용을 끄고 남은 자동 기록을 정리합니다.
7. HTTPS 설정
*.example.com용 와일드카드 인증서를 구성하고 해당 도메인에 연결합니다. 와일드카드 인증서는 일반적으로 루트 도메인 example.com을 포함하지 않습니다. 루트 도메인에서도 서비스를 제공한다면 인증서 SAN에 별도로 추가합니다.
fnOS 네이티브 FPK는 자동 HTTPS를 사용할 수 있습니다. Docker와 OpenWrt는 인증서를 직접 준비하거나 앞단 프록시 또는 엣지 플랫폼에서 TLS를 종료합니다. 자세한 설정은 SSL 인증서를 참고합니다.
8. 공인 주소가 바뀐다면 DDNS 설정
공인 주소가 동적으로 바뀌면 DDNS로 DNS를 업데이트합니다. 인터넷에서 실제로 접속할 수 있는 주소 패밀리의 레코드만 만듭니다. IPv6 인바운드 경로가 없다면 AAAA 레코드를 게시하지 않습니다.
9. 외부 네트워크에서 검증
휴대전화 Wi-Fi를 끄고 다음 순서로 테스트합니다.
- 인증 주소를 열어 로그인 페이지에 접속할 수 있는지 확인합니다.
- 서비스 주소를 열어 로그인하지 않은 상태에서 인증 절차로 들어가는지 확인합니다.
- 로그인을 완료하고 원래 서비스 주소로 돌아오는지 확인합니다.
요청 로그에서 일치한 도메인, 업스트림 주소, 응답 상태를 확인합니다.
LAN 테스트 성공으로 외부 테스트를 대신할 수 없습니다. 가정 네트워크의 NAT 루프백, 분할 DNS, 캐시가 설정 오류를 가릴 수 있습니다.
문제 해결
| 증상 | 우선 확인할 항목 |
|---|---|
| 도메인이 타임아웃됨 | DNS, 공인 주소, 포트 포워딩, ISP 인바운드 제한 |
| 도메인을 열면 관리 페이지로 이동함 | 인터넷 오리진 포트가 잘못됨. 관리 엔드포인트가 아니라 게이트웨이를 가리켜야 함 |
| 로그인 후 리디렉션 반복 | 인증 도메인, 루트 도메인, 쿠키 범위, 공개 프로토콜, 앞단 프록시의 Host/X-Forwarded-*가 일치하는지 확인한 뒤 원래 서비스 Host에서 다시 접속 |
| 502 응답 | fn-knock에서 업스트림에 접속할 수 없거나 업스트림 프로토콜 또는 포트를 잘못 입력함 |
| 서브도메인이 잘못된 서비스로 연결됨 | Host가 보존되지 않았거나 앞단 프록시가 Host를 덮어씀 |
| HTTPS 인증서 오류 | 인증서가 해당 서브도메인을 포함하지 않거나 올바른 도메인에 연결되지 않음 |
전체 문제 해결 안내는 FAQ를 참고합니다.
