포트 포워딩 없이 로컬 TCP/UDP 서비스를 특정 피어에게만 노출하고 접근 만료시키기 (오픈 소스, Rust)
요약
본 글은 로컬 TCP/UDP 서비스를 공용 인터넷에 노출하지 않고도 특정 피어에게만 안전하게 접근시키고 만료시키는 방법을 소개합니다. 아웃바운드 QUIC 연결만을 사용하는 'ISEKAI 포털'을 통해, 방화벽 변경 없이 에이전트 간(A2A) 통신을 구현하며 강력한 권한 기반의 보안 기능을 제공합니다.
핵심 포인트
- 로컬 서비스에 대한 외부 노출 없이 안전하게 접근 가능
- 아웃바운드 QUIC 연결만 사용하므로 네트워크 설정 변경 불필요
- 권한(Grant) 시스템으로 접속 만료 및 제어 가능
- 특정 클라이언트 키 기반의 강력한 보안 모델 제공
공개 고지: 저는 개발자 중 한 명입니다. 문제점은 다음과 같습니다. 제 컴퓨터에서 실행되는 특정 서비스(이 경우 127.0.0.1에 바인딩된 AI 에이전트 서버)에 특정 사람만 접근할 수 있도록 허용하고 싶었지만, 이를 공용 인터넷에 노출하거나 라우터를 건드리거나 전체 네트워크에 VPN 접속을 제공하는 방식은 피하고 싶었습니다. ISEKAI 포털이 하는 일:
- 포털 서버는 사용자의 서비스 옆에 위치하며 아웃바운드(outbound) QUIC 연결만 생성합니다. 인바운드 포트나 방화벽/라우터 변경이 필요 없습니다.
- 사용자는 TOML 파일에 이름 지정된 서비스를 선언할 수 있습니다 (예:
a2a -> 127.0.0.1:3000). 클라이언트는 임의의 호스트:포트가 아닌, 이 명시된 이름만 요청할 수 있습니다. - 접근은 '권한(Grant)'에 의해 제어됩니다. ("이 특정 클라이언트 키는 24년 8월 1일 동안 연결할 수 있다.") 만료되면 접속 권한도 사라집니다.
- 권한이 없는 피어는 리스너가 존재한다는 사실조차 알 수 없습니다.
- 연결은 중계(relayed) 방식으로 시작하여 가능할 경우 직접 경로로 이동할 수 있습니다.
- 일반 TCP 및 UDP를 포워딩하므로 특정 프로토콜에 종속되지 않습니다.
이 글에서는 전체 데모 과정을 안내합니다: 리눅스 박스의 A2A (agent-to-agent, 에이전트 간) 샘플 서버와 통신하는 윈도우 클라이언트가 사용되며, 이 서버는 로컬호스트(localhost) 외에는 어떠한 포트에서도 리스닝하지 않습니다.
기사: https://zenn.dev/seera/articles/9bb592ca7b575a?locale=en
코드 (MIT): https://github.com/seera-networks/ISEKAI-link
Windows / Linux / macOS (arm64)용 사전 빌드 바이너리는 Releases 페이지에서 확인할 수 있습니다.
솔직한 주의사항을 말씀드리자면, 이 서브(커뮤니티)에서는 다음과 같은 질문을 할 것이기 때문에 몇 가지 제한 사항이 있습니다:
- 현재 계정(Auth0 로그인; 이메일, Google 또는 GitHub)이 필요하며 트래픽은 저희의 조정/중계 서버를 거칩니다. 조직 계정의 경우, 사용자가 자체 전용 중계기를 실행할 수 있도록 계획하고 있어, 조직 엔드포인트 간의 트래픽은 사용자가 통제하는 인프라 내에 머무르게 됩니다.
- 현재는 공개 체험판으로 운영되므로 무료입니다. 유료 플랜이 출시되면 소수의 엔드포인트를 커버하는 무료 티어를 유지할 계획이므로, 홈랩 규모의 사용은 계속 무료로 이용 가능해야 합니다.
어떻게 오늘날 사용하는 도구(Tailscale, Cloudflare Tunnel, ngrok 등)와 비교하여 어떤 점이 좋은지, 그리고 무엇을 통해 신뢰를 얻을 수 있을지에 대한 피드백을 정말 받고 싶습니다.
제출자: /u/masa-koz [link] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/SelfHosted (AI filter)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기