• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
가이드

셀프호스팅 VPN 끝판왕(?) Wireguard 기반 Netbird 구축하기.

달소 달소 1942

7

17

 

안녕하세요. 달소입니다.

 

자극적인 제목으로 어그로를 한번 끌어봤습니다 :)

 

이번에 구축해볼 프로젝트는 앞서소개해드렸던 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의 앱 설정이 필요합니다.

기본 설정가이드는 아래를 참고하시면되나 가장중요한 가이드에 빠져있는부분때문에 제가 삽질을 몇시간을했습니다..

 

 

 

image.png.jpg

image.png.jpg

image.png.jpg

image.png.jpg

 

Create external applications

 

image.png.jpg

 

Create service account

image.png.jpg

image.png.jpg

password는 따로 저장해주세요.

 

image.png.jpg

 

 Add service account to admin group

  • Navigate to authentik admin interface
  • Click Directory on the left menu, then click Groups
  • Click authentik Admins from list of groups and select Users tab at the top
  • Click Add existing user and click + button to add user
  • Select Netbird and click Add
  • Disable Hide service-accounts and verify if user Netbird is added to the group

image.png.jpg

이제 가이드에도 나오지않는 핵심 부분입니다.

 

In Authentik in Admin Interface->System->Tenants->authentik-default->Default flows->Device code flow to default-authenticator-totp

 

image.png.jpg

 

여기까지하면 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
          

 

image.png.jpg

:wq로 저장하고 난 뒤

sh netbird.sh로 실행시켜줍니다.

 

image.png.jpg

 

그다음 cd /netbird/infrastructure_files로 이동해줍니다.

 

image.png.jpg

 

여기부터 시작입니다.

환경변수 지정 -> managemenet 구성 -> docker-compose 실행순입니다.

 

 cp setup.env.example setup.env

 

내용은 아래내용에서 제 도메인이 들어간 부분만 직접 사용하실 netbird 도메인으로 변경해주시면되고

CLIENT_ID 와 IDP부분도 동일하게 작성하시면됩니다.

image.png.jpg

 

작성이 완료되면 ./configure.sh로 설정값을 완성합니다.

이걸로 docker-compose.yml이 생성되는데 바로 컨테이너를 up하면안되고 몇가지 수정이 필요합니다.

 

image.png.jpg

 

vi docker-compose.yml

 

변경 필요 부분. -443 주석

 

image.png.jpg

 

그리고 managemenet.json으로 가서 맨아래 "DeviceAuthorizationFlow": { 부분을 아래와같이 수정해주세

image.png.jpg

 

 

image.png.jpg

 

원래 이미지도 다운로드 받고하는데 시간이 좀 걸리는데 저는 여러번 다시받아서 ㅎㅎ..

 

뭐 아무튼 컨테이너가 정상적으로 올라오면 NPM설정으로 진행합니다.

 

NPM 리버스프록시 설정

netbird 서버의 ip가 192.168.1.18 이라는 가정하에 진행입니다.

image.png.jpg

 

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;
    }          

 

image.png.jpg




저는 netbird.dalso.org 도메인으로 했습니다.

접속을 시도하면 바로 authentik 인증페이지로 이동합니다.

 

image.png.jpg

 

그리고 인증을하고나면

image.png.jpg

 

짠...!!! 이거보려고 삽질을 몇일이나 한건지...

 

image.png.jpg

 

클라이언트 연결

윈도우의 경우 netbird 클라이언트를 설치하고 

 

image.png.jpg

 

settings로 가서 도메인을 입력해주시면됩니다.

image.png.jpg

 

그리고 connect를 하고나면 다시 authentik인증페이지가 열리는데 인증하면 netbird에 정상적으로 붙은것입니다.

 

image.png.jpg

 

신고공유스크랩
17
1등
nom 2023.07.05. 01:36

auth audience에는 뭘 넣어야 하나요?

헤놀에선 설치가 안되는가보네요ㅠㅠ envsubst is needed to run this script 라면서 안되네요.

SNFAIUWQ 2023.07.05. 05:47
SNFAIUWQ
뭔가 하긴했는데 이후에 인증후 접속해서 붙는거 까지는 확인했는데 ip 는 그대로네요 뭔가 추가설정을 해야하나요?
profile image
달소 글쓴이 2023.07.05. 10:37
SNFAIUWQ
같은서버에서 구동하려면 setup.env값을 수정해주셔야할것으로 보입니다.

기본적으로 ip가 바뀌지는 않고 WT라는 인터페이스가 생깁니다.
지정해놓은 routing대로 WT 통신을 진행합니다
SNFAIUWQ 2023.07.05. 16:19
달소
아 피어들끼리 통신하는 느낌이군요 setup env 어디를 수정해 줘야할지 감이 안잡히네요 ㅠㅠ
profile image
hilee0602 2023.07.05. 07:09
다중 NAT 환경에서 동작 할 수 있는건 Coturn(STUN/TURN) 덕분이군요. 한번 해봐야겠네요.
이해하면 2023.07.05. 09:06

몬가 엄청난것을 하셨는데 눈이 휘둥그레져서.. 나중에 쓸일이 있을때 좋은 정보가 될듯 합니다.

추가로 궁금한것이 있는데 위작업을 하는 목적이 다른곳에 있는 서버들을 한쪽으로 몰어 넣는 효과가 있는것이죠

B에 있는 서버를 A(집)에서 로컬 네트워크처럼 작동하게 할 수 있다는 의미 인가요?

profile image
달소 글쓴이 2023.07.05. 10:55
이해하면
네 비슷하게 사용이 가능합니다.
말씀하신대로 Site to Site VPN과 같은용도로도 사용할 수 있고
VPN처럼 외부망에서 내부서버로 접속을 할때 사용할수도있구요
profile image
달소 글쓴이 2023.07.05. 10:36
hilee0602
별도의 서버에 구축하시는걸 추천드립니다. or setup.env에서 443포트로 들어가있는부분을 수정해주시면됩니다

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story
번호 분류 제목 글쓴이 날짜 조회 추천
오픈소스 개인 구독 추적기 Wallos 7 달소 1일 전23:26 268 +2
질문 /var/www 폴더가 삭제되었습니다. ㅜ,.ㅜ 2 니속사정 3일 전20:42 274 +1
잡담 jellyfin 자원 진짜 안쓰네요 1 kmw_ 3일 전19:26 407 +1
3905 질문
normal
서버구축하자 4시간 전21:59 33 0
3904 후기
image
달소 15시간 전10:59 119 0
3903 질문
image
경호 15시간 전10:34 167 0
3902
image
달소 1일 전23:26 268 +2
3901 잡담
image
달소 1일 전22:44 126 0
3900 질문
normal
맛밥 2일 전16:13 192 0
3899 질문
normal
니속사정 3일 전20:42 274 +1
3898 잡담
image
kmw_ 3일 전19:26 407 +1
3897 잡담
image
ljr10 3일 전18:44 253 0
3896 질문
image
ljr10 3일 전12:45 177 0
3895 잡담
image
purndal 4일 전00:52 214 +2
3894 질문
normal
스키피95 5일 전00:07 140 0
3893 질문
normal
고심분투 5일 전17:10 244 0
3892 질문
image
경호 5일 전15:50 109 0
3891 질문
normal
경호 5일 전13:23 74 0
3890 잡담
image
기현 5일 전07:34 513 +2
3889 잡담
image
keiminem 6일 전13:12 593 0
3888 잡담
normal
달소 6일 전11:38 346 +2
3887 질문
image
EXP 24.05.02.23:48 101 0
3886 질문
normal
홍익 24.05.02.19:26 244 0