공인 IPv6 직접 연결 및 원본 포트 허용
직접 연결 모드에서는 사용자가 먼저 게이트웨이에서 로그인한 뒤 IP 허용 목록을 통해 fnOS나 다른 서비스의 원본 포트에 접속합니다. 원본 포트가 꼭 필요한 IPv6 환경을 위한 방식이며, 웹 서비스를 공개할 때 우선 선택할 경로는 아닙니다.
이 모드에서는 fn-knock가 호스트 방화벽을 관리해야 하므로 fnOS 네이티브 FPK 또는 호스트 관리 기능을 갖춘 OpenWrt에서만 사용할 수 있습니다. Docker, Synology DSM 7 SPK, Windows는 직접 연결 모드를 지원하지 않습니다.
사전 요구 사항
- 기기에 인터넷에서 라우팅할 수 있는 IPv6 주소가 있습니다.
- 라우터와 호스트 방화벽이 게이트웨이 엔드포인트의 IPv6 인바운드 트래픽을 허용합니다.
- AAAA 레코드를 준비했거나 DDNS로 AAAA를 업데이트할 수 있습니다.
- 같은 LAN에 있지 않은 IPv6 클라이언트에서 검증할 수 있습니다.
- 로그인 복구용 자격 증명을 하나 이상 준비했습니다.
먼저 기기와 외부 네트워크에서 각각 주소 패밀리를 확인합니다. 기기가 fe80::/10 링크 로컬 주소나 ULA 사설 주소를 받았다고 해서 공인 IPv6가 있는 것은 아닙니다. AAAA 레코드는 현재 기기로 라우팅 가능한 글로벌 IPv6 주소를 가리키도록 설정합니다. 가정용 인터넷 회선에서 IPv4 NAT 포트 포워딩이 필요하지 않더라도 라우터의 IPv6 인바운드 방화벽은 기본적으로 연결을 차단할 수 있습니다.
모드를 전환하기 전에 다음 복구 정보를 기록합니다.
- fn-knock 관리 엔드포인트와 LAN 주소
- 현재 방화벽 설정 백업
- 게이트웨이 엔드포인트와 보호할 원본 포트
- LAN 또는 기기 콘솔에서 규칙을 복구하는 방법
설정 절차
DDNS 관리에서IPv6 전용을 선택합니다. 주소 소스는 자동 선택을 사용하거나 실제 공인 네트워크 인터페이스로 고정할 수 있습니다. Docker에서는 이 문서의 직접 연결 모드를 사용할 수 없습니다.- 동기화가 끝나면 외부 DNS에서 AAAA 레코드를 조회하여 이전 프리픽스, 임시 주소 또는 다른 기기가 아니라 현재 기기의 글로벌 IPv6를 반환하는지 확인합니다.
- 라우터의 IPv6 방화벽에서 fn-knock 게이트웨이 엔드포인트만 허용합니다. 보호할 원본 포트를 미리 광범위하게 열면 동적 접근 허용을 우회하므로 그렇게 하지 않습니다.
시스템 설정 → 모드에서직접 연결 모드(권장하지 않음)를 선택합니다. 확인 안내를 읽고 저장하면 시스템이 해당 모드에 맞춰 방화벽 규칙을 동기화합니다.인증 설정에서 TOTP 또는 사용자 이름과 비밀번호를 만들고,시스템 설정 → 세션에서 로그인 후 IP 접근 허용을세션에 맞춤또는 필요한 고정 시간으로 설정합니다.- 게이트웨이 도메인에 HTTPS 인증서를 구성합니다. 인증서는 실제 접속 Host를 포함합니다. 자동 HTTPS의 발급 및 배포 조건은 인증서와 HTTPS를 참고합니다.
- 외부 네트워크에서 게이트웨이 엔드포인트(예:
https://auth.example.com:<게이트웨이 포트>)를 열고 로그인합니다. - 필요한 서비스의 원본 포트로 다시 접속하여 현재 공인 IPv6가 IP 접근 허용 목록에 적용되었는지 확인합니다.
서비스 범위가 제한된 TOTP, 비밀번호 계정, 패스키 또는 OIDC 자격 증명은 자동 IP 접근 권한을 만들지 않습니다. 자격 증명이 출발지 주소를 통해 원래 범위보다 권한을 넓히지 못하게 하기 위한 동작입니다. 직접 연결 모드에서 원본 포트를 자동으로 열려면 서비스 범위가 제한되지 않은 자격 증명을 사용하거나 필요한 IPv6/CIDR을 수동으로 추가합니다.
방화벽 검증 순서
각 단계에서 새 연결을 만듭니다. 이미 연결된 SSH, 브라우저 또는 서비스 세션을 재사용하면 안 됩니다.
- 로그인하지 않은 상태에서는 게이트웨이 엔드포인트에 접속할 수 있어야 하고, 보호된 원본 포트는 거부되거나 타임아웃되는 것이 정상입니다.
- 로그인한 뒤 같은 외부 네트워크에서 원본 포트로 연결하여 업스트림 서비스 자체의 인증 절차까지 진행되는지 확인합니다.
IP 허용 목록또는 세션 상세 화면에서 기록 유형, IPv6 주소, 만료 시간을 확인합니다.- 로그아웃하거나 접근 권한이 만료될 때까지 기다린 뒤 새 연결을 만들어 원본 포트가 다시 거부되는지 확인합니다.
- 다른 외부 네트워크에서 테스트하여 승인되지 않은 새 IPv6 주소가 이전 네트워크의 접근 권한을 이어받지 않는지 확인합니다.
IP가 변경될 때
직접 연결 모드에서 원본 포트로 이어지는 후속 연결은 게이트웨이를 다시 거치지 않습니다. IPv6 프리픽스나 클라이언트의 출발지 주소가 바뀌면 게이트웨이 엔드포인트를 다시 열어 인증하고, 자동 IP 접근 권한이 동기화될 때까지 기다린 뒤 원본 포트 연결을 다시 시도합니다.
클라이언트는 Privacy Extension 임시 주소를 사용할 수 있고 모바일 네트워크도 프리픽스를 바꿀 수 있습니다. 다시 로그인하는 횟수를 줄이려고 지나치게 넓은 IPv6 대역을 허용하지 않습니다. 수동 CIDR은 해당 범위 전체에 접근 권한을 부여합니다.
검증 및 문제 해결
- 모바일 네트워크나 다른 IPv6 네트워크에서 테스트합니다. 가정 Wi-Fi에서는 로컬 출발지 예외가 적용될 수 있습니다.
- AAAA가 올바르지만 연결할 수 없음: 라우터 IPv6 방화벽, ISP 인바운드 정책, 호스트 방화벽을 확인합니다.
- 로그인할 수 있지만 원본 포트가 열리지 않음: 허용 목록 기록, 모드 동기화 상태, 서비스의 IPv6 리스닝 여부를 확인합니다.
- 로그인 후 접근 권한이 생성되지 않음: 세션의 IP 접근 허용 정책과 자격 증명의 서비스 범위 제한을 확인합니다.
- 주소가 간헐적으로 연결할 수 없는 호스트를 가리킴: DDNS에서 선택한 인터페이스, 임시 IPv6 주소, 프리픽스 변경을 확인합니다.
- 로그인하지 않아도 원본 포트에 접속됨: 라우터, 클라우드 보안 그룹, 수동 방화벽 규칙에서 fn-knock를 우회하는 허용 규칙이 없는지 즉시 확인합니다.
되돌려야 한다면 LAN이나 콘솔에서 실행 모드를 이전 방식으로 전환하고 백업한 방화벽 규칙을 복원한 뒤 사용하지 않는 AAAA 레코드를 삭제합니다. 먼저 관리 경로부터 복구하고 임시 접근 허용 기록은 그다음 정리합니다.
