<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home Server on Joonlog</title><link>https://joonlog.github.io/tags/home-server/</link><description>Recent content in Home Server on Joonlog</description><generator>Hugo -- gohugo.io</generator><language>ko-kr</language><lastBuildDate>Tue, 19 May 2026 09:00:00 +0900</lastBuildDate><atom:link href="https://joonlog.github.io/tags/home-server/index.xml" rel="self" type="application/rss+xml"/><item><title>Obsidian Custom 설정</title><link>https://joonlog.github.io/p/obsidian-custom-%EC%84%A4%EC%A0%95/</link><pubDate>Tue, 19 May 2026 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/obsidian-custom-%EC%84%A4%EC%A0%95/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Obsidian으로 이관한 뒤, 실제 사용에 맞게 폴더 노트와 정렬 방식을 맞춘 기록&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Notion에서 Obsidian으로 넘어온 이유는 이전 글에 따로 정리했다. 이 글은 그 다음 단계에 가깝다.&lt;/p&gt;
&lt;p&gt;Obsidian으로 넘어온 뒤 실제로 쓰려면 노트 구조를 먼저 정해야 했다. 파일만 계속 쌓이면 시간이 지날수록 찾기 어렵고, 나중에 블로그 글로 옮길 때도 정리가 번거로워진다.&lt;/p&gt;
&lt;p&gt;그래서 폴더 노트를 기본 단위로 잡고, 첨부 파일 위치와 파일 탐색기 정렬 방식까지 같이 맞췄다. 이 글에서는 동기화 설정이 아니라, Obsidian 안에서 노트를 어떤 구조로 관리할지에만 집중한다.&lt;/p&gt;
&lt;h2 id="1-구성-방향"&gt;1. 구성 방향
&lt;/h2&gt;&lt;p&gt;전체 방향은 단순하다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;노트는 폴더 노트 구조로 관리한다.&lt;/li&gt;
&lt;li&gt;첨부 파일은 각 노트의 &lt;code&gt;attachments&lt;/code&gt; 폴더에 둔다.&lt;/li&gt;
&lt;li&gt;상위 노트의 링크 순서를 하위 노트 정렬 순서로 사용한다.&lt;/li&gt;
&lt;li&gt;정렬 파일은 자동으로 갱신한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;노트는 오래 쌓일수록 처음 정한 구조의 영향을 크게 받는다. 그래서 처음에는 조금 번거롭더라도 구조를 일관되게 가져가는 편이 낫다고 판단했다.&lt;/p&gt;
&lt;h2 id="2-폴더-노트-구조"&gt;2. 폴더 노트 구조
&lt;/h2&gt;&lt;p&gt;노트는 가능한 한 아래 형태로 만든다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;페이지명/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── 페이지명.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── attachments/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;예를 들어 &lt;code&gt;홈서버&lt;/code&gt;라는 주제가 있으면 &lt;code&gt;홈서버.md&lt;/code&gt; 파일만 하나 두는 것이 아니라, &lt;code&gt;홈서버/홈서버.md&lt;/code&gt; 형태로 둔다. 이미지나 캡처 파일은 같은 폴더의 &lt;code&gt;attachments&lt;/code&gt; 아래에 저장한다.&lt;/p&gt;
&lt;p&gt;이렇게 하면 한 주제에 대한 본문과 첨부 파일을 한 단위로 다룰 수 있다. 나중에 글로 옮기거나, 다른 주제로 분리하거나, 오래된 자료를 정리할 때도 판단 기준이 명확해진다.&lt;/p&gt;
&lt;h2 id="3-사용하는-플러그인"&gt;3. 사용하는 플러그인
&lt;/h2&gt;&lt;p&gt;현재 구조에서 핵심이 되는 플러그인은 아래와 같다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;플러그인&lt;/th&gt;
&lt;th&gt;용도&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Folder Notes&lt;/td&gt;
&lt;td&gt;폴더와 같은 이름의 대표 노트를 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Templater&lt;/td&gt;
&lt;td&gt;새 폴더 노트 생성 자동화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom File Explorer Sorting&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sortspec.md&lt;/code&gt; 기준으로 파일 탐색기 정렬&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dataview&lt;/td&gt;
&lt;td&gt;메타데이터 기반 목록이나 대시보드 작성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Importer&lt;/td&gt;
&lt;td&gt;외부 자료를 Obsidian으로 가져올 때 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;목차는 별도 플러그인을 추가하지 않고, Obsidian 기본 기능인 개요(Outline)를 먼저 사용하기로 했다. 데스크톱에서는 떠 있는 목차가 편할 수 있지만, 모바일에서는 화면을 가릴 가능성이 있어서 기본 기능으로 시작하는 편이 더 안정적이다.&lt;/p&gt;
&lt;h2 id="4-새-폴더-노트-생성"&gt;4. 새 폴더 노트 생성
&lt;/h2&gt;&lt;p&gt;새 노트를 만들 때마다 폴더, 본문 파일, 첨부 파일 폴더를 직접 만드는 것은 번거롭다. 그래서 Templater로 새 폴더 노트 생성 템플릿을 만들어 사용한다.&lt;/p&gt;
&lt;p&gt;동작 흐름은 아래와 같다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;새 노트 이름 입력&lt;/li&gt;
&lt;li&gt;현재 위치에 같은 이름의 폴더 생성&lt;/li&gt;
&lt;li&gt;폴더 안에 같은 이름의 &lt;code&gt;.md&lt;/code&gt; 파일 생성&lt;/li&gt;
&lt;li&gt;&lt;code&gt;attachments&lt;/code&gt; 폴더 생성&lt;/li&gt;
&lt;li&gt;현재 노트에 새 노트 wikilink 삽입&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;결과적으로 아래 구조가 자동으로 만들어진다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;입력한 이름/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── 입력한 이름.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── attachments/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;이 방식의 장점은 상위 노트에서 하위 노트 링크를 먼저 만들고, 그 링크 순서를 그대로 정렬 기준으로 사용할 수 있다는 점이다.&lt;/p&gt;
&lt;h2 id="5-상위-노트의-링크-순서를-정렬-기준으로-사용"&gt;5. 상위 노트의 링크 순서를 정렬 기준으로 사용
&lt;/h2&gt;&lt;p&gt;Obsidian에서 파일 탐색기 순서를 직접 관리하다 보면, 실제 글의 흐름과 파일 목록의 순서가 어긋나는 경우가 많다.&lt;/p&gt;
&lt;p&gt;그래서 상위 노트에 적은 wikilink 순서를 기준으로 하위 노트의 탐색기 순서를 맞추도록 했다.&lt;/p&gt;
&lt;p&gt;예를 들어 상위 노트에 아래처럼 적으면,&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[[첫 번째 글]]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[[두 번째 글]]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[[세 번째 글]]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;하위 폴더의 &lt;code&gt;sortspec.md&lt;/code&gt;도 같은 순서로 만들어진다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;sorting-spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; 첫 번째 글
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; 두 번째 글
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; 세 번째 글&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;이렇게 하면 문서 안에서 보는 목차 순서와 파일 탐색기에서 보는 순서가 같아진다.&lt;/p&gt;
&lt;h2 id="6-sortspecmd-자동-갱신"&gt;6. sortspec.md 자동 갱신
&lt;/h2&gt;&lt;p&gt;Custom File Explorer Sorting은 &lt;code&gt;sortspec.md&lt;/code&gt;를 기준으로 파일 탐색기 순서를 바꿔준다. 문제는 이 파일을 매번 직접 관리하기 어렵다는 점이다.&lt;/p&gt;
&lt;p&gt;그래서 서버에서 작은 자동화 스크립트를 돌려 폴더 노트가 수정될 때마다 &lt;code&gt;sortspec.md&lt;/code&gt;를 자동으로 갱신하도록 했다.&lt;/p&gt;
&lt;p&gt;동작 방식은 아래와 같다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;일정 주기로 vault의 폴더 노트를 확인한다.&lt;/li&gt;
&lt;li&gt;폴더 이름과 같은 이름의 &lt;code&gt;.md&lt;/code&gt; 파일을 폴더 노트로 판단한다.&lt;/li&gt;
&lt;li&gt;폴더 노트 안의 wikilink를 읽는다.&lt;/li&gt;
&lt;li&gt;실제 존재하는 하위 노트나 폴더만 정렬 대상에 넣는다.&lt;/li&gt;
&lt;li&gt;링크에 없는 하위 항목은 알파벳순으로 뒤에 붙인다.&lt;/li&gt;
&lt;li&gt;정렬할 하위 항목이 없으면 빈 &lt;code&gt;sortspec.md&lt;/code&gt;를 남기지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;정렬 파일은 아래 형식을 사용한다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;sorting-spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; 항목1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; 항목2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;sorting-spec: |&lt;/code&gt;만 있고 아래 항목이 비어 있으면 플러그인에서 파싱 문제가 생길 수 있다. 그래서 하위 항목이 없는 폴더에는 &lt;code&gt;sortspec.md&lt;/code&gt;를 만들지 않는 쪽으로 정리했다.&lt;/p&gt;
&lt;h2 id="7-정리-기준"&gt;7. 정리 기준
&lt;/h2&gt;&lt;p&gt;Obsidian에는 정리된 글뿐 아니라 임시 메모, 복사해온 자료, 나중에 볼 링크도 같이 들어온다. 다만 모든 자료를 오래 보관할 필요는 없다.&lt;/p&gt;
&lt;p&gt;복사해온 자료나 오래된 도구에 묶인 자료가 현재 작업 흐름과 맞지 않으면 정리 대상이다. 특히 다시 볼 가능성이 낮고 직접 정리한 내용도 아니라면 따로 보관하기보다 삭제하는 편이 낫다.&lt;/p&gt;
&lt;p&gt;반대로 직접 작업하면서 얻은 설정, 문제 해결 과정, 운영 기준은 최대한 설명형 글로 남긴다. 나중에 블로그 글로 옮길 수 있도록 처음부터 공개 가능한 문장 구조에 가깝게 작성하는 편이 좋다.&lt;/p&gt;
&lt;h2 id="8-정리"&gt;8. 정리
&lt;/h2&gt;&lt;p&gt;이번 설정의 핵심은 Obsidian을 단순히 파일을 저장하는 공간으로 두지 않고, 오래 쓸 수 있는 노트 구조로 맞추는 것이다.&lt;/p&gt;
&lt;p&gt;폴더 노트로 주제 단위를 만들고, 상위 노트의 링크 순서를 정렬 기준으로 사용하고, 반복되는 정렬 파일 관리는 자동화했다.&lt;/p&gt;
&lt;p&gt;아직 완성된 구조라기보다는 계속 다듬어가는 운영 방식에 가깝다. 그래도 폴더 구조, 첨부 파일 위치, 정렬 기준이 정해져 있으니 노트가 늘어나도 덜 무너지는 형태가 됐다.&lt;/p&gt;</description></item><item><title>Syncthing으로 Obsidian vault 동기화하기</title><link>https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/</link><pubDate>Sun, 03 May 2026 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Syncthing으로 홈서버 LXC ↔ Windows ↔ 모바일 vault 동기화&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="0-구조"&gt;0. 구조
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Windows (SyncTrayzor)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↕
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mgt LXC (Syncthing, 허브) ← Claude Code가 직접 접근
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↕
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;모바일 (Syncthing-Fork)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;모든 기기가 mgt LXC를 허브로 동기화한다. LXC는 항상 켜져 있기 때문에 각 기기가 켜지는 순간 동기화된다.&lt;/p&gt;
&lt;h2 id="1-lxc에-syncthing-설치"&gt;1. LXC에 Syncthing 설치
&lt;/h2&gt;&lt;p&gt;Rocky Linux 9는 EPEL 저장소를 통해 설치한다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dnf install -y epel-release
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dnf install -y syncthing
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; --now syncthing@root
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="2-lxc-syncthing-웹-ui-접근"&gt;2. LXC Syncthing 웹 UI 접근
&lt;/h2&gt;&lt;p&gt;Syncthing 웹 UI는 기본적으로 &lt;code&gt;localhost:8384&lt;/code&gt;에서만 열린다. SSH 포트 포워딩으로 로컬에서 접근한다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh -L 8384:localhost:8384 mgt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;브라우저에서 &lt;code&gt;http://localhost:8384&lt;/code&gt; 접속&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing01.png"
width="1482"
height="616"
srcset="https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing01_hu_56b3d30042e4030.png 480w, https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing01_hu_6b32321ad223b5e6.png 1024w"
loading="lazy"
alt="ObsidianSyncthing01.png"
class="gallery-image"
data-flex-grow="240"
data-flex-basis="577px"
&gt;&lt;/p&gt;
&lt;h2 id="3-windows에-synctrayzor-설치"&gt;3. Windows에 SyncTrayzor 설치
&lt;/h2&gt;&lt;p&gt;SyncTrayzor는 Windows용 Syncthing 래퍼로, 트레이 아이콘으로 백그라운드 실행된다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;설치 후 &lt;code&gt;동작 → 기기 아이디 보기&lt;/code&gt; 에서 Windows Device ID 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing02.png"
width="1083"
height="711"
srcset="https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing02_hu_bb97f7eefd4a22cf.png 480w, https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing02_hu_3a0834b3359d4383.png 1024w"
loading="lazy"
alt="ObsidianSyncthing02.png"
class="gallery-image"
data-flex-grow="152"
data-flex-basis="365px"
&gt;&lt;/p&gt;
&lt;h2 id="4-기기-페어링"&gt;4. 기기 페어링
&lt;/h2&gt;&lt;p&gt;LXC 웹 UI에서 &lt;strong&gt;다른 기기 추가&lt;/strong&gt; 클릭 → Windows Device ID 입력 → 저장&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing03.png"
width="1428"
height="435"
srcset="https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing03_hu_875362f46840e870.png 480w, https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing03_hu_83cf3404b8e360ea.png 1024w"
loading="lazy"
alt="ObsidianSyncthing03.png"
class="gallery-image"
data-flex-grow="328"
data-flex-basis="787px"
&gt;&lt;/p&gt;
&lt;p&gt;Windows SyncTrayzor에 수락 요청이 뜨면 수락한다.&lt;/p&gt;
&lt;h2 id="5-폴더-공유-설정"&gt;5. 폴더 공유 설정
&lt;/h2&gt;&lt;p&gt;LXC 웹 UI에서 &lt;strong&gt;폴더 추가&lt;/strong&gt; 클릭&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing04.png"
width="1421"
height="430"
srcset="https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing04_hu_926a912650687b85.png 480w, https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing04_hu_13a26b62177a0173.png 1024w"
loading="lazy"
alt="ObsidianSyncthing04.png"
class="gallery-image"
data-flex-grow="330"
data-flex-basis="793px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;일반 탭: 폴더 경로 입력 (&lt;code&gt;/root/obsidian&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;공유 탭: Windows 기기 체크&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing05.png"
width="1304"
height="416"
srcset="https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing05_hu_b85263dcc39a3e77.png 480w, https://joonlog.github.io/p/syncthing%EC%9C%BC%EB%A1%9C-obsidian-vault-%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0/ObsidianSyncthing05_hu_7ea8a1f293962042.png 1024w"
loading="lazy"
alt="ObsidianSyncthing05.png"
class="gallery-image"
data-flex-grow="313"
data-flex-basis="752px"
&gt;&lt;/p&gt;
&lt;p&gt;저장하면 Windows SyncTrayzor에 폴더 수락 요청이 뜬다. 수락 시 Windows vault 경로를 지정한다.&lt;/p&gt;
&lt;h2 id="6-모바일-연동"&gt;6. 모바일 연동
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Android: &lt;strong&gt;Syncthing-Fork&lt;/strong&gt; 설치&lt;/li&gt;
&lt;li&gt;동일하게 Device ID 교환 후 페어링&lt;/li&gt;
&lt;li&gt;폴더 공유 설정에서 모바일 기기 추가 체크&lt;/li&gt;
&lt;li&gt;Obsidian 모바일에서 동기화된 폴더를 vault로 열기&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Notion에서 Obsidian으로 넘어온 이유</title><link>https://joonlog.github.io/p/notion%EC%97%90%EC%84%9C-obsidian%EC%9C%BC%EB%A1%9C-%EB%84%98%EC%96%B4%EC%98%A8-%EC%9D%B4%EC%9C%A0/</link><pubDate>Sat, 02 May 2026 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/notion%EC%97%90%EC%84%9C-obsidian%EC%9C%BC%EB%A1%9C-%EB%84%98%EC%96%B4%EC%98%A8-%EC%9D%B4%EC%9C%A0/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Notion을 쓰다가 Obsidian으로 넘어온 이유&lt;/p&gt;
&lt;p&gt;홈서버가 이미 있었기 때문에 가능한 구조&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="0-배경"&gt;0. 배경
&lt;/h2&gt;&lt;p&gt;노션을 꽤 오래 써왔다. 메모, 자료 정리, 파일 첨부까지 하나의 앱에서 다 됐기 때문에 불편함이 없었다.&lt;/p&gt;
&lt;p&gt;바꾸게 된 계기는 AI를 더 적극적으로 활용하고 싶어서였다. 내가 쌓아온 데이터에 AI가 언제든지 접근할 수 있었으면 했다.&lt;/p&gt;
&lt;h2 id="1-notion에서-ai-접근이-어려운-이유"&gt;1. Notion에서 AI 접근이 어려운 이유
&lt;/h2&gt;&lt;p&gt;Notion에 AI가 접근하려면 Notion API를 써야 한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;페이지마다 API 호출이 따로 필요&lt;/li&gt;
&lt;li&gt;Rate limit: 초당 3건&lt;/li&gt;
&lt;li&gt;수백 페이지를 실시간으로 뒤지는 건 현실적으로 불가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notion MCP도 결국 Notion API 위에 얹는 것이라 근본적인 제약은 동일하다.&lt;/p&gt;
&lt;p&gt;원하는 건 단순했다. AI가 내 데이터에 언제든지, 비용 없이, 즉시 접근할 수 있는 구조.&lt;/p&gt;
&lt;h2 id="2-obsidian으로-넘어온-이유"&gt;2. Obsidian으로 넘어온 이유
&lt;/h2&gt;&lt;p&gt;Obsidian의 vault는 그냥 로컬 폴더다. 안에 있는 건 전부 마크다운 파일이다.&lt;/p&gt;
&lt;p&gt;AI 입장에서는:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;파일 직접 읽기&lt;/li&gt;
&lt;li&gt;전체 검색&lt;/li&gt;
&lt;li&gt;API 없음, Rate limit 없음, 비용 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;파일이 로컬에 있는 한 AI는 즉시, 제한 없이 접근할 수 있다.&lt;/p&gt;
&lt;p&gt;부가적으로 Notion 무료 플랜의 파일 첨부 5MB 제한도 없어지고, 오프라인에서도 쓸 수 있다.&lt;/p&gt;
&lt;h2 id="3-홈서버가-있었기-때문에-가능했다"&gt;3. 홈서버가 있었기 때문에 가능했다
&lt;/h2&gt;&lt;p&gt;Obsidian vault가 로컬 파일이라는 건 장점이지만, 그러려면 파일이 항상 어딘가에 있어야 한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI가 언제든지 접근하려면 파일이 항상 살아있어야 함&lt;/li&gt;
&lt;li&gt;PC나 모바일은 꺼질 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;홈서버에 mgt LXC가 이미 구축돼 있었다. 항상 켜져 있고, 내 네트워크 안에 있고, Claude Code가 직접 파일에 접근할 수 있다. 따로 뭔가를 더 구축할 필요 없이 vault를 여기 두면 됐다.&lt;/p&gt;
&lt;p&gt;홈서버가 없었다면 이 구조를 생각하지 않았을 것 같다.&lt;/p&gt;
&lt;h2 id="4-구성한-구조"&gt;4. 구성한 구조
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;외부 PC / 모바일
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ Obsidian + Syncthing
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↕ 동기화
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mgt LXC (홈서버, 항상 켜짐)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ /root/obsidian (vault 폴더)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ Syncthing (동기화 허브)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ Claude Code (vault 직접 접근)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Syncthing이 모든 기기와 mgt LXC를 동기화한다. PC나 모바일에서 메모를 쓰면 즉시 LXC에 반영되고, AI는 LXC의 파일을 직접 읽는다.&lt;/p&gt;
&lt;p&gt;동기화 도구로 Syncthing을 선택한 이유는 단순하다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;무료, 오픈소스&lt;/li&gt;
&lt;li&gt;E2E 암호화&lt;/li&gt;
&lt;li&gt;홈서버가 허브 역할을 하기 때문에 외부 릴레이 서버 없이 직접 연결 가능&lt;/li&gt;
&lt;li&gt;기기 추가는 Device ID 교환으로 간단히 확장&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;실제 Syncthing 설정 방법은 다음 글에서 다룬다.&lt;/p&gt;</description></item><item><title>Proxmox에 관리용 LXC 구성하기</title><link>https://joonlog.github.io/p/proxmox%EC%97%90-%EA%B4%80%EB%A6%AC%EC%9A%A9-lxc-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0/</link><pubDate>Thu, 30 Apr 2026 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/proxmox%EC%97%90-%EA%B4%80%EB%A6%AC%EC%9A%A9-lxc-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0/</guid><description>&lt;blockquote&gt;
&lt;p&gt;홈서버 작업 공간 분리를 위한 관리용 LXC 구성&lt;/p&gt;
&lt;p&gt;PVE는 하이퍼바이저만, 작업은 mgt LXC에서&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="0-관리용-lxc를-따로-만드는-이유"&gt;0. 관리용 LXC를 따로 만드는 이유
&lt;/h2&gt;&lt;p&gt;PVE는 VM과 LXC를 관리하는 하이퍼바이저다.&lt;/p&gt;
&lt;p&gt;Claude Code, git, kubectl 같은 도구를 PVE에 직접 설치해서 쓰는 것도 가능은 하지만, PVE는 하이퍼바이저 역할만 하도록 두는 게 맞다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PVE는 모든 VM/LXC의 상위 계층이기 때문에, PVE가 오염되면 모든 서비스에 영향&lt;/li&gt;
&lt;li&gt;작업 도구 설치, 패키지 업데이트 등으로 하이퍼바이저 환경이 오염될 가능성이 있음&lt;/li&gt;
&lt;li&gt;LXC는 가볍고 빠르게 생성/삭제 가능하기 때문에 작업 환경으로 적합&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;따라서 &lt;code&gt;mgt&lt;/code&gt;라는 이름의 관리용 LXC를 별도로 만들어서, 이 LXC를 외부에서 SSH 접근하는 Bastion 겸 작업 공간으로 사용한다.&lt;/p&gt;
&lt;h2 id="1-pve에서-lxc-생성"&gt;1. PVE에서 LXC 생성
&lt;/h2&gt;&lt;p&gt;PVE 웹 콘솔 우측 상단 &lt;code&gt;Create CT&lt;/code&gt; 버튼으로 생성&lt;/p&gt;
&lt;h3 id="general-탭"&gt;General 탭
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;CT ID: 103 (순서대로 부여)&lt;/li&gt;
&lt;li&gt;Hostname: &lt;code&gt;mgt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Unprivileged container: 체크 (보안상 권장)&lt;/li&gt;
&lt;li&gt;Nesting: 체크 (Docker 등 컨테이너 사용 시 필요)&lt;/li&gt;
&lt;li&gt;Password: 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/proxmox%EC%97%90-%EA%B4%80%EB%A6%AC%EC%9A%A9-lxc-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0/ProxmoxLXC01.png"
width="1176"
height="804"
srcset="https://joonlog.github.io/p/proxmox%EC%97%90-%EA%B4%80%EB%A6%AC%EC%9A%A9-lxc-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0/ProxmoxLXC01_hu_20662557bb0140e9.png 480w, https://joonlog.github.io/p/proxmox%EC%97%90-%EA%B4%80%EB%A6%AC%EC%9A%A9-lxc-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0/ProxmoxLXC01_hu_5f49f05f08555f0c.png 1024w"
loading="lazy"
alt="ProxmoxLXC01.png"
class="gallery-image"
data-flex-grow="146"
data-flex-basis="351px"
&gt;&lt;/p&gt;
&lt;h3 id="template-탭"&gt;Template 탭
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Storage: local&lt;/li&gt;
&lt;li&gt;Template: 원하는 OS 선택
&lt;ul&gt;
&lt;li&gt;여기서는 Rocky Linux 9 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/proxmox%EC%97%90-%EA%B4%80%EB%A6%AC%EC%9A%A9-lxc-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0/ProxmoxLXC02.png"
width="1107"
height="757"
srcset="https://joonlog.github.io/p/proxmox%EC%97%90-%EA%B4%80%EB%A6%AC%EC%9A%A9-lxc-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0/ProxmoxLXC02_hu_d1931d58fdbfbbc1.png 480w, https://joonlog.github.io/p/proxmox%EC%97%90-%EA%B4%80%EB%A6%AC%EC%9A%A9-lxc-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0/ProxmoxLXC02_hu_23a73b09d5ac6d94.png 1024w"
loading="lazy"
alt="ProxmoxLXC02.png"
class="gallery-image"
data-flex-grow="146"
data-flex-basis="350px"
&gt;&lt;/p&gt;
&lt;p&gt;나머지 Disks / CPU / Memory / Network / DNS 탭은 용도에 맞게 설정 후 생성&lt;/p&gt;
&lt;h2 id="2-cloudflare-ssh-route-변경"&gt;2. Cloudflare SSH Route 변경
&lt;/h2&gt;&lt;p&gt;기존에 PVE에 설치된 &lt;code&gt;cloudflared&lt;/code&gt;가 SSH 터널을 &lt;code&gt;localhost:22&lt;/code&gt;로 라우팅하고 있었다.&lt;/p&gt;
&lt;p&gt;즉, 외부에서 SSH 접속 시 PVE로 직접 붙는 구조였는데, 이를 mgt LXC로 변경한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;기존: &lt;code&gt;localhost:22&lt;/code&gt; → PVE 루트 쉘&lt;/li&gt;
&lt;li&gt;변경: &lt;code&gt;192.168.100.10:22&lt;/code&gt; → mgt LXC 루트 쉘&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cloudflare 대시보드 → Networks → Tunnels → 해당 터널 → Public Hostname → SSH Route 편집&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;URL을 &lt;code&gt;localhost:22&lt;/code&gt; → &lt;code&gt;192.168.100.10:22&lt;/code&gt; 로 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;변경 후 외부에서 SSH 접속 시 mgt LXC로 바로 접속된다.&lt;/p&gt;</description></item><item><title>Cloudflare를 사용한 서버 SSH 접근</title><link>https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/</link><pubDate>Mon, 20 Apr 2026 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Cloudflare Tunnel을 사용해 SSH 접근하기 위한 설정&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cloudflare WARP를 사용해도 서버에 통신 가능하긴 하지만, 목적이 SSH라면 WARP는 좋은 방안이 되지 못한다.&lt;/p&gt;
&lt;p&gt;WARP는 UDP 기반 VPN 서비스이기 때문에 통신이 계속 끊어지기 때문&lt;/p&gt;
&lt;p&gt;SSH용 Routing + cloudflared를 사용해서 서버에 접속한다.&lt;/p&gt;
&lt;h2 id="0-사전준비"&gt;0. 사전준비
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Cloudflare Connectors 설정
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/#1-cloudflared-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%97%B0%EB%8F%99" target="_blank" rel="noopener"
&gt;https://joonlog.github.io/p/cloudflare-tunnel을-사용한-홈서버-promox-pve-콘솔-접근-설정/#1-cloudflared-설치-및-연동&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="1-cloudflared-routes-설정"&gt;1. Cloudflared Routes 설정
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;연동한 tunnel을 통해서 연결할 도메인 경로 및 라우팅 경로 설정&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hostname: 보유 도메인 기입&lt;/li&gt;
&lt;li&gt;Type: SSH&lt;/li&gt;
&lt;li&gt;URL: localhost:22&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH01.png"
width="1899"
height="862"
srcset="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH01_hu_3134605963e9ece8.png 480w, https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH01_hu_cc9e551410d8722c.png 1024w"
loading="lazy"
alt="CloudflareSSH01.png"
class="gallery-image"
data-flex-grow="220"
data-flex-basis="528px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;여기까지 설정 완료 시 기입한 서브도메인으로 SSH 접근 가능&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-cloudflare-access-설정"&gt;2. Cloudflare Access 설정
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;서브도메인에 대한 인증 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH02.png"
width="1891"
height="834"
srcset="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH02_hu_8fe68082c1ee78d8.png 480w, https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH02_hu_6b9e1c9035e05ed4.png 1024w"
loading="lazy"
alt="CloudflareSSH02.png"
class="gallery-image"
data-flex-grow="226"
data-flex-basis="544px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH03.png"
width="1878"
height="889"
srcset="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH03_hu_bcb751c2f18ff6b9.png 480w, https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH03_hu_86c3b5f3a5e1f7b0.png 1024w"
loading="lazy"
alt="CloudflareSSH03.png"
class="gallery-image"
data-flex-grow="211"
data-flex-basis="506px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Routes에 설정한 도메인 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH04.png"
width="1869"
height="657"
srcset="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH04_hu_104b6cb8e48662b6.png 480w, https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH04_hu_f0d4cac47153f99d.png 1024w"
loading="lazy"
alt="CloudflareSSH04.png"
class="gallery-image"
data-flex-grow="284"
data-flex-basis="682px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Self-hosted 설명에 나와 있듯이 Policy 생성&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH05.png"
width="1878"
height="881"
srcset="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH05_hu_59e4d92e1d7b35b5.png 480w, https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH05_hu_e69b4e984d2c87d9.png 1024w"
loading="lazy"
alt="CloudflareSSH05.png"
class="gallery-image"
data-flex-grow="213"
data-flex-basis="511px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PVE 접속 도메인 접근 시 Email 인증하도록 Policy 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH06.png"
width="1410"
height="811"
srcset="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH06_hu_72a815eebfe7db60.png 480w, https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH06_hu_63c32a375dd6d0d1.png 1024w"
loading="lazy"
alt="CloudflareSSH06.png"
class="gallery-image"
data-flex-grow="173"
data-flex-basis="417px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;설정한 Policy 할당&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3-cloudflared-설치"&gt;3. Cloudflared 설치
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;windows&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;winget&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="nx"&gt;Cloudflare&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cloudflared&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rocky 8.10&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;dnf&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="nx"&gt;cloudflared&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="4-ssh-접근"&gt;4. SSH 접근
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Cloudflared 로그인&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;cloudflared&lt;/span&gt; &lt;span class="nx"&gt;access&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;SSH&lt;/span&gt; &lt;span class="na"&gt;접근&lt;/span&gt; &lt;span class="na"&gt;도메인&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH07.png"
width="1080"
height="886"
srcset="https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH07_hu_ba003a3f09e176f9.png 480w, https://joonlog.github.io/p/cloudflare%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-ssh-%EC%A0%91%EA%B7%BC/CloudflareSSH07_hu_34f39429bee2bfce.png 1024w"
loading="lazy"
alt="CloudflareSSH07.png"
class="gallery-image"
data-flex-grow="121"
data-flex-basis="292px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;이메일 인증 요구하는 화면 출력됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SSH 접근&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;이메일 인증 완료 후 SSH 접근&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;cloudflared&lt;/span&gt; &lt;span class="nx"&gt;access&lt;/span&gt; &lt;span class="nx"&gt;ssh&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;hostname&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;SSH&lt;/span&gt; &lt;span class="na"&gt;접근&lt;/span&gt; &lt;span class="na"&gt;도메인&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;접근 성공!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SSH alias&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ssh 명령어로 접근하기 위한 alias&lt;/li&gt;
&lt;li&gt;Windows
&lt;ul&gt;
&lt;li&gt;C:\Users`&amp;lt;계정명&amp;gt;`.ssh\config&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Linux
&lt;ul&gt;
&lt;li&gt;~/.ssh/config&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;Host&lt;/span&gt; &lt;span class="nx"&gt;pve&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;HostName&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;SSH&lt;/span&gt; &lt;span class="na"&gt;접근&lt;/span&gt; &lt;span class="na"&gt;도메인&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="nx"&gt;root&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;ProxyCommand&lt;/span&gt; &lt;span class="nx"&gt;cloudflared&lt;/span&gt; &lt;span class="nx"&gt;access&lt;/span&gt; &lt;span class="nx"&gt;ssh&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;hostname&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;접근 성공!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Cloudflare WARP를 사용한 Tunnel 접근</title><link>https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/</link><pubDate>Tue, 24 Mar 2026 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Cloudflare용 UDP VPN&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cloudflare WARP를 사용하면 Tunnel 내부 네트워크로 직접 접근이 가능하다.&lt;/p&gt;
&lt;p&gt;다만 WARP는 UDP 통신이기 때문에 연결이 간헐적으로 끊어질 수 있다.&lt;/p&gt;
&lt;h3 id="사전-준비"&gt;사전 준비
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Cloudflare Tunnel 활성화&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cloudflare-warp"&gt;Cloudflare WARP
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Cloudflare에서 제공하는 클라이언트 기반 WireGuard VPN 에이전트&lt;/li&gt;
&lt;li&gt;디바이스에서 발생하는 트래픽을 Cloudflare 네트워크로 전달하여 보안 정책을 적용하거나 내부 네트워크에 접근할 수 있게 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;클라이언트
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ WARP Client
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Cloudflare Edge
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 인터넷
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;일반적인 WARP는 이렇지만, Zero Trust WARP 환경에서는 다음과 같이 동작한다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;클라이언트
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ WARP Client
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Cloudflare Edge
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Cloudflare Zero Trust 정책(보안 인증)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Cloudflare Tunnel
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Private Network
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;따라서 Cloudflare Tunnel을 뚫어서 Zero Trust를 사전에 구성한 경우에는 WARP로 Tunnel 내부망에 접근이 가능하다.&lt;/p&gt;
&lt;h2 id="1-private-network-route-등록"&gt;1. Private Network Route 등록
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;WARP가 접근할 내부망 CIDR을 등록&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Zero Trust
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Networks
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Routes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Add route
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;설정&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/CloudflareWARP01.png"
width="1866"
height="689"
srcset="https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/CloudflareWARP01_hu_46cbddecc1a7eee9.png 480w, https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/CloudflareWARP01_hu_b98ddf8df06c5fea.png 1024w"
loading="lazy"
alt="CloudflareWARP01.png"
class="gallery-image"
data-flex-grow="270"
data-flex-basis="649px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;이 설정을 통해 Cloudflare는 다음 경로를 인식&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WARP Client
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Cloudflare Edge
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Tunnel Connector
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 192.168.100.0/24
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="2-warp-클라이언트-설치"&gt;2. WARP 클라이언트 설치
&lt;/h2&gt;&lt;p&gt;WARP 클라이언트를 설치하고 Zero Trust에 연결되면 자동으로 device가 등록된다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Zero Trust WARP 접근 시&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/CloudflareWARP02.png"
width="409"
height="237"
srcset="https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/CloudflareWARP02_hu_8497a795a468fe0c.png 480w, https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/CloudflareWARP02_hu_bb65ed82b50a44f9.png 1024w"
loading="lazy"
alt="CloudflareWARP02.png"
class="gallery-image"
data-flex-grow="172"
data-flex-basis="414px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;팀 이름 입력 후 사전 설정했던 인증 절차에 따라 연결 완료&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;확인 경로&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Zero Trust
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Team &amp;amp; Resources
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Devices
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-device-profile-설정"&gt;3. Device Profile 설정
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;WARP 트래픽 정책은 &lt;strong&gt;Device profile&lt;/strong&gt;에서 관리된다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/CloudflareWARP03.png"
width="1867"
height="729"
srcset="https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/CloudflareWARP03_hu_c5620f8a7f336e2e.png 480w, https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/CloudflareWARP03_hu_7907f4fb9044d0b2.png 1024w"
loading="lazy"
alt="CloudflareWARP03.png"
class="gallery-image"
data-flex-grow="256"
data-flex-basis="614px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Split Tunnels 설정&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;현재 목적이 외부 장치에서 홈서버인 PVE 하위에 있는 노드로의 직접 접근이기 때문에, &lt;code&gt;192.168.100.x/24&lt;/code&gt;로의 라우팅만 설정&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Include IPs and domains&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/CloudflareWARP04.png"
width="1840"
height="476"
srcset="https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/CloudflareWARP04_hu_be5c32e0fca7b78d.png 480w, https://joonlog.github.io/p/cloudflare-warp%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-tunnel-%EC%A0%91%EA%B7%BC/CloudflareWARP04_hu_8c87c6d45b2b4d17.png 1024w"
loading="lazy"
alt="CloudflareWARP04.png"
class="gallery-image"
data-flex-grow="386"
data-flex-basis="927px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Manage
&lt;ul&gt;
&lt;li&gt;Type: &lt;code&gt;Address&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Value: &lt;code&gt;192.168.100.0/24&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;해당 대역으로의 트래픽 전송 시에만 WARP를 사용하도록 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="5-정상-동작-확인"&gt;5. 정상 동작 확인
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;설정 적용 후 WARP 클라이언트를 설치한 장치에서 확인&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;cmd에서: &lt;code&gt;route print&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;정상이라면 다음 경로가 생성&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;인터페이스 목록
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cloudflare WARP Interface
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;IPv4 테이블
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;192.168.100.0 255.255.255.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;이후 내부 노드 통신 가능&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="정리"&gt;정리
&lt;/h2&gt;&lt;p&gt;Cloudflare Tunnel만으로는 내부망 접근이 되지 않는다.&lt;/p&gt;
&lt;p&gt;WARP를 사용하려면 다음 설정이 필요하다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Private Network Route 등록
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. WARP Device 등록
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Device Profile 정책 적용
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Split Tunnel에 내부망 CIDR 추가
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;특히 Split Tunnel 설정이 맞지 않으면 WARP routing이 정상 동작하지 않으므로 반드시 확인해야 한다.&lt;/p&gt;</description></item><item><title>Promox 네트워크 설정 및 VM 생성</title><link>https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/</link><pubDate>Mon, 23 Feb 2026 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Promox 내부 VM을 위한 사설 네트워크 인터페이스 생성 필요&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="promox-네트워크-설정"&gt;Promox 네트워크 설정
&lt;/h3&gt;&lt;p&gt;현재 랜선이 그대로 미니 PC에 연결되어 있어 pve의 네트워크 인터페이스는 공인 IP만 존재한다&lt;/p&gt;
&lt;p&gt;따라서 Promox 내부 VM을 사설 IP로 관리하기 위한 네트워크 인터페이스가 필요하다&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;NI 생성&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;vim&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;network&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;interfaces&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;auto&lt;/code&gt;: 부팅 시 NI 활성&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;address&lt;/code&gt;: 고정 IP 설정&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;이 IP가 하위 VM들의 Gateway 역할&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;post-up&lt;/code&gt;: 인터넷 연결&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;내부 VM에서 외부 네트워크로의 라우팅 허용&lt;/li&gt;
&lt;li&gt;출발지가 192.168.100.0/24 대역인 트래픽이 vmbr0으로 나갈 때 vmbr0 IP로 출발지 IP를 SNAT&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;post-down&lt;/code&gt;: 트래픽이 vmbr1으로 내려갈때는 위 NAT 규칙 삭제&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;auto&lt;/span&gt; &lt;span class="nx"&gt;vmbr1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;iface&lt;/span&gt; &lt;span class="nx"&gt;vmbr1&lt;/span&gt; &lt;span class="nx"&gt;inet&lt;/span&gt; &lt;span class="kr"&gt;static&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;address&lt;/span&gt; &lt;span class="mf"&gt;192.168.100.1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;bridge_ports&lt;/span&gt; &lt;span class="nx"&gt;none&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;bridge_stp&lt;/span&gt; &lt;span class="nx"&gt;off&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;bridge_fd&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;up&lt;/span&gt; &lt;span class="nx"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;/proc/sys/net/ipv4/ip_forward&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;up&lt;/span&gt; &lt;span class="nx"&gt;iptables&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="nx"&gt;nat&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt; &lt;span class="nx"&gt;POSTROUTING&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="mf"&gt;192.168.100.0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt; &lt;span class="nx"&gt;vmbr0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="nx"&gt;MASQUERADE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;down&lt;/span&gt; &lt;span class="nx"&gt;iptables&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="nx"&gt;nat&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;D&lt;/span&gt; &lt;span class="nx"&gt;POSTROUTING&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="mf"&gt;192.168.100.0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt; &lt;span class="nx"&gt;vmbr0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="nx"&gt;MASQUERADE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;신규 생성한 NI 기동&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;systemctl&lt;/span&gt; &lt;span class="nx"&gt;restart&lt;/span&gt; &lt;span class="nx"&gt;networking&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;ifup&lt;/span&gt; &lt;span class="nx"&gt;vmbr1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;VM에서 인터넷 통신 필요 시 pve에서 nftables 활성화 필수&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;기본 설정에선 vmbr1에서 vmbr0으로의 FORWARD를 막고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings01.png"
width="774"
height="566"
srcset="https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings01_hu_acba38255ea87837.png 480w, https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings01_hu_6386d90174c7aab1.png 1024w"
loading="lazy"
alt="PromoxNetworkVMSettings01.png"
class="gallery-image"
data-flex-grow="136"
data-flex-basis="328px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="promox에서-vm-생성"&gt;Promox에서 VM 생성
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;rocky 8.10 이미지 다운로드&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /var/lib/vz/template/iso/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://download.rockylinux.org/pub/rocky/8.10/isos/x86_64/Rocky-8.10-x86_64-minimal.iso
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;VM 생성&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;좌측 pve 우클릭 - Create VM&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings02.png"
width="1320"
height="737"
srcset="https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings02_hu_7ff307c9ebc19f5a.png 480w, https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings02_hu_7570d7bda941ddd1.png 1024w"
loading="lazy"
alt="PromoxNetworkVMSettings02.png"
class="gallery-image"
data-flex-grow="179"
data-flex-basis="429px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;q35 설정&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings03.png"
width="1320"
height="725"
srcset="https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings03_hu_1e303e3fbade40d0.png 480w, https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings03_hu_dd5acdaeb3bad8fc.png 1024w"
loading="lazy"
alt="PromoxNetworkVMSettings03.png"
class="gallery-image"
data-flex-grow="182"
data-flex-basis="436px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bridge에서 위에서 만든 NI 할당&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings04.png"
width="1280"
height="749"
srcset="https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings04_hu_4e7f9207a29579c7.png 480w, https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings04_hu_206012b2e822b049.png 1024w"
loading="lazy"
alt="PromoxNetworkVMSettings04.png"
class="gallery-image"
data-flex-grow="170"
data-flex-basis="410px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="promox-vm-설정"&gt;Promox VM 설정
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Start at boot를 활성화 해야지 promox 부팅될 때 해당 VM도 부팅&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings05.png"
width="1049"
height="389"
srcset="https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings05_hu_8d0339afdaf42337.png 480w, https://joonlog.github.io/p/promox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-vm-%EC%83%9D%EC%84%B1/PromoxNetworkVMSettings05_hu_c4d518e1033f8877.png 1024w"
loading="lazy"
alt="PromoxNetworkVMSettings05.png"
class="gallery-image"
data-flex-grow="269"
data-flex-basis="647px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;VM NI 설정&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;사설 IP 수동 할당 및 게이트웨이, dns 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;nmcli&lt;/span&gt; &lt;span class="nx"&gt;con&lt;/span&gt; &lt;span class="nx"&gt;mod&lt;/span&gt; &lt;span class="nx"&gt;enp6s18&lt;/span&gt; &lt;span class="nx"&gt;ipv4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="nx"&gt;manual&lt;/span&gt; &lt;span class="nx"&gt;ipv4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addresses&lt;/span&gt; &lt;span class="mf"&gt;192.168.100.11&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="nx"&gt;ipv4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gateway&lt;/span&gt; &lt;span class="mf"&gt;192.168.100.1&lt;/span&gt; &lt;span class="nx"&gt;ipv4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dns&lt;/span&gt; &lt;span class="mf"&gt;8.8.8.8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;nmcli&lt;/span&gt; &lt;span class="nx"&gt;con&lt;/span&gt; &lt;span class="nx"&gt;mod&lt;/span&gt; &lt;span class="nx"&gt;enp6s18&lt;/span&gt; &lt;span class="nx"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;autoconnect&lt;/span&gt; &lt;span class="nx"&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;nmcli&lt;/span&gt; &lt;span class="nx"&gt;con&lt;/span&gt; &lt;span class="nx"&gt;down&lt;/span&gt; &lt;span class="nx"&gt;enp6s18&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;nmcli&lt;/span&gt; &lt;span class="nx"&gt;con&lt;/span&gt; &lt;span class="nx"&gt;up&lt;/span&gt; &lt;span class="nx"&gt;enp6s18&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ping 8.8.8.8 성공 시 설정 완료&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Cloudflare Tunnel을 사용한 홈서버 Promox PVE 콘솔 접근 설정</title><link>https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/</link><pubDate>Fri, 06 Feb 2026 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/</guid><description>&lt;h3 id="목표"&gt;목표
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;현재 외부에서 홈서버 Promox PVE 콘솔에 접근 시 공인 IP로 직접 접근하는 중&lt;/li&gt;
&lt;li&gt;PVE 접속용 도메인 설정&lt;/li&gt;
&lt;li&gt;외부에서 도메인 접근 시 Cloudflare 인증을 요구하도록 설정하고, 인증 성공 시에만 PVE 콘솔에 접근하도록 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="0-사전-준비"&gt;0. 사전 준비
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Cloudflare에 등록할 도메인 준비&lt;/li&gt;
&lt;li&gt;도메인 네임서버를 Cloudflare로 설정
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cloudflare 회원가입 및 로그인&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;로그인 시 나오는 네임서버 도메인 2개를 도메인 등록기관의 네임서버 설정에 등록&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;초록색 체크 표시 뜨면 OK!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting01.png"
width="1910"
height="824"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting01_hu_c1357fcc4c66fda9.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting01_hu_813a6c54a08dfda4.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting01.png"
class="gallery-image"
data-flex-grow="231"
data-flex-basis="556px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="1-cloudflared-설치-및-연동"&gt;1. Cloudflared 설치 및 연동
&lt;/h3&gt;&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting02.png"
width="1885"
height="874"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting02_hu_8101428f9b7e0398.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting02_hu_9959e4923e475ba5.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting02.png"
class="gallery-image"
data-flex-grow="215"
data-flex-basis="517px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Networks&lt;/code&gt; - &lt;code&gt;Connectors&lt;/code&gt; - &lt;code&gt;Add a tunnel&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting03.png"
width="1911"
height="843"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting03_hu_dc0d91ba841d4269.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting03_hu_f5aefa0a9264498.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting03.png"
class="gallery-image"
data-flex-grow="226"
data-flex-basis="544px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Cloudflared&lt;/code&gt; 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting04.png"
width="1915"
height="842"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting04_hu_59b54e2eb56b16fb.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting04_hu_f3d8cc431bdec73e.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting04.png"
class="gallery-image"
data-flex-grow="227"
data-flex-basis="545px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tunnel 이름 기입&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting05.png"
width="1897"
height="843"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting05_hu_3804c961258f8242.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting05_hu_93a6df372b04bb1d.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting05.png"
class="gallery-image"
data-flex-grow="225"
data-flex-basis="540px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;OS 확인 및 Cloudflared 설치&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Promox는 Debian 리눅스 64bit
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cat /etc/os-release&lt;/code&gt; + &lt;code&gt;uname -m&lt;/code&gt; 명령어로 확인 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;root&lt;/code&gt; 사용자로 진행
&lt;ul&gt;
&lt;li&gt;Promox는 sudo가 설치되어 있지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Add&lt;/span&gt; &lt;span class="nx"&gt;cloudflare&lt;/span&gt; &lt;span class="nx"&gt;gpg&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;mkdir&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0755&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;share&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;keyrings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;fsSL&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//pkg.cloudflare.com/cloudflare-public-v2.gpg | tee /usr/share/keyrings/cloudflare-public-v2.gpg &amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Add&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="nx"&gt;repo&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;your&lt;/span&gt; &lt;span class="nx"&gt;apt&lt;/span&gt; &lt;span class="nx"&gt;repositories&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;deb [signed-by=/usr/share/keyrings/cloudflare-public-v2.gpg] https://pkg.cloudflare.com/cloudflared any main&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;tee&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;cloudflared&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="nx"&gt;cloudflared&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="nx"&gt;cloudflared&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;apt-get update 시 &lt;code&gt;enterprise.proxmox.com 패키지 Unauthorized&lt;/code&gt; 오류가 나는 경우&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Promox의 기본 패키지는 유료 구독형이기 때문에 비활성화 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;cd&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;mv&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="nx"&gt;pve&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;enterprise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sources&lt;/span&gt; &lt;span class="nx"&gt;pve&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;enterprise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;disabled&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;mv&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="nx"&gt;ceph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sources&lt;/span&gt; &lt;span class="nx"&gt;ceph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;disabled&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;일반 패키지 리포 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;/etc/apt/sources.list.d/pve-no-subscription.sources &amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;Types&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;deb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;URIs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//download.proxmox.com/debian/pve
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;Suites&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;trixie&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;Components&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pve&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;no&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;subscription&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;Signed&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;By&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;/usr/share/keyrings/proxmox-archive-keyring.gpg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;하단의 토큰 값 유출되지 않도록 유의&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;서버가 시작될때마다 Tunnel이 자동으로 기동되게 할 경우&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;cloudflared&lt;/span&gt; &lt;span class="nx"&gt;service&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;토큰&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;현재 터미널에서만 Tunnel 연결할 경우&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;cloudflared&lt;/span&gt; &lt;span class="nx"&gt;tunnel&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;토큰&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-cloudflare-routes-설정"&gt;2. Cloudflare Routes 설정
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;연동한 tunnel을 통해서 연결할 도메인 경로 및 라우팅 경로 설정&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hostname: 보유 도메인 기입&lt;/li&gt;
&lt;li&gt;Type: HTTPS&lt;/li&gt;
&lt;li&gt;URL: localhost:8006&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting06.png"
width="1899"
height="862"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting06_hu_3134605963e9ece8.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting06_hu_cc9e551410d8722c.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting06.png"
class="gallery-image"
data-flex-grow="220"
data-flex-basis="528px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Promox 서버에서 https://localhost:8006로 접근 시 TLS 해제 필요&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting07.png"
width="1483"
height="753"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting07_hu_dd3e9bb72c0663c6.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting07_hu_5637088d1446b654.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting07.png"
class="gallery-image"
data-flex-grow="196"
data-flex-basis="472px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;여기까지 설정 완료 시 기입한 서브도메인으로 PVE 접근 가능&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-cloudflare-access-설정"&gt;3. Cloudflare Access 설정
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;서브도메인에 대한 인증 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting08.png"
width="1891"
height="834"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting08_hu_8fe68082c1ee78d8.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting08_hu_6b9e1c9035e05ed4.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting08.png"
class="gallery-image"
data-flex-grow="226"
data-flex-basis="544px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting09.png"
width="1878"
height="889"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting09_hu_bcb751c2f18ff6b9.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting09_hu_86c3b5f3a5e1f7b0.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting09.png"
class="gallery-image"
data-flex-grow="211"
data-flex-basis="506px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Self-hosted 설명에 나와 있듯이 Policy 먼저 생성&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting10.png"
width="1878"
height="881"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting10_hu_59e4d92e1d7b35b5.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting10_hu_e69b4e984d2c87d9.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting10.png"
class="gallery-image"
data-flex-grow="213"
data-flex-basis="511px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PVE 접속 도메인 접근 시 Email 인증하도록 Policy 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting11.png"
width="1410"
height="811"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting11_hu_72a815eebfe7db60.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting11_hu_63c32a375dd6d0d1.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting11.png"
class="gallery-image"
data-flex-grow="173"
data-flex-basis="417px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;설정한 Policy 할당&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting12.png"
width="1080"
height="886"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting12_hu_ba003a3f09e176f9.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting12_hu_34f39429bee2bfce.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting12.png"
class="gallery-image"
data-flex-grow="121"
data-flex-basis="292px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PVE 접속 도메인 접근 시 이메일 인증 요구하는 화면 출력 확인&lt;/li&gt;
&lt;li&gt;설정 완료!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-promox-인바운드-접근-차단"&gt;3. Promox 인바운드 접근 차단
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cloudflare Tunnel이 뚫렸기 때문에, 기존에 anyopen되어 있던 Promox 공인 IP에 대한 접근을 전부 차단&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Zero-Inbound 설정&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PVE 콘솔 → Datacenter → Firewall → Options → Firewall 활성화&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting13.png"
width="1920"
height="703"
srcset="https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting13_hu_f412b33bd12e6a28.png 480w, https://joonlog.github.io/p/cloudflare-tunnel%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%99%88%EC%84%9C%EB%B2%84-promox-pve-%EC%BD%98%EC%86%94-%EC%A0%91%EA%B7%BC-%EC%84%A4%EC%A0%95/CloudflareTunnelSetting13_hu_5e5ad7d123a12843.png 1024w"
loading="lazy"
alt="CloudflareTunnelSetting13.png"
class="gallery-image"
data-flex-grow="273"
data-flex-basis="655px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;설정 즉시 공인 IP를 통한 PVE 콘솔 차단 완료!&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="결과"&gt;결과
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;홈서버로서의 취약한 보안 조치 완료
&lt;ul&gt;
&lt;li&gt;홈 공인IP 숨기기&lt;/li&gt;
&lt;li&gt;관리자용 페이지 접근 시 이메일 인증 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>홈서버 접근 용도로 Cloudflare Tunnel을 쓰는 이유</title><link>https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84-%EC%A0%91%EA%B7%BC-%EC%9A%A9%EB%8F%84%EB%A1%9C-cloudflare-tunnel%EC%9D%84-%EC%93%B0%EB%8A%94-%EC%9D%B4%EC%9C%A0/</link><pubDate>Thu, 05 Feb 2026 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84-%EC%A0%91%EA%B7%BC-%EC%9A%A9%EB%8F%84%EB%A1%9C-cloudflare-tunnel%EC%9D%84-%EC%93%B0%EB%8A%94-%EC%9D%B4%EC%9C%A0/</guid><description>&lt;blockquote&gt;
&lt;p&gt;외부에서 홈서버에 안전하게 접근하기 위한 설정&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;홈서버를 디폴트 상태로 외부에서 접근하기 위해선 IP와 Port로 접근이 필요하다.&lt;/p&gt;
&lt;p&gt;클라우드라면 Security Group / ACL 등등으로 제어가 쉽기 때문에 상관이 없지만, 홈서버는 집에서 사용하는 공유기 공인 IP를 외부에 오픈해야하기 때문에 보안적으로 위험하다.&lt;/p&gt;
&lt;p&gt;기본적으로 홈 IP는 AnyOpen되어 있고, 외부에서 접근한다는 것 자체가 Wifi든 모바일이든 매번 접근하는 IP가 가변적이기 때문에 IP로 접근을 차단하는 것에도 무리가 있다.&lt;/p&gt;
&lt;p&gt;특히 Proxmox 관리 콘솔(PVE)은 관리자 권한 탈취될 시 홈 네트워크 전체에 대한 통제권을 넘길 수 있기 때문에 매우 위험하다.&lt;/p&gt;
&lt;p&gt;따라서 &lt;code&gt;Cloudflare Tunnel&lt;/code&gt;로 공인 IP를 숨기고, &lt;code&gt;Cloudflare Access&lt;/code&gt;로 인증된 사용자만 접근할 수 있게 하려고 한다.&lt;/p&gt;
&lt;h2 id="1-cloudflare-tunnel"&gt;&lt;strong&gt;1. Cloudflare Tunnel&lt;/strong&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;IP와 포트를 공개하지 않고도 외부에서 서버로 접속할 수 있게 하는 서비스&lt;/li&gt;
&lt;li&gt;외부에서 Cloudflare를 거쳐서 서버에 접속&lt;/li&gt;
&lt;li&gt;기존 인바운드+포트 포워딩 기반 접근과 다른 아웃바운드 기반 리버스 프록시 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cloudflare-tunnel을-쓰는-이유"&gt;Cloudflare Tunnel을 쓰는 이유
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;홈서버는 가정용 공유기에 부여된 공인 IP로 접근해야 하기 때문에 보안에 취약&lt;/li&gt;
&lt;li&gt;기업에서 쓰는 서버들의 경우 WAF, IPS, F/W 등 방어 솔루션이 많지만, 홈서버는 사실상 방어 수단이 전무&lt;/li&gt;
&lt;li&gt;Cloudflare를 거치면서 레이턴시가 늘어나더라도, 홈서버는 보안이 최우선&lt;/li&gt;
&lt;li&gt;따라서 Zero-Inbound를 유지하고도 운영이 가능한 Cloudflare Tunnel 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="기존-포트포워딩-방식"&gt;&lt;strong&gt;기존 포트포워딩 방식&lt;/strong&gt;
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;포트포워딩은 외부에서 들어오는 Inbound 연결을 서버가 직접 받아들이는 구조&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;외부 클라이언트 → 공유기(포트포워딩) → 홈서버
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;이 방식에서는 서버가 외부에서 접근 가능한 상태가 되며, 열려 있는 포트는 스캔이나 공격의 대상이 될 수 있어서 보안적으로 매우 취약&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="cloudflare-tunnel-방식"&gt;Cloudflare Tunnel 방식
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Cloudflare Tunnel은 서버가 먼저 Cloudflare로 Outbound 연결을 생성&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[항상 유지되는 연결]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;홈서버(cloudflared) → Cloudflare
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cloudflared&lt;/code&gt; 데몬은 Cloudflare Edge와 여러 개의 TLS 연결을 지속적으로 유지&lt;/li&gt;
&lt;li&gt;이 시점에는 외부 요청이 없어도 연결은 계속 생존&lt;/li&gt;
&lt;li&gt;즉, 요청이 올 때마다 연결을 여는 구조가 아니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;외부 사용자가 서비스에 접근하면 요청은 먼저 Cloudflare에 도달&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;외부 클라이언트 → Cloudflare
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;이 단계에서 Cloudflare는 아래 접근 제어를 수행&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cloudflare Access 기반 인증 (로그인, OTP, SSO, 서비스 토큰 등)&lt;/li&gt;
&lt;li&gt;IP, 국가, 정책 기반 접근 제어&lt;/li&gt;
&lt;li&gt;인증 실패 시 요청 차단&lt;/li&gt;
&lt;li&gt;인증과 접근 제어는 홈서버와 분리된 상태에서 Cloudflare가 전담&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;인증 이후 실 연결&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cloudflare → 기존 Tunnel → 홈서버
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;인증을 통과한 요청만 이미 열려 있는 터널 연결을 통해 홈서버로 전달됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="2-cloudflare-access"&gt;2. Cloudflare Access
&lt;/h2&gt;&lt;p&gt;Cloudflare tunnel만 사용한다면, 최초 목적 중 공인 IP 숨기기만 가능하다.&lt;/p&gt;
&lt;p&gt;PVE 콘솔에 대한 접근 자체를 막기 위해선 Cloudflare Access를 사용한 인증 절차 도입이 필요하다.&lt;/p&gt;
&lt;h3 id="cloudflare-access-도입-후의-구조"&gt;Cloudflare Access 도입 후의 구조
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;위 Cloudflare Tunnel의 2번째 단계에서 Cloudflare Access 추가&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;외부&lt;/span&gt; &lt;span class="nx"&gt;클라이언트&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;Cloudflare&lt;/span&gt; &lt;span class="nx"&gt;Access&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;Cloudflare&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="정리"&gt;정리
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Cloudflare Tunnel은 요청을 역방향으로 전달하는 Outbound 기반 리버스 프록시 구조&lt;/li&gt;
&lt;li&gt;홈서버 입장에서는 외부 클라이언트와 직접 통신하지 않는다&lt;/li&gt;
&lt;li&gt;Cloudflare와 유지 중인 Outbound 연결만 사용하며, 외부에서 서버로 들어오는 Inbound 포트는 존재하지 않는다&lt;/li&gt;
&lt;li&gt;따라서 Zero-Inbound로 외부에서 서비스 접근이 가능&lt;/li&gt;
&lt;li&gt;내가 외부에서 접근해야 하지만 공개적으로 오픈하면 안 될 경우 Cloudflare Access 사용&lt;/li&gt;
&lt;li&gt;실제 작업 과정은 다음 글 확인&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>홈서버용 Mini PC에 Promox 설치하기</title><link>https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/</link><pubDate>Wed, 04 Feb 2026 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/</guid><description>&lt;blockquote&gt;
&lt;p&gt;개발/인프라/K8S 연습용 홈서버로 Mini PC 구매&lt;/p&gt;
&lt;p&gt;Mini PC에 Proxmox 설치&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mini PC 모델: Chatreey AN3P&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 id="1-promox-이미지-준비"&gt;1. Promox 이미지 준비
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;ISO 이미지로 설치 가능한 USB를 만들 때 사용
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="https://rufus.ie/ko/" target="_blank" rel="noopener"
&gt;https://rufus.ie/ko/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall01.png"
width="711"
height="548"
srcset="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall01_hu_5378edfa434089d2.png 480w, https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall01_hu_82dfb91e3b728646.png 1024w"
loading="lazy"
alt="MiniPCPromoxInstall01.png"
class="gallery-image"
data-flex-grow="129"
data-flex-basis="311px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall02.png"
width="418"
height="542"
srcset="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall02_hu_fcf09e262d39789b.png 480w, https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall02_hu_b7acb733446a67d3.png 1024w"
loading="lazy"
alt="MiniPCPromoxInstall02.png"
class="gallery-image"
data-flex-grow="77"
data-flex-basis="185px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-mini-pc-부팅"&gt;2. Mini PC 부팅
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;미니 PC 부팅하니 바이오스 화면 진입&lt;/li&gt;
&lt;li&gt;가상화 기능을 써야 하니 관련 설정이 정상적인지 확인
&lt;ul&gt;
&lt;li&gt;Advanced → CPU Configuration → &lt;code&gt;SVM&lt;/code&gt; / &lt;code&gt;Virtualization&lt;/code&gt; / &lt;code&gt;AMD-V&lt;/code&gt; 관련 항목은 무조건 &lt;code&gt;Enabled&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall03.png"
width="1536"
height="938"
srcset="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall03_hu_c530c5f363efb4cd.png 480w, https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall03_hu_a55b2b667cd181de.png 1024w"
loading="lazy"
alt="MiniPCPromoxInstall03.png"
class="gallery-image"
data-flex-grow="163"
data-flex-basis="393px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;USB를 통한 Promox 설치 시 막힐 수 있어서 Secure Boot 해제
&lt;ul&gt;
&lt;li&gt;Boot → Boot Configuration → Secure Boot → &lt;code&gt;Disabled&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall04.png"
width="1536"
height="947"
srcset="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall04_hu_e63ffa2ae97f1eed.png 480w, https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall04_hu_ea90da49a480317.png 1024w"
loading="lazy"
alt="MiniPCPromoxInstall04.png"
class="gallery-image"
data-flex-grow="162"
data-flex-basis="389px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Boot → Boot Option 순서에서 Promox 설치 USB를 첫번째 순서로 조정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall05.png"
width="1536"
height="950"
srcset="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall05_hu_22ea9313b0a99fed.png 480w, https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall05_hu_5ee3b02b0327b05b.png 1024w"
loading="lazy"
alt="MiniPCPromoxInstall05.png"
class="gallery-image"
data-flex-grow="161"
data-flex-basis="388px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;설정 저장 및 재기동&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-promox-설정"&gt;3. Promox 설정
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;부팅 후 Promox 기본 설정대로 설치 진행&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;인터페이스는 일단 DHCP로 설정&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;모든 설정 후 재부팅하면 설치 완료&lt;/p&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall06.png"
width="600"
height="450"
srcset="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall06_hu_db008771b6443246.png 480w, https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall06_hu_6c45beabc2672ea8.png 1024w"
loading="lazy"
alt="MiniPCPromoxInstall06.png"
class="gallery-image"
data-flex-grow="133"
data-flex-basis="320px"
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4-promox-pve-접근-확인"&gt;4. Promox PVE 접근 확인
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;재부팅하면 Promox CLI로 부팅됨
&lt;ul&gt;
&lt;li&gt;ID는 root, PWD는 설정한 비밀번호로 로그인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;CLI에 출력되는 공인IP:Port로 외부에서 PVE(Promox 관리 콘솔) 접근 가능
&lt;ul&gt;
&lt;li&gt;PVE 콘솔 접근 정보는 계정 접근 정보와 동일&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;접근 성공!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall07.png"
width="1917"
height="899"
srcset="https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall07_hu_55aae682856bbcda.png 480w, https://joonlog.github.io/p/%ED%99%88%EC%84%9C%EB%B2%84%EC%9A%A9-mini-pc%EC%97%90-promox-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/MiniPCPromoxInstall07_hu_fff3f9625fdb7595.png 1024w"
loading="lazy"
alt="MiniPCPromoxInstall07.png"
class="gallery-image"
data-flex-grow="213"
data-flex-basis="511px"
&gt;&lt;/p&gt;</description></item></channel></rss>