안녕하세요. 달소입니다.
자극적인 제목으로 어그로를 한번 끌어봤습니다 🙂
이번에 구축해볼 프로젝트는 앞서소개해드렸던 Netbird라는 VPN 프로젝트입니다.
정말 몇일을 이것때문에 소비했는지,, 가이드가있긴한데 2%가 부족해서 삽질도 많이하고 고생을 많이했습니다.
(글쓰는데도 하루가 꼬박,,,)
난이도가 쉬운편은 아니지만 구축하면 왜 Wireguard 상위호환인지 금방 깨달을 수 있습니다.
간단한 특징은 아래와 같습니다.
- P2P 통신 가능
- vpn통신 가능
- 연결시 내부 구축된 SSO 서버와의 인증 후 연결
- 중계서버를 이용한 Site to Site 구축 가능, 내부 ACL 통제 가능
- 자체 호스팅 가능
- Wireguard 커널 기반의 VPN 통신으로 속도 우수
이렇게 홈서버에 자체구축을 해놓는다면 Oracle Cloud나 기타 클라우드에서도 간단하게 내부망과 연결이 가능하고 연동하여 사용 할 수 있습니다.
이해를 돕기위해 구축 후 찍어본 영상입니다.
Windows 연결
SSO를 통한 VPN 연결 + 내부 연동 서버로의 ssh open(터미널 문제로 잘안보임 ㅠ) + 연동 테스트(ping)
Linux 연동
Linux와 연동을할때도 SSO 인증을 통해 연동이 가능합니다.
사전 준비사항
Netbird의 경우 Authentik 인증서버를 통해서 인증을 진행하기때문에 Authentik이 미리 구축되어있어야 합니다.
Netbird 로 사용할 도메인 ex) netbird.dalso.org
Reverse Proxy : 현재는 NPM에서만 테스트하였습니다. nginx도 가능합니다.
UDP 포트오픈 3478, 49152-65535
- Coturn은 STUN/TURN 프로토콜을 사용하는 릴레이에 사용됩니다. 동적 릴레이 연결을 위해 수신 포트(UDP 3478)와 포트 범위(UDP 49152-65535)가 필요합니다. 이러한 설정은 설치 파일에서 기본값으로 설정되지만 요구 사항에 맞게 구성할 수 있습니다.
Authentik 설정
Netbird 구축에 앞서 Authentik의 앱 설정이 필요합니다.
기본 설정가이드는 아래를 참고하시면되나 가장중요한 가이드에 빠져있는부분때문에 제가 삽질을 몇시간을했습니다..
Create service account
password는 따로 저장해주세요.
Add service account to admin group
- Navigate to authentik admin interface
- Click
Directory
on the left menu, then clickGroups
- Click
authentik Admins
from list of groups and selectUsers
tab at the top - Click
Add existing user
and click+
button to add user - Select
Netbird
and clickAdd
- Disable
Hide service-accounts
and verify if userNetbird
is added to the group
이제 가이드에도 나오지않는 핵심 부분입니다.
In Authentik in Admin Interface->System->Tenants->authentik-default->Default flows->Device code flow to default-authenticator-totp
여기까지하면 Authentik 셋팅은 완료되었습니다.
여기서 기혹해야할건 Client Token과 서비스계정 pw입니다.
Netbird 구축하기
저는 /data/netbird라는 폴더로 만들것이기때문에 비슷하게 만드시려면 아래 과정들을 따라해주시면됩니다.
mkdir /data
cd /data
vi netbird.sh
#!/bin/bash REPO="https://github.com/netbirdio/netbird/" # this command will fetch the latest release e.g. v0.8.7 LATEST_TAG=$(basename $(curl -fs -o/dev/null -w %{redirect_url} ${REPO}releases/latest)) echo $LATEST_TAG # this comman will clone the latest tag git clone --depth 1 --branch $LATEST_TAG $REPO
:wq로 저장하고 난 뒤
sh netbird.sh로 실행시켜줍니다.
그다음 cd /netbird/infrastructure_files로 이동해줍니다.
여기부터 시작입니다.
환경변수 지정 -> managemenet 구성 -> docker-compose 실행순입니다.
cp setup.env.example setup.env
내용은 아래내용에서 제 도메인이 들어간 부분만 직접 사용하실 netbird 도메인으로 변경해주시면되고
CLIENT_ID 와 IDP부분도 동일하게 작성하시면됩니다.
작성이 완료되면 ./configure.sh로 설정값을 완성합니다.
이걸로 docker-compose.yml이 생성되는데 바로 컨테이너를 up하면안되고 몇가지 수정이 필요합니다.
vi docker-compose.yml
변경 필요 부분. -443 주석
그리고 managemenet.json으로 가서 맨아래 “DeviceAuthorizationFlow”: { 부분을 아래와같이 수정해주세
원래 이미지도 다운로드 받고하는데 시간이 좀 걸리는데 저는 여러번 다시받아서 ㅎㅎ..
뭐 아무튼 컨테이너가 정상적으로 올라오면 NPM설정으로 진행합니다.
NPM 리버스프록시 설정
netbird 서버의 ip가 192.168.1.18 이라는 가정하에 진행입니다.
Advanced에 가서 아래 내용을 넣어주세요
location /signalexchange { grpc_pass grpc://192.168.1.18:10000; } location /management { grpc_pass grpc://192.168.1.18:443; } location /api { proxy_pass http://192.168.1.18:443; }
저는 netbird.dalso.org 도메인으로 했습니다.
접속을 시도하면 바로 authentik 인증페이지로 이동합니다.
그리고 인증을하고나면
짠…!!! 이거보려고 삽질을 몇일이나 한건지…
클라이언트 연결
윈도우의 경우 netbird 클라이언트를 설치하고
settings로 가서 도메인을 입력해주시면됩니다.
그리고 connect를 하고나면 다시 authentik인증페이지가 열리는데 인증하면 netbird에 정상적으로 붙은것입니다.