• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
질문

cloudflare zero trust에 tunnel, warp 연결하기 - 02 tunnel/warp연결하기

콜라 1140

3

3

헷갈리실까봐 미리 적어둡니다.

이 글에서 말하는 zero trust는 아무도 안믿는다는 zero trust의 개념이 아닙니다

cloudflare에서 제공해주는 서비스 중에 zero trust라는 이름의 서비스가 있습니다.

이 글에서 말하는 zero trust는 cloudflare의 서비스 이름을 지칭하고 있습니다.

이 글에서 언급되는 기능 중 일부 기능은 cloudflare의 zero trust에서만 되는 기능/서비스 일수 있다는 점은 인지해주세요.

 

구성도입니다.(그까이꺼 대충 keynote로 만들었습니다)

zero trust warp tunnel - 010 zero trust 구성도.png.jpg

이 글에서 세팅할 것은 크게 두가지입니다.

tunnel과 warp.

warp는 client 단말에 설치하여, client에서 나가는 트래픽을 제어합니다.

어떤 트래픽을 cloudflare를 거치도록 할 것인지, 어떤 트래픽을 일반(?) 통신으로 할 것인지 제어합니다.

 

tunnel은 server 단말에 설치해서 cloudflare cdn으로 들어온 패킷을 수신할 수 있게 해줍니다.

tunnel을 시작하면, tunnel이 cloudflare cdn에 접근하여 tunnel을 생성합니다.

그리고 이 tunnel로 송수신하기 때문에 포트를 열어둘 필요가 없습니다.

 

Client에서는 destination IP에 따라 cloudflare CDN으로 전달할 패킷을 결정하고(우리가 설정할 예정입니다),

cloudflared CDN에서도 destination IP에 따라 어떤 server의 tunnel로 전달할지 결정합니다(설정할 예정입니다)

 

0. 클라우드 플레어에 가입되어야 합니다.

도메인이 필요한지는 모르겠습니다...... 저는 이미 도메인이 있었어요.

 

1. 웹에서 제로 트러스트에 가입해야 합니다.

one.dash.cloudflare.com

 

2. 인증 수단을 추가합니다.

애플리케이션이나 warp 로그인, app launcher 등 여러가지에 로그인하는 방법을 추가합니다.

예를 들어 구글 로그인 인증을 추가하면 전세계의 모든 구글 계정으로 로그인 할수 있습니다

그래서 인증 수단 설중 후에 로그인 계정 제한을 따로 해줘야 합니다.

 

일단 수단을 추가합시다.

Cloudflare Zero Trust -> Settings -> Authentication -> Login methods를 추가합니다.

저는 깃헙이랑 구글 추가해봤는데, github가 훨씬 쉽네요.

게다가 구글 계정은 4,5개씩 로그인 되어있어서 구글 로그인을 선택한 이후에 계정을 선택해야하는데 반해

깃헙은 깃헙을 선택하면 바로 로그인이 됩니다.

+ 깃허브는 다른 사람 폰/공용 컴터에서 로그인할 일이 없습니다.

그래서 전 깃허브가 더 마음에 드네요.

 

3. 인증 제한을 설정해야 합니다.

각 앱, 각 로그인 페이지마다 로그인 가능한 계정을 설정해줄 수 있습니다.

다만 각 로그인 페이지 설정하는 곳이 다 따로 있다보니 저는 액세스 그룹을 만들어서 한 화면에서 관리하는 것을 선호합니다.

 

지금은 WARP로 로그인 할수 있는 계정을 제한할 것입니다.

Access -> Access Groups에 가서 그룹을 추가합니다.

그룹 이름은 대충 'WARP device enroll 정책'으로 해주죠.

 

Include 중에 하나라도 일치하고, Require를 모두 만족하면 로그인이 가능합니다.

 

4. WARP에 로그인 할 수 있는 계정을 제한합니다

방금 만든 access group으로 제한할 거예요.

Settings -> WARP Client > Device enrollment permissions (Manager 버튼) -> Rules -> Add a rule

rule 이름은 그까이꺼 대충, enroll rule 같이 지어주고, include는 설정하지 않고 내려갑니다.

그러면 Assign a group이 있을건데, 여기서 조금 전에 만들어준 그룹을 include로 설정해줍니다.

image.png.jpg

5. client를 warp에 연결합니다.

폰 pc 아무거나 좋습니다.

1.1.1.1 warp 앱을 설치하고(os에 따라 앱 이름은 1.1.1.1이거나 warp일수 있습니다)

계정 설정에서 zero trust 로그인을 합니다.

 

팀 이름을 적으면 로그인 화면이 나오는데, access 그룹에 포함되는 계정으로 로그인 합니다.

 

6. warp의 라우팅을 설정해야 합니다.

Settings -> WARP Client -> Device settings -> Profile settings -> Default -> Config

에서 원하는대로 설정하신 후에, Split Tunnels를 설정하러 갑니다.

 

보면 기본적으로 private IP가 전부 exclude 되어있습니다.

local 통신은 warp로 전달이 안된다는 것인데, server와 ssh나 smb로 연결하려면 당연히 warp로 전달이 되어야 겠죠.

oracle cloud나 azure, nas 들의 private IP에 해당하는 IP를 삭제하여 warp로 전달되도록 해주세요.

 

 

 

이제 서버 tunnel 설정입니다.

7.1 DEB/RPM 패키지 매니저 기반

Access -Tunnels 에서 create tunnel을 누릅니다.

여기에서 Debian, Redhat을 누르고 나오는 코드를 그대로 쓰지 마세요.

업데이트 하려면 RPM,deb를 받아서 설치해줘야 합니다.

 

repository 쓰면 자동 업데이트 가능하니까 그렇게 하자구요.

 

Debian, Redhat 누르면 나오는 코드 중에

오른쪽의 이미 설치된 머신에서 사용하는 코드를 사용할것입니다.

 

https://pkg.cloudflare.com/index.html
여기에 가면 OS별로 레포 추가 방법이 있습니다.

rhel 8  방법으로 fedora에서 설치/업데이트가 잘 되네요.

 

그러고 나서 설치 합니다

dnf install cloudflared / apt install cloudflared

 

마지막으로 tunnel에 연결합니다.

create tunnel했을 때 나온 코드를 사용합니다.

sudo cloudflared service install <token>

 

7.2 Windows, mac docker

docker는 네트워크를 host/bridge로 하여 host를 위한 reverse proxy와 docker용 reverse proxy를 구분할수도 있습니다.

wind, mac, docker는 그냥 코드 복사 붙여넣기 합시다.

mac은  brew repository를 줘놓고, ubuntu랑 rhel 리눅스는 왜 deb, rpm 코드를 줬는지 모르겠네요.

 

7.3 systemd/initd 사용 가능한 linux

alpine같은 리눅스들은 rpm, deb 를 설치할 수 없습니다.

하지만 systemd는 있죠.

 

cloudflared가 systemd service를 생성하는 명령을 제공하니까 binary를 받아서 실행하면 됩니다.

단, x86만 바이너리를 제공하므로, 만약 비 x86이라면.. 빌드 해서 설치해야 합니다.

 

Settings -> Downloads 가장 하단에 cloudflared binary를 받을 수 있습니다.

링크를 복사합니다.

 

큐냅도 이 방식으로 되는 것 같은데..
펌 업 후에도 남아있을지 모르겠습니다.
저는 그냥 boot script로 구현했습니다.

curl -O cloudflared '<cloudflared 바이너리 링크>'
chmod +x cloudflared
sudo ./cloudflared service install <token>

으로 설치하게 됩니다.

token은 터널 생성하면 나오는 토큰을 이용하면 되요!

 

 

7.4 systemd 불가능한 리눅스

시놀, 큐냅에 사용합니다.

update하고 나면 안될것 같아서 스크립트로 따로 구현은 해두었습니다.

 

얘도 binary 파일을 다운로드 합니다.

 

curl -O cloudflared '<cloudflared 바이너리 링크>'

chmod +x cloudflared

 

다음 명령으로 실행합니다.

cloudflared --autoupdate-freq 24h0m0s tunnel run --token <token>

 

시작 스크립트에 넣어줘야겠지요?

service, init.d 등등..

qnap은 시작 스크립트에, 시놀로지는 스케줄러에 넣으면 되겠습니다.

 

 

 

 

8. tunnel에 private network를 설정해줍니다.

이 설정이 cloudflare에서 tunnel을 통해 server로 갈 패킷을 지정해주는 단계입니다.

zero trust warp tunnel - 010 zero trust 구성도.png.jpg

Access -> tunnels -> <profile> -> Private Network에

cloudflared를 설치한 host의 private IP를 적어주세요.

 

이제 warp에 연결한 client에서 private IP로 서버에 접속 되는 것을 확인할 수 있습니다.

 

 

 

9. cloudflared를 역프록시로!

먼저 cloudflare에서 dns를 없애야 합니다.

zero trust에서 dns가 추가되고 제어되어야 하기 때문입니다.

 

dns에서 제거한 후에, tunnel 설정의 Public Hostname으로 돌아옵니다

Access -Tunnels -> <profile config> -> Public Hostname

 

Add a public hostname을 누르고 조금 전에 지운 subomain을 추가합니다.

client나 cloudflare서버가 아니라, cloudflared 입장에서 Service를 설정해야 합니다.

cloudflaredㅘ nginx가 같은 host에서 실행중이라면 localhost:80으로 입력하시면 됩니다.

신고공유스크랩
3
profile image 1등
달소 2023.04.08. 23:42
오,, 방식이 정말 신기하네요. 클플에서 아예 프록시 역할을해주는거군요??
커넥션을 클라/서버 하나씩 연결해놓고 서버입장에서는 리버스커넥션으로 요청을 받나보네요
신기합니다...하핳
이런것도 오픈소스로 공개해주면 참 좋겠네요
profile image 2등
hilee0602 2023.04.10. 10:15
오호~ Client에서 config 파일 만들어서 하는 방식이 아니라 Cloudflare 사이트에서 직접 구성해서 설정하는 방식이군요~

Client에서 config 파일 만들어서 구성하니 오히려 Cloudflare 사이트에선 관리가 안돼서 CNAME 등록해 줘야 하는데 사이트 자체에서 구성이 가능하면 오히려 편할 것 같군요!

있다가 한번 해봐야겠네요~
콜라 글쓴이 2023.04.10. 11:42
hilee0602
전 private network만 컨피그로 해보고 다 대시보드에서 해서 몰랐네요.
컨피그로 하면 뭔가 추가하거나 바꾸려고 할때 ssh 접속해야하니까 바로 폐기(?)했었거든요.

몰랐던 내용이네요.

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

취소 댓글 등록

cmt alert

신고

"님의 댓글"

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

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story
번호 제목 글쓴이 날짜 조회 추천
서브 미니PC Proxmox로 집합시켰습니다.. 12 EXP 4일 전21:58 472 +1
나만의 구독 관리하기 Wallos 서버 구축하기. 8 달소 24.05.16.17:19 377 +2
네트워크 구성도와 상세 스펙 공유 3 맘맘 24.05.16.16:17 370 +1
3750
image
콜라 23.04.07.13:09 1135 +5
3749
normal
Jasons 23.08.06.22:47 630 +4
3748
normal
올리고당 21.07.26.10:00 1354 +4
3747
normal
배뚱이 23.01.09.12:47 800 +3
3746
normal
돼지족장 22.04.27.17:17 311 +3
3745
normal
하늘위의하늘 22.03.15.14:35 150 +3
3744
normal
강프로 22.01.26.01:35 339 +3
3743
image
akrsoTale 23.06.27.20:19 674 +3
3742
image
달소 21.04.24.14:41 1213 +3
image
콜라 23.04.07.15:57 1140 +3
3740
image
달소 21.04.23.12:51 6160 +3
3739
normal
딩구링 22.03.25.12:34 236 +3
3738
image
달소 22.06.26.00:19 645 +3
3737
normal
올리고당 21.06.23.17:32 1730 +3
3736
normal
greymin 22.05.31.19:17 808 +3
3735
normal
올리고당 21.07.12.16:42 201 +3
3734
normal
펜타네스트 22.04.15.16:30 622 +3
3733
image
Tfv449XWCX9s 22.05.08.00:59 2701 +3
3732
normal
허줩 22.03.22.09:17 230 +2
3731
normal
섭린이 22.03.21.15:28 235 +2