4P by GN⁺ | ★ favorite | 댓글 1개
  • WireHub는 WireGuard 설정을 파일로 주고받는 대신, 호스팅된 관리 UI에서 네트워크를 만들고 링크로 공유하게 해주는 베타 서비스임
  • 여러 네트워크와 디바이스를 한곳에서 관리하며, CIDR 기반 피어 IP 자동 할당과 기본 DNS 설정을 지원함
  • 디바이스 라벨로 접속 규칙을 구성해 Peer, AllowedIPs, PresharedKey 같은 WireGuard 설정을 규칙 기반으로 관리함
  • 초대 사용자는 Guest, Member, Manager, Admin 역할로 나뉘며, Guest는 WireHub 계정 없이도 할당된 디바이스 설정을 볼 수 있음
  • Private Key 없이도 사용할 수 있고, 키를 저장할 때는 브라우저에서 WebCrypto로 암호화되어 비밀번호와 평문 키가 WireHub로 전송되지 않음

WireHub가 해결하는 문제

  • WireHub는 WireGuard 네트워크 설정을 생성하고 공유하는 호스팅 관리 UI
  • 친구, 가족, 팀원에게 WireGuard 설정 파일을 이메일로 보내는 대신 WireHub 링크로 안전하게 공유할 수 있음
  • 여러 네트워크와 디바이스, 라벨 기반 접근 규칙, 초대와 권한, WireGuard Private Key의 안전한 저장을 지원함
  • Private Key는 브라우저에서 생성하거나 기존 키를 가져올 수 있음
  • 키를 WireHub에 제공하는 경우 사용자가 정한 비밀번호로 브라우저에서 암호화되며, WireHub는 비밀번호를 받거나 저장하지 않음
  • Private Key 암호화·복호화를 제외한 기능은 JavaScript 없이도 접근 가능함

네트워크와 디바이스 관리

  • Networks

    • 여러 디바이스를 하나 이상의 WireGuard VPN으로 연결할 수 있음
    • Home 네트워크는 가족 개인 디바이스용, Office 네트워크는 업무 관련 디바이스용으로 나눠 쓸 수 있음
    • 10.10.0.0/24 같은 네트워크 수준 CIDR을 사용해 새 피어에 고유 IP를 자동 할당함
    • 연결된 모든 디바이스에 적용할 기본 DNS 설정을 지정할 수 있음
  • Devices

    • 노트북, 휴대폰, 서버 등 WireGuard를 지원하는 디바이스를 추가할 수 있음
    • 각 디바이스는 네트워크 CIDR에서 10.10.0.5/32 같은 IP 주소를 자동으로 받음
    • 192.168.65.5/32 같은 추가 주소도 지정 가능함
    • pihole, media, server:app-1 같은 사용자 정의 라벨로 디바이스를 그룹화하고 필터링할 수 있음

라벨 기반 연결 규칙

  • 디바이스 간 피어링은 단방향 라벨 기반 연결 규칙으로 구성됨
  • 연결이 성립하려면 두 디바이스가 모두 자신에게 적용된 라벨로 연결을 지정해야 함
  • 각 연결의 AllowedIPs는 키워드로 지정할 수 있음
    • peers: 두 피어의 IP만 사용
    • network: 네트워크 CIDR 사용
    • all: 모든 트래픽 0.0.0.0/24 사용
  • 직접 피어 투 피어 연결에서는 PresharedKey가 기본적으로 자동 생성되어 피어 간 공유됨
  • 패스스루 연결을 지정하면 Hub/Site 토폴로지, Web Proxy, VPN exit node 구성을 표현할 수 있음

멤버 초대와 권한

  • WireHub는 네트워크에서 누가 무엇을 할 수 있는지 정하는 역할 기반 접근 제어를 제공함
  • Guests

    • WireGuard 설정 파일을 안전하게 공유하려는 경우에 쓰임
    • 자신에게 할당된 디바이스만 볼 수 있음
    • WireHub 계정이 필요 없음
  • Members

    • 사용자가 자신의 디바이스를 직접 관리해야 할 때 쓰임
    • 자신의 디바이스를 추가하고 다른 네트워크 디바이스를 볼 수 있음
    • 자신이 소유하거나 자신에게 할당된 디바이스만 수정 가능함
  • Managers & Admins

    • 네트워크 관리를 다른 사람에게 맡길 때 쓰임
    • 새 멤버 초대, 멤버십 취소, 연결 생성·수정, 네트워크 설정 변경을 할 수 있음
    • 다른 멤버의 관점에서 네트워크를 미리 보며 설정 상태를 확인할 수 있음

Interface와 키 보관

  • Interfaces는 WireGuard 설정 파일의 [Interface] 섹션을 나타내며, Private/Public Key를 포함함
  • Interface는 생성한 사용자에게 비공개로 간주됨
  • Interface가 네트워크 Manager나 디바이스 소유자에 의해 Device에 할당되면, Public Key와 Endpoint가 있는 경우 해당 디바이스의 피어와 공유됨
  • Private Key를 WireHub에 공유하면 클라이언트 측 암호화가 적용됨
    • WebCrypto로 브라우저에서 암호화됨
    • 사용자가 정한 비밀번호로 보호됨
    • 비밀번호는 브라우저를 떠나지 않음

설정 미리보기

  • WireHub는 WireGuard 설정 미리보기 UI를 제공함
  • Home NetworkHub 디바이스가 사용 가능한 모든 디바이스에 연결되는 구성을 볼 수 있음
  • 미리보기에는 [Interface]와 여러 [Peer] 항목이 포함됨
    • home/hub10.10.10.1 주소를 가짐
    • home/iphone, home/home-server, home/ipad, home/macbook 피어가 표시됨
    • 각 피어에는 PublicKey, PresharedKey, AllowedIPs가 표시됨
    • home/home-server10.10.10.2/32192.168.68.24/32 AllowedIPs를 함께 가짐
  • UI에서 복사, QR, 다운로드 동작을 사용할 수 있음

WireHub의 범위와 계정 요구

  • WireHub는 VPN 서비스가 아님
    • WireGuard 설정을 생성하고 배포하는 도구임
    • 생성한 설정은 공식 WireGuard 앱과 명령줄 도구로 가져와 활성화할 수 있음
  • 대상 사용자는 자체 WireGuard 네트워크를 운영하고 관리하는 사람임
  • 계정은 네트워크 설정, 디바이스, Private/Public Key를 저장하기 위해 필요함
  • 기존 WireHub 네트워크 초대를 수락할 때도 경우에 따라 계정이 필요함
  • WireHub는 Private Key 없이도 사용할 수 있음
    • 유효한 WireGuard 설정을 생성하려면 Public Key와 Endpoint만 필요함
    • Private Key를 제공하면 브라우저에서 사용자가 정한 비밀번호로 암호화됨
    • 비밀번호와 평문 Private Key는 WireHub로 전송되지 않고, 암호화된 문자열만 전송됨
  • Private Key 암호화·복호화에는 표준 WebCrypto API를 사용하고, 브라우저에서 Private Key를 생성할 때 Jason의 wireguard.js를 사용함

댓글과 토론

Hacker News 의견들
  • 비즈니스 용도로는 꽤 멋질 수 있어 보임. Tailscale은 WireGuard 네트워크 설정·관리를 돕는 상용 도구이고, 올해 초 큰 보안 사고가 있었지만 대응은 빨랐음
    Tailscale을 거의 쓸 뻔했지만, 제3자에게 어떤 통제권도 주고 싶지 않다는 점이 걸렸음. Tailscale은 기업 과금 모델인데, 이게 자유 오픈소스 소프트웨어라면 더 선호할 듯함
    사이트에서 프라이버시가 어떻게 동작하는지 궁금함. 설정을 제3자에게 올리면 그 제3자가 내 네트워크를 루트 권한으로 장악할 수 있는 경로를 갖게 되는 셈이고, 공유용 사이트라면 실수로 권한이 공개되어 낯선 사람이 접근할 수 있는 우려도 있음

    • 보안은 많이 고민했음. WireHub가 동작하려고 비밀 키를 공유하거나 업로드할 필요는 없고, 생성된 설정에는 공개 키만 들어감. 공개 키는 어차피 공개 정보라 저장함
      비밀 키를 제공하는 경우에도 먼저 브라우저에서 비밀번호로 암호화해야 함. 비밀번호는 저장하지 않고 암호화에만 사용함
      그래서 비밀 키까지 포함된 전체 설정을 보려면 해당 비밀번호를 입력해야 함. 페이지 하단으로 스크롤하면 위젯이 실제로 동작하는 모습을 볼 수 있음
      중요한 데이터를 잃어버릴 걱정을 하고 싶지 않아서, 애초에 그런 데이터를 수집하지 않으려 함
    • https://tailscale.com/security-bulletins/#ts-2022-004는 무서웠음. 대응은 훌륭했지만, Facebook 유출과 관련해 Zuckerberg 입장이었다면 어떻게 했겠냐는 질문에 Tim Cook이 “나는 그런 상황에 있지 않았을 것”이라고 답했던 게 떠오름
      Tailscale은 기술적으로 대단하지만, 그렇게 큰 접근 권한을 가진 도구치고는 내 취향엔 너무 많은 일을 함. SSH 키 지원까지 켜면 더 그렇고, 나는 순정 WireGuard를 쓰지만 LAN 탐색과 STUN은 있으면 좋겠음
      https://www.wirehub.org/도 좋아 보이고, Tailscale처럼 LAN 탐색도 해주는 https://git.deuxfleurs.fr/Deuxfleurs/wgautomesh도 괜찮아 보임
    • Headscale 사용은 고려해봤는지 궁금함
    • NetBird는 봤는지 궁금함. 완전한 자체 호스팅도 가능함
      https://github.com/netbirdio/netbird#quickstart-with-self-ho...
    • Nebula나 Defined.net도 확인해볼 만함
  • WireGuard를 쓰는 또 다른 해법을 보는 건 늘 반가움. WireGuard는 현대적인 사설 연결에 훌륭한 기술임
    내가 만든 https://github.com/netbirdio/netbird는 자체 호스팅이 가능하고, 피어 간 연결을 위해 방화벽을 직접 관리하지 않아도 WireGuard를 실행할 수 있는 옵션을 제공함

    • NetBird였는지 다른 자체 호스팅 해법이었는지 확실하진 않지만, 권장된 한 줄 bash 설치 스크립트를 실행한 뒤 어떤 이유로 VM에서 잠겨버렸음. 아직도 접속을 못 함
      그 무렵 더 단순한 걸 만들기로 마음먹었음
    • 한번 써보고 싶지만 VPN 리소스가 제한적이고, OIDC IDP를 설정해야 하는 건 전혀 즐거워 보이지 않음
  • 네트워크끼리 연결해서 각 네트워크의 장치들이 서로 보이도록 하는 방법을 추가하면 좋겠음

    • 좋은 포인트임. 이미 하나의 WireGuard 인터페이스가 여러 네트워크에 속할 수 있도록 지원함
      그래서 휴대폰에서 설정 하나만 켜도 서로 관련 없는 여러 네트워크의 장치에 접근할 수 있음
  • 좋은 프로젝트임
    아주 사소하지만, “my-office.com”을 소유한 게 아니라면 문서용으로 따로 예약된 example.com을 쓰는 게 좋겠음

    • 좋은 지적임. 그게 어디에 있었지? :)
  • 범위를 줄이고 에이전트 부분을 건너뛰어 사용자가 직접 하게 한 건 좋은 아이디어임. 나중에 추가하면 됨
    추가할 때는 모든 동적 노드를 처리하려면 먼저 API로 IP를 조회하고 갱신하는 수단을 도입하는 게 좋을 듯함. 지금은 사용자가 정적이거나 외부 동적 DNS 설정이 된 피어를 최소 1개는 가져야 함

    • 맞음, 의도를 정확히 이해했음
      동적 노드는 깊게 고려하지 않았지만, 언젠가 내가 직접 동적 도메인을 제공해서 Endpoint에 그 도메인만 쓰면 되게 할 생각은 있었음. 다만 진짜 피어 간/허브 없는 네트워크에도 도움이 될지는 확실하지 않음
  • 흥미로워 보임. 다만 내가 뭔가를 잘 몰라서 그럴 수도 있는데, 이게 브라우저 기반 프록시인지, 아니면 WireGuard 설정을 안전하게 생성하는 방법인지 불명확함
    WireGuard나 Tailscale 도구에는 늘 관심이 있고, Headscale은 꽤 성공적으로 쓰고 있음

    • 그냥 설정 생성기임. 서버는 운영하지 않음
      Tailscale, Cloudflare Tunnels 같은 완성형 해법과 wg-easy, subspace 같은 CLI/GUI 기반 자체 호스팅 해법 사이의 균형을 잡으려는 중임
      노드, 출구 노드, 장치 등은 직접 호스팅하고 어떤 트래픽이 지나가는지 완전히 통제하면서도, 특히 최종 사용자에게 어떤 장치가 어떤 설정을 받는지 쉽게 관리할 수 있게 하려는 것임
  • 같은 기능을 자체 호스팅으로 쓰고 싶다면 https://github.com/defguard/defguard를 시도해볼 만함

    • 멋진 프로젝트임. 예전에 별표를 눌러뒀는데 여기서 보니 반가움
      다만 분명히 하자면 WireHub는 설정 생성기일 뿐임. 네트워크를 운영하지 않고, 순정 WireGuard 앱 외에는 아무것도 설치하라고 요구하지 않음. “Web3 지갑 검증” 같은 멋진 일도 전혀 하지 않음
  • 이런 해법의 보안이 https://www.netmaker.io/의 자체 호스팅 버전과 비교해 어떤지가 관건임

    • 예전에 Netmaker를 봤지만 써보진 않았고 공개된 소스 코드도 살펴보지 않았음. 정확히 어떻게 동작하는지는 모르지만, 스택의 꽤 여러 계층을 건드릴 것 같다고 짐작함
      반면 WireHub는 처음부터 PrivateKeys를 제공하지 않으면 걱정할 코드가 0줄임. 물론 QR 코드는 동작하지 않고 수동으로 복사·붙여넣기를 해야 하지만, 작동은 함. 의도적으로 그렇게 설계한 기능임
      설치할 클라이언트나 에이전트를 제공하지 않고, 평소처럼 순정 WireGuard 앱을 쓰면 됨. 비밀 키조차 갖고 있지 않으면 공격 표면은 WireHub가 아니라 네트워크와 연결된 장치들 쪽으로 이동함
    • 이해한 바로는 WireHub는 더 적은 일을 하고 로컬에서 암호화하며, JavaScript 없이도 사용할 수 있음. 어떤 위협 모델에서는 최근 오픈소스로 공개됐더라도 벤처 투자받은 회사를 신뢰하는 것보다 나을 수 있음
  • 유용해 보임. 다음에 필요할 때 한번 써보겠음
    그런데 앞으로의 목표는 무엇인지 궁금함. 수익화를 생각하고 있는지?

    • 어릴 때 코딩은 취미였고, 몇 년 동안 직업으로도 해왔는데 어느 순간 내 것이라고 보여줄 만한 게 없다는 걸 깨달았음
      물론 다른 것도 수없이 시작했지만, 이건 실제로 유용하고 공개한 첫 프로젝트임. 세상에 내놓아서 기쁘고, 반응도 좋아서 기쁘고, 서버가 힘들어하지 않아서 정말 기쁘며, 앞으로 어디로 이어질지 기대됨
  • 그럼 이걸 클라우드에서는 어떻게 띄우는지 궁금함

    • 이건 설정 생성기일 뿐이지만 설정을 공유할 수 있음. 클라우드는 직접 준비해야 함
      로그인 후 생성된 예시를 보면 되는데, 허브 앤 스포크 네트워크라면 대략 이런 식임
      네트워크를 만들고, 장치를 추가해 이름과 라벨을 hub로 지정함. 그 장치를 본인에게 할당하지 말고 게스트 초대를 만들며 초대 이름도 hub로 둠
      서버나 최종 사용자 장치마다 장치를 더 추가하고 원하는 라벨을 붙임. 서버는 게스트 초대를 만들고, 최종 사용자는 게스트나 멤버로 만들면 됨. 게스트는 설정을 받기 위해 계정을 만들 필요가 없음
      연결에서는 “all to hub”와 “hub to all” 두 규칙을 추가함
      이러면 네트워크는 정의됐지만, 아직 이 장치들에 연결된 비밀 키나 공개 키가 없음. 이를 위해 인터페이스를 만들어야 함
      게스트 멤버를 만든 서버 각각에 대해 장치별 인터페이스를 만들고, 브라우저에서 키를 생성하거나 이미 가진 공개 키만 제공하면 됨
      허브 인터페이스에는 다른 장치들이 접속할 Endpoint URL이 필요함. 다른 인터페이스에는 Endpoint가 필요 없음
      최종 사용자 장치에는 초대 URL을 복사해 공유하면 됨. 사용자가 직접 인터페이스와 키를 생성할 수 있음
      이런 변경 중에도 모든 설정은 계속 동기화됨
      서버 장치로 돌아가서 각 인터페이스 URL을 초대 코드까지 포함해 curl하면 설정을 받을 수 있음. cron과 변경 실패 시 되돌릴 안전장치를 추가하면, 이론상 준비가 끝남