본문으로 건너뛰기

원본 포트 직접 접근

인터넷에서 기기로 직접 들어오는 경로가 있고 SSH, 원격 데스크톱 또는 다른 원본 TCP/UDP 포트에 접속해야 하는 환경을 위한 방식입니다. 사용자가 먼저 fn-knock 게이트웨이에서 인증하면 fn-knock가 사용자의 출발지 공인 IP에 보호 포트를 일시적으로 개방합니다.

  • 네트워크 토폴로지: 공인 IP 직접 연결
  • 라우팅 방식: 원본 TCP/UDP 포트
  • 접근 방식: 로그인 후 IP 접근 허용
  • 관리 패널 위치: 시스템 설정 → 모드 → 직접 연결 모드(권장하지 않음)

직접 연결 모드는 호스트 방화벽에 의존하며, 현재는 주로 fnOS FPK와 OpenWrt에서 사용합니다. Docker, Synology DSM 7 SPK, Windows 배포에서는 fn-knock가 호스트 방화벽을 관리할 수 없으므로 이 방식을 사용하면 안 됩니다.

적용 범위

직접 연결 접근 허용을 선택하기 전에 다음 사항을 확인합니다.

  • 관리 패널에 직접 연결 모드(권장하지 않음)이 표시되고 현재 배포가 호스트 방화벽을 지원합니다.
  • 기기에 사용할 수 있는 공인 IPv4, IPv6 또는 직접 제어할 수 있는 포트 포워딩이 있습니다.
  • 보호할 대상이 HTTP/HTTPS Web 사이트가 아니라 원본 포트입니다.
  • 설정 오류로 원격 연결이 끊겨도 LAN이나 콘솔에서 방화벽을 복구할 수 있습니다.

직접 연결 모드는 NAT 통과 방식이 아닙니다. 외부에서 들어올 수 있는 공인 경로가 없다면 NAT 통과: 서브도메인 라우팅을 사용합니다. 웹 서비스는 공인 IP 직접 연결: 서브도메인 라우팅을 우선 사용합니다.

fn-knock는 네트워크 엔드포인트만 제어합니다. SSH, 원격 데스크톱과 기타 업스트림 서비스도 꾸준히 업데이트하고 권한을 제한하며 자체 인증을 활성화합니다.

요청 흐름

  1. 사용자가 인터넷에서 fn-knock 게이트웨이를 엽니다. 기본 포트는 7999입니다.
  2. 사용자가 로그인을 완료합니다.
  3. 세션 설정과 사용한 자격 증명에서 허용하면 fn-knock가 사용자의 현재 출발지 공인 IP에 임시 접근 권한을 부여합니다. 허용하지 않는 설정이라면 수동 허용 목록이 필요합니다.
  4. 사용자가 동일한 출발지 IP에서 서비스의 원본 포트에 접속합니다.
  5. 세션 또는 접근 권한이 만료되면 해당 IP의 서비스 포트 접근이 다시 거부됩니다.

시작 전 준비

실행 모드를 바꾸기 전에 다음을 준비합니다.

  • 관리 엔드포인트, 게이트웨이 엔드포인트, 보호할 포트를 기록합니다.
  • TOTP, 비밀번호, 패스키, OIDC 중 하나 이상으로 로그인할 수 있는지 확인합니다.
  • 현재 실행 모드, 라우팅, 방화벽 설정을 백업합니다.
  • LAN 접속이나 기기 콘솔을 복구 경로로 확보합니다.

모드를 전환하면 방화벽 규칙이 변경됩니다. 유일한 원격 관리 연결을 사용 중인 상태에서 처음 활성화하지 않습니다.

1. 직접 연결 모드 활성화

시스템 설정 → 모드에서 직접 연결 모드(권장하지 않음)을 선택하고 저장합니다.

활성화 후에는 다음 조건을 충족합니다.

  • 계획한 인터넷 경로에서 fn-knock 게이트웨이 포트에 접속할 수 있습니다.
  • SSH, 원격 데스크톱 등 보호 대상 포트는 승인되지 않은 IP에 기본적으로 닫혀 있습니다.
  • LAN 또는 명시적으로 보존한 관리 출발지에서 설정을 복구할 수 있습니다.

fnOS FPK와 OpenWrt는 방화벽 구현이 서로 다릅니다. 전환 직후 외부 네트워크에서 로그인하지 않은 상태로 테스트하여 서비스 포트가 실제로 거부되는지 확인합니다.

2. 인증 엔드포인트 구성

로그인 방식 하나 이상을 구성하고 인터넷에서 fn-knock 게이트웨이를 열 수 있는지 확인합니다. 도메인 예시는 다음과 같습니다.

  • auth.example.com:7999
  • 공인 443 포트를 게이트웨이 7999로 전달한다면 https://auth.example.com

자격 증명과 세션 정보가 평문으로 전송되지 않도록 인증 엔드포인트에는 HTTPS를 사용합니다. 인증서 설정은 SSL 인증서를 참고합니다.

3. 로그인 후 IP 접근 허용 설정

시스템 설정 → 세션에서 로그인 후 IP 처리 방식을 설정합니다.

방식적합한 상황
세션에 맞춤직접 연결 모드의 권장값. 세션이 유효한 동안 해당 IP의 접근 권한을 유지합니다.
IP를 자동으로 허용하지 않음로그인 세션만 사용합니다. 원본 포트에 접속하려면 별도의 수동 허용 목록이 필요합니다.
사용자 지정고정된 접근 허용 시간이 필요할 때 사용합니다.

직접 연결 모드는 네트워크 포트를 보호합니다. 자동 IP 허용을 끄면 브라우저에서 로그인에 성공해도 SSH나 원격 데스크톱 포트가 자동으로 열리지 않습니다.

서비스 범위가 제한된 로그인 자격 증명은 자동 IP 접근 권한을 만들지 않습니다. 제한된 TOTP와 여기에 연결된 패스키/OIDC, 서비스 범위가 제한된 사용자 이름·비밀번호 계정이 모두 해당합니다. 제한된 자격 증명이 출발지 IP를 통해 원래 범위보다 더 넓은 서비스에 접근하지 못하게 하기 위한 동작입니다. 직접 연결 접근에는 서비스 범위가 제한되지 않은 자격 증명을 사용하거나 현재 공인 IP/CIDR을 수동으로 추가합니다. 그런 다음 외부 네트워크에서 포트를 다시 검증합니다.

4. 도메인, DDNS, 인증서 구성

공인 주소가 동적으로 바뀐다면 DDNSauth.example.com을 업데이트할 수 있습니다. 인터넷에서 실제로 도달할 수 있는 주소 레코드만 게시합니다.

인증 도메인에 신뢰할 수 있는 인증서를 구성합니다. 자동 HTTPS는 해당 기능을 지원하는 배포에서만 사용할 수 있습니다. Docker와 OpenWrt에서는 인증서를 직접 제공하거나 앞단 TLS 엔드포인트를 사용합니다.

5. 외부 네트워크에서 검증

모바일 데이터나 별도의 외부 회선에서 다음 순서로 테스트합니다.

  1. 로그인하지 않은 상태에서 보호 포트에 연결하면 거부되거나 타임아웃되는 것이 정상입니다.
  2. 인증 엔드포인트를 열고 로그인을 완료합니다.
  3. 같은 네트워크에서 보호 포트에 다시 연결했을 때 업스트림 서비스 자체의 인증 절차까지 진행되면 정상입니다.
  4. 시스템 설정 → 세션 또는 IP 허용 목록에서 현재 출발지 IP와 유효 기간을 확인합니다.
  5. 로그아웃하거나 접근 권한이 만료될 때까지 기다린 뒤 포트가 다시 닫혔는지 확인합니다.

SSH 테스트에서는 이미 만들어진 연결을 재사용하지 말고 새 연결을 열어 방화벽 규칙이 적용되는지 확인합니다.

출발지 IP 변경

모바일 네트워크, 회사 프록시, 일부 가정용 인터넷 회선은 출발지 공인 IP가 자주 바뀔 수 있습니다. IP가 바뀌면 기존 접근 권한이 새 주소에 자동 적용되지 않으므로 인증 엔드포인트를 다시 열고 로그인합니다.

출발지를 엄격하게 제한해야 한다면 안정적인 IP 또는 CIDR을 수동으로 추가할 수 있습니다. 모바일 네트워크의 지나치게 넓은 대역을 등록하면 노출 범위가 커지므로 피합니다.

배포별 제한

배포 방식직접 연결 접근 허용설명
fnOS FPK지원호스트 방화벽을 관리할 수 있음
OpenWrt 패키지지원라우터 방화벽에 규칙을 적용
Docker Compose미지원컨테이너가 호스트 방화벽 관리를 대신할 수 없음
Synology DSM 7 SPK미지원패키지가 DSM 호스트 방화벽을 변경하지 않음
Windows x86_64미지원설치 프로그램의 프로그램 단위 규칙은 직접 연결 접근 허용과 다르며, 관리 패널에서도 이 모드를 제공하지 않음

문제 해결

증상우선 확인할 항목
로그인에 성공했지만 원본 포트에 연결되지 않음로그인 후 IP 접근 허용 방식, 현재 출발지 IP, 포트 포워딩
로그인하지 않아도 서비스 포트에 접속됨라우터 또는 호스트에 fn-knock를 우회하는 허용 규칙이 남아 있는지 확인
활성화한 뒤 원격 관리 연결이 끊김LAN 또는 콘솔에서 방화벽과 실행 모드 복구
IPv4는 보호되지만 IPv6는 계속 노출됨IPv6 방화벽에 같은 제한이 적용되지 않았거나 AAAA 레코드가 다른 엔드포인트를 가리키는지 확인
접근 권한이 너무 빨리 만료됨세션 유효 기간이 너무 짧거나 출발지 IP가 변경되었는지 확인
로그인에 성공했지만 자동 IP 접근 권한이 만들어지지 않음로그인 자격 증명의 서비스 범위가 제한되어 있는지 확인. 제한 없는 자격 증명을 사용하거나 IP/CIDR을 수동으로 추가
Docker에서 이 모드를 찾을 수 없음배포 기능 제한에 해당하므로 서브도메인 라우팅 사용

전체 문제 해결 안내는 FAQ를 참고합니다.

관련 문서

QQ 커뮤니티: 1081609274