오픈소스 Wireguard 기반 대안 OpenVPN AS

안녕 /r/wireguard,

나는 OpenVPN Access Server의 간단한 오픈소스 WireGuard 기반 대안을 만들었어.

5e3lml54daq71
이것은 WireGuard 구성과 이그레스 방화벽 관리를 위한 자가 호스팅 Linux 패키지야. 기본 라우트, NAT/가면, 피어 구성을 자동으로 설정하며, 이메일/비밀번호 인증 계층으로 보호돼 있어.

Elixir/Phoenix로 웹 앱, WireGuard 관리자, 방화벽 관리자 세 가지 구성요소로 만들어졌어. 앞으로 각 컴포넌트를 별도 호스트에서 실행할 수 있도록 설계했지만, 현재는 모든 앱이 같은 호스트에서 실행된다고 가정하고 있어.

Chef Omnibus로 패키지화되어 있어서 실행 시간에 필요한 의존성 모두 포함돼 있어. 필요한 것은 최신 Linux 커널(4.19 이상)과 WireGuard 모듈이야.

신규 VPS에서 몇 분 만에 설정할 수 있어:

  1. 릴리스 다운로드
  2. sudo dpkg -i firezone*.deb 또는 sudo rpm -i firezone*.rpm 설치
  3. 관리자 계정 생성: sudo firezone-ctl create_admin
  4. https://<서버 FQDN>의 웹 UI에 관리자 자격증명으로 로그인

단기적으로 싱글 사인온, LDAP 연동, 역할 기반 액세스 컨트롤 등의 사용자 관리 기능을 추가하려고 해; 이 게시물에 피드백을 위해 올리게 되었어.

감사해!

안녕, 좋은 일했어!

설정 변경, 예를 들어 기기별 구성 조정을 할 수 있나요?

이거 정말 멋지네요! 커뮤니티와 공유해줘서 고마워요.

물론이야! 이메일/비밀번호 인증이 있고 곧 2단계 인증도 추가할 거야.

설치 후 CLI 유틸리티 sudo firezone-ctl create_admin로 관리자를 생성할 수 있어.

지지해줘서 고마워 :-).

현재는 기기 이름만 수정 가능하지만, 다른 필드도 수정 가능하게 할 이유는 없어.

특히 어떤 필드를 생각하고 있었나요?

곧 작업 시작할게! :slight_smile:

u/Digital_Voodoo

이 기능이 구현됐어 – 기기를 만든 후 DNS 서버, 허용 IP, IPv4/6 주소의 마지막 옥텟을 수정하는 것도 가능해 :-).

아니, 특별히 다른 필드는 없어, IP를 제외하고. 내 개발기기들은 LAN이든 WG든 같은 종료점을 갖고 싶거든 (192.168.10.ABC10.2.8.ABC), 일관성을 위해서.

또한 '신규 VPS에서’라는 언급이 있는데, 이미 실행 중인 VPS에 설치할 수 있는지? 그리고 (이것은 조금 까다롭겠지만), 기존 WG 설치를 인식하고 관리할 수 있는지도 궁금해.

마지막으로 (약속할게, ㅋㅋ), 앞으로 도커화하는 것도 고려 중이야?

와… 대단해! :smiley:
감사하고, 이번 주말에 VPS 또는 Pi가 비면 시도해볼게.

참고로, 다른 사람도 이 기능 요청을 했어. 이에 대한 작업 논의는 여기서 진행되고 있어: https://github.com/firezone/firezone/issues/259

아, 오해했어. 지금 무슨 말인지 알겠어.

이것은 포획 웹 포털을 통해 구현 가능해, 사용자가 로그인할 때까지 트래픽을 차단하는 방식으로. 곧 추가하는 것을 검토할게. 피드백 고마워!

아하, 알겠어 – 네, IP는 너무 큰 어려움 없이 수정 가능하도록 할 수 있어. 기본적으로 10.3.2 접두사를 사용하며, 마지막 옥텟은 1부터 시작하는 간단한 증가 시퀀스야.

기존 VPS에 설치하는 것도 가능해. 다만, 기존 방화벽 규칙이 방해할 수 있음을 유념해야 해 – 특히 포워드 또는 NAT 규칙.
IPv4 및 IPv6 전달도 가능하게 해줌, 참고로.

흥미로운 기능은 기존 WireGuard를 가져와서 모든 디바이스와 WireGuard 인터페이스를 생성하는 수입 기능일 수 있어 – 유용할까?

도커? 그건 이제 시대에 뒤쳐졌어. Open Container Images, Singularity, Podman이 미래야.

도커 관련 어떤 도움이 필요하지? 더 구체적으로, 도커 작업을 이미 시작했나요?

도커 관련해서는 두 가지가 필요하다고 생각해:

  • 이미지를 빌드하는 Dockerfile. 주로 Elixir/Phoenix 웹 앱과 프론트엔드 자산을 컴파일하는 것.

  • 컨테이너 내부에서 호스트 방화벽과 라우팅 테이블을 제어하는 능력. IPv4/IPv6 전달, NAT/가면, (가능하면) 이그레스 필터링을 forward 체인에서 설정해야 해. 현재는 nft 사용자 공간 유틸리티를 묶어 Linux netfilter 시스템을 제어하지만, Docker 컨테이너 내에서 이것이 얼마나 어려울지 조사하지 않았어. 다행히 가능하다고 보여져: https://stackoverflow.com/questions/30169013/docker-modifying-iptables-for-host-from-container

내 경험으로는 #1은 별 문제 없이 할 수 있지만, #2는 좀 더 시간이 걸릴 수 있어.

nft에 익숙하지 않아서 구경해봐야겠어. 이후에 더 생각을 정리해서 답변할게.

일부 예비 조사에 따르면, nft은 20.10 우분투에서도 지원될 예정이야 (내가 아직 잘 몰라서). 그뿐 아니라, nft는 별칭도 지원해서 "-nft"를 iptables 명령의 접미사로 사용할 수 있어 동일한 기능을 수행할 수 있어. 더 폭넓게 지원하려면 nft가 없을 때 iptables를 대체하는 것도 가능하고, Docker의 cap_addNET_ADMINSYS_MODULE과 함께 사용하는 방법도 있어. 또는 호스트 네트워킹을 사용해서 컨테이너에서 처리하는 것도 고려할 수 있지?

그래, nft의 좋은 점은 커널과 분리되어 사용자 공간에서도 실행 가능하다는 거야. CAP_NET_ADMIN 권한만 부여하면 돼.

좋아, 이 이슈를 추가해서 컨테이너 지원 작업을 추적할게.