Agent Terminal
← 블로그

iroh란 무엇인가?

iroh는 Agent Terminal의 원격 접속을 뒷받침하는 오픈 소스 네트워킹 라이브러리입니다. 이 라이브러리가 무엇을 하는지, 릴레이를 누가 운영하는지, 릴레이가 무엇을 볼 수 있는지 정리했습니다.

  1. 키로 연결
  2. 직접 연결 시도
  3. 릴레이로 대체

릴레이가 보는 것

  • 두 기기의 IP 주소
  • 전달하는 암호화된 패킷

n0의 릴레이를 쓰면, n0의 조회 서비스도 각 기기가 어느 릴레이에 있는지 기록합니다. 릴레이가 보는 것에 대한 자세한 내용

iroh란 무엇인가

iroh는 IP 주소 대신 엔드포인트 ID라고 부르는 공개 키로 한 기기를 다른 기기와 연결하는 오픈 소스 네트워킹 라이브러리입니다. 먼저 직접 연결을 시도하고, 안 되면 릴레이 서버로 대체합니다. 모든 연결은 QUIC을 사용해 종단 간 암호화됩니다.

라이브러리는 앱 안에 들어가는 코드이며, 따로 설치하는 것이 아닙니다. iroh는 Rust로 작성되었고, MIT 또는 Apache 2.0 라이선스로 배포되며, n0라는 회사가 만듭니다.

자세한 설명
  • 엔드포인트 ID는 Ed25519 키 쌍 중 공개 키 쪽입니다. 키 쌍은 앱이 직접 만들며, 가입 절차는 없습니다.
  • 연결은 n0가 직접 만든 QUIC 구현체인 noq를 통해 TLS 1.3과 함께 QUIC을 사용합니다. 이 구현체는 멀티패스를 지원하므로, 연결이 Wi-Fi와 모바일 데이터 사이를 오갈 수 있습니다.
  • 다른 기기가 찾을 수 있도록, 엔드포인트는 엔드포인트 ID와 홈 릴레이의 URL이 담긴 서명된 레코드(Pkarr)를 기본적으로 n0가 운영하는 DNS 서버에 게시합니다. Mainline DHT에 게시하는 것은 선택 사항이며, 같은 네트워크의 기기끼리는 서로를 직접 찾을 수 있습니다.

출처: iroh란 무엇인가, 엔드포인트, 주소 조회, iroh 저장소.

휴대폰이 PC에 바로 닿지 못하는 이유

온라인에 있는 모든 기기에는 집 주소처럼 IP 주소가 있습니다. 그런데 집에 있는 PC는 보통 자기 IP 주소가 없습니다. 공유기가 집 안의 모든 기기가 쓰는 공인 IP 주소를 하나만 갖기 때문입니다. 이 방식이 NAT(네트워크 주소 변환)입니다.

공유기는 일방통행 문과 같습니다. 안에 있는 기기는 밖으로 나갈 수 있지만, 방화벽은 응답이 아닌 들어오는 연결을 모두 막습니다. 또한 주소가 바뀌기도 합니다. 예를 들어 휴대폰이 Wi-Fi에서 모바일 데이터로 바뀌면 그렇습니다.

집 밖에 있는 휴대폰이 PC에 닿지 못하는 이유 휴대폰이 집 공유기를 향해 연결을 보냅니다. 공유기는 PC가 보낸 것에 대한 응답이 아니므로 이 연결을 차단합니다. 공유기 뒤의 PC는 이 연결을 전혀 보지 못합니다. 집 밖에 있는 휴대폰 휴대폰 차단됨 공유기 PC NAT·방화벽: 응답만 통과
공유기는 응답은 들여보내지만, 바깥에서 오는 새 연결은 들여보내지 않습니다.

iroh는 인터넷 전체에 포트를 여는 대신, 두 기기가 각자 자기 쪽에서 문을 열도록 합니다.

iroh의 연결 방식

  1. 찾기. 휴대폰이 PC의 엔드포인트 ID가 연결된 릴레이를 조회합니다.
  2. 직접 연결. 그 릴레이를 거쳐 두 기기가 주소를 교환한 뒤, 같은 순간에 서로에게 패킷을 보냅니다. 각 공유기는 이를 응답처럼 보고 들여보냅니다. 이것이 홀 펀칭(hole punching)입니다.
  3. 대체 경로. 어떤 네트워크가 여전히 이를 막으면, 트래픽은 대신 릴레이를 거쳐 계속 흐릅니다.
직접 경로가 우선, 릴레이는 대체 수단 홀 펀칭이 성공하면 휴대폰과 PC가 직접 연결됩니다. 실패하면 암호화된 트래픽이 휴대폰에서 릴레이 서버를 거쳐 PC로 전달됩니다. 1. 가능하면 직접 연결 휴대폰 PC 릴레이 2. 그 밖에는 릴레이를 거쳐 읽을 수 없는 암호화 패킷을 전달
릴레이는 직접 경로가 실패할 때만 트래픽을 전달합니다.

릴레이가 볼 수 있는 것과 볼 수 없는 것

릴레이는 트래픽을 전달하지만 읽을 수는 없습니다. 트래픽은 상대 기기의 키로 암호화되어 있기 때문입니다. 하지만 릴레이는 두 기기의 IP 주소를 볼 수 있습니다. 또한 n0의 릴레이를 쓰면, n0의 조회 서비스가 각 기기가 어느 릴레이에 있는지 기록합니다.

직접 경로에 대한 자세한 내용

iroh는 QUIC 연결 자체 안에서 NAT 통과를 수행합니다. 이는 QUIC NAT 통과 초안을 본뜬 확장(n0_nat_traversal)을 통해 이루어지므로, 연결 세부 정보는 계속 암호화된 상태로 남습니다. 양쪽은 서로의 공인 주소로 UDP 데이터그램을 같은 순간에 보냅니다. 릴레이는 만나는 지점일 뿐이며, 홀 펀칭 과정에는 참여하지 않습니다. 기기는 릴레이에 WebSocket으로 접속합니다.

출처: NAT 통과, 릴레이, iroh 1.0.

n0는 누구이며, 공개 릴레이는 무엇인가

n0(n0, inc.)는 iroh를 GitHub에서 공개적으로 만드는 회사입니다. 또한 앱이 자체 릴레이를 설정하지 않으면 iroh가 쓰는 공개 릴레이 세트를 운영합니다. n0의 설명과 저희 앱 안의 안내에 따르면, 이 릴레이는 다음과 같습니다.

  • 무료이며, iroh 기반으로 만든 모든 앱이 함께 씁니다.
  • 보장되지 않음: 가동 시간 보장이 없고, n0가 공개하지 않은 속도 제한이 있습니다. 그래서 릴레이 연결은 바쁘거나 다운되었을 때 느려지거나, 끊기거나, 아예 연결되지 않을 수 있습니다.
  • 최신 버전만 지원: n0는 이 릴레이에서 최신 iroh 릴리스만 지원하므로, 오래된 앱은 연결되지 않을 수 있습니다.

n0의 문서는 이 릴레이를 개발과 테스트에 적합하다고 설명하며, 운영 환경을 위해서는 유료 릴레이를 제공합니다.

Tailscale 사용자를 위해

두 방식의 개념은 익숙합니다. 직접 연결을 시도하고, 홀 펀칭으로 NAT 뒤의 기기에 닿으며, 전달하는 내용을 해독할 수 없는 릴레이로 대체합니다(Tailscale의 릴레이는 DERP라고 합니다). 차이는 범위에 있습니다. Tailscale은 기기 하나를 모든 앱이 쓸 수 있는 사설 네트워크에 올리고, iroh는 한 앱을 그 앱의 상대 기기들과 연결합니다.

iroh Tailscale
성격한 앱 안에 들어가는 라이브러리기기를 tailnet에 참여시키는 클라이언트 (tsnet은 이를 Go 프로그램에 내장합니다)
암호화QUIC + TLS 1.3WireGuard
식별 방식앱이 만드는 키, 계정 없음계정. 조정 서버가 기기들의 공개 키를 공유합니다
릴레이iroh 릴레이: n0의 공개 릴레이, 유료 릴레이, 또는 직접 운영하는 릴레이DERP: Tailscale 제공 또는 직접 운영

일반적으로 어느 쪽이 더 낫다고 할 수는 없습니다. Tailscale은 접근 규칙이 있는 하나의 사설 네트워크에 알맞고, iroh는 별도 설정 없이 앱이 자신의 짝과 연결되어야 할 때 알맞습니다.

Agent Terminal의 사용 방식

Windows PC나 Mac의 데스크톱 앱은 iroh 엔드포인트를 실행합니다. 휴대폰은 QR 코드를 스캔해 페어링하고 나면 이 엔드포인트 ID로 연결합니다.

  • 같은 Wi-Fi 또는 직접 경로: 릴레이를 사용하지 않습니다.
  • 무료 요금제, 집 밖에서: 무료 요금제는 계정 없이 n0의 공개 릴레이에 의존합니다. 저희가 아니라 n0가 무료로 운영하는 서비스로, 가동 시간이나 속도에 대한 약속이 없습니다. 느리거나, 끊기거나, 아예 연결되지 않을 수 있으며, n0 쪽 상황은 저희가 제어할 수 없습니다.
  • Pro: Agent Terminal의 전용 릴레이를 통해 믿고 쓸 수 있는 원격 접속을 제공합니다(요금제). Pro 이용이 끝나면 공개 릴레이로 대체됩니다.
  • 직접 운영하는 릴레이: 릴레이를 직접 실행하고 데스크톱에서 설정합니다.

iroh 연결 안은 여전히 SSH이며, 휴대폰과 PC 사이에서 종단 간으로 동작합니다. 데스크톱은 공개 키만 허용합니다(확인 방법). PC에 닿더라도 페어링된 키가 없으면 아무도 들어올 수 없습니다.

질문

안전한가요?

릴레이는 세션 내용을 읽을 수 없습니다. 바깥은 iroh 암호화이고 안쪽은 SSH이며, 데스크톱이 모든 키를 직접 확인하기 때문입니다. 릴레이가 알게 되는 것은 두 기기의 IP 주소뿐입니다. 어느 릴레이든 이를 보게 되므로, 선택의 문제는 누구의 릴레이를 쓰느냐입니다. 무료 요금제는 n0의 릴레이, Pro는 Agent Terminal의 릴레이, 또는 직접 운영하는 릴레이입니다.

계정이 필요한가요?

아니요. 무료 요금제에는 필요 없습니다. 계정은 Pro에만 필요합니다.

n0의 릴레이가 다운되거나 느려지면 어떻게 되나요?

같은 Wi-Fi에 있거나 기기가 직접 연결되는 곳에서는 아무 변화가 없습니다. 무료 요금제에서는 릴레이를 거치는 연결이 복구될 때까지 느려지거나, 끊기거나, 아예 연결되지 않을 수 있으며, 저희는 이를 제어할 수 없습니다. Pro는 대신 Agent Terminal의 전용 릴레이를 씁니다. n0는 최신 iroh 버전만 지원하므로 Agent Terminal을 최신 상태로 유지하세요.

직접 릴레이를 운영할 수 있나요?

예. n0는 릴레이를 오픈 소스로 공개합니다(방법). 직접 관리하는 서버에서 실행한 다음 데스크톱에서 설정하세요.

2026년 10월 20일 기준으로 iroh 문서, n0 블로그, Tailscale 문서와 대조해 확인했습니다. Agent Terminal을 만드는 팀의 Edward가 쓴 글이며, Agent Terminal은 iroh를 사용합니다.