Files
server-migration/network-plan.md
2026-03-30 16:21:46 +09:00

19 KiB

Network & Migration Plan

현재 구조 (AS-IS) — 2026-03-30 기준

                        ┌─────────────────────────────────────┐
                        │         ISP (SK브로드밴드)            │
                        │         WAN: 39.122.244.108 (동적)   │
                        └──────────────┬──────────────────────┘
                                       │
                        ┌──────────────┴──────────────────────┐
                        │    TP-Link Archer AXE75 (라우터)      │
                        │    LAN: 192.168.0.254                │
                        │    WireGuard VPN: 51820/UDP          │
                        │    DHCP: .200 ~ .253                 │
                        │                                      │
                        │    포트포워딩:                         │
                        │      :80  → .100:10080 (Let's Encrypt)│
                        │      :443 → .100:443  (Caddy HTTPS)  │
                        │      :24242 → .100:22 (SSH)          │
                        │      + 레거시 포트 다수 (정리 예정)     │
                        └──────────────┬──────────────────────┘
                                       │
                  ┌────────────────────┴────────────────────────┐
                  │        서버 (192.168.0.100, coala)            │
                  │        Ubuntu 20.04 / i9-10900K / 64GB       │
                  │        HDD 2TB (191GB 사용)                   │
                  │                                              │
                  │   ┌─── Caddy v2.11.2 (리버스 프록시) ───┐    │
                  │   │  :443 ← 외부 HTTPS 진입점            │    │
                  │   │  auto Let's Encrypt SSL              │    │
                  │   │                                      │    │
                  │   │  git.0022222.xyz    → localhost:3000  │    │
                  │   │  gitlab.0022222.xyz → localhost:8443  │    │
                  │   │  tb.0022222.xyz     → localhost:10500 │    │
                  │   │  cm.0022222.xyz     → localhost:10501 │    │
                  │   │  cb.0022222.xyz     → localhost:10590 │    │
                  │   │  gw.0022222.xyz     → localhost:15002 │    │
                  │   │  gw-qa.0022222.xyz  → localhost:15005 │    │
                  │   │  cc.0022222.xyz     → localhost:10513 │    │
                  │   │  jenkins.0022222.xyz→ localhost:8080  │    │
                  │   │  pve.0022222.xyz    → localhost:8006  │    │
                  │   └──────────────────────────────────────┘    │
                  │                                              │
                  │   ┌─── Docker 컨테이너 ──────────────────┐    │
                  │   │  gitea        :3000  (Git 호스팅)     │    │
                  │   │  tb-api       :10500 (TrainBoard)     │    │
                  │   │  cm-api       :10501 (CultureMakers)  │    │
                  │   │  cheeseboard  :10590 (CheeseBoard)    │    │
                  │   │  tb-db        :33306 (MySQL)          │    │
                  │   │  cm-db        :33308 (MySQL)          │    │
                  │   │  cheeseboard-db:33309 (MySQL)         │    │
                  │   │  gitlab-runner                        │    │
                  │   └──────────────────────────────────────┘    │
                  │                                              │
                  │   ┌─── 네이티브 서비스 ──────────────────┐    │
                  │   │  GitLab Omnibus  :8443 (레거시, HTTP) │    │
                  │   │  Jenkins         :8080                │    │
                  │   │  PostgreSQL      :5432                │    │
                  │   │  GroupWare       :15002 / :15005 (QA) │    │
                  │   │  ChordCourse     :10513               │    │
                  │   └──────────────────────────────────────┘    │
                  └──────────────────────────────────────────────┘

  ┌─── VPN 클라이언트 (외부) ──────────┐
  │  brandon: 10.5.5.2/32              │
  │  → 192.168.0.0/24 접근 가능        │
  │  → Endpoint: 39.122.244.108:51820  │
  └────────────────────────────────────┘

WAN 정보

항목
ISP SK브로드밴드
연결 유형 동적 IP (DHCP)
WAN IP 39.122.244.108 (변경될 수 있음)
WAN Gateway 39.122.244.1
DNS 210.220.163.82 / 219.250.36.130
항목
LAN IP 192.168.0.254
서브넷 255.255.255.0
DHCP 범위 192.168.0.200 ~ .253
관리자 비밀번호 (설정됨)
WireGuard VPN 활성 (51820/UDP)
MAC BC-07-1D-3C-CF-D8
서비스 외부포트 내부포트 대상 상태 비고
gitlab 443 443 .100 활성 Caddy HTTPS
gitlab_hook 5050 5050 .100 활성
lets_encrypt 80 10080 .100 활성 ⚠️ 80→80으로 변경 필요
ssh 24242 22 .100 활성
TB_mvp_back 10600 10600 .100 활성 레거시
CM-back 10601 10601 .100 활성 레거시
bjsrtest_back 10501 10501 .100 활성 레거시
CheeseBoard 10503 10503 .100 활성 레거시
CC_frontend 10510 10510 .100 활성 레거시
CC_backend 10511 10511 .100 활성 레거시
CC_mysql 10512 10512 .100 활성 ⚠️ DB 노출
Groupware_Dev 15001 15001 .100 활성 레거시
Groupware_swagger 15003 15003 .100 활성 레거시
Groupware_qa 15004 15004 .100 활성 레거시
Groupware_mysql 33307 33307 .100 활성 ⚠️ DB 노출
TB_mysql 33306 33306 .100 활성 ⚠️ DB 노출
bjsrtest_mysql 33308 33308 .100 활성 ⚠️ DB 노출
jenkins 8889 28080 .100 활성 ⚠️ 관리 노출
kisa_test 9797 9797 .100 활성 ⚠️ 삭제 대상
bjsrtest_frt1 13000 13000 .100 활성 ⚠️ 삭제 대상
bjsrtest_frt2 13001 13001 .100 활성 ⚠️ 삭제 대상
BM_rdp 2765 2765 .15 활성 ⚠️ 삭제 대상
flask_test 5000 5000 .48 활성 ⚠️ 삭제 대상
rdp 2588 3389 .48 활성 ⚠️ 삭제 대상

DHCP 예약

장치 MAC IP
서버 (coala) B4-2E-99-F6-D0-65 192.168.0.100
DESKTOP-N2D0NAM D4-5D-64-B0-6B-7F 192.168.0.48
DESKTOP-8NDJGE9 0C-7A-15-8B-AE-E3 192.168.0.2

WireGuard VPN

항목
터널 IP 10.5.5.1/32
수신 포트 51820/UDP
클라이언트 액세스 인터넷 & 홈네트워크
계정: brandon 10.5.5.2/32

서브도메인 (Cloudflare DNS — 0022222.xyz)

서브도메인 대상 서비스
git.0022222.xyz → Caddy → :3000 Gitea
gitlab.0022222.xyz → Caddy → :8443 GitLab (레거시)
tb.0022222.xyz → Caddy → :10500 TrainBoard API
cm.0022222.xyz → Caddy → :10501 CultureMakers API
cb.0022222.xyz → Caddy → :10590 CheeseBoard API
gw.0022222.xyz → Caddy → :15002 GroupWare
gw-qa.0022222.xyz → Caddy → :15005 GroupWare QA
cc.0022222.xyz → Caddy → :10513 ChordCourse
jenkins.0022222.xyz → Caddy → :8080 Jenkins
pve.0022222.xyz → Caddy → :8006 Proxmox (미설치)

외부 접속 방법

대상 방법
서버 SSH ssh -p 24242 brandon@39.122.244.108
Gitea https://git.0022222.xyz
모든 웹 서비스 https://{서브도메인}.0022222.xyz
공유기 관리 VPN 접속 후 https://192.168.0.254

Gitea 레포지토리 (GitLab에서 마이그레이션 완료 — 33개)

Gitea (https://git.0022222.xyz)
│
├── cheeserush (15)
│   ├── at-thermo          ├── cm               ├── cm-back
│   ├── cm-monorepo        ├── cheeseboard      ├── be-template
│   ├── fobl_landingpage   ├── homepage         ├── jenkins_test
│   ├── medigo-poc         ├── onboarding       ├── schindler-sso
│   ├── suneeds-homepage   ├── tb_mvp_back      └── tb_mvp_front
│
├── bjsl (7)
│   ├── bjsl-admin-app     ├── bjsl-admin-web   ├── bjsl-back
│   ├── bjsl-forus-web     ├── bjsl-monorepo    ├── bjsl-user-app
│   └── bjsl-user-app-android
│
├── chordcourse (3)
│   ├── back               ├── deploy           └── front
│
├── groupware (3)
│   ├── back-end           ├── cheeseoffice-landing └── front-end
│
├── okmoneyletter (3)
│   ├── admin-front        ├── back             └── front
│
├── mini-apps (1)
│   └── seoul-metro-time
│
└── rush (1)
    └── signal_arena

보안 긴급 조치 (Phase 0.5)

즉시 삭제할 포트포워딩

규칙 이유
TB_mysql (33306) DB 외부 노출
Groupware_mysql (33307) DB 외부 노출
bjsrtest_mysql (33308) DB 외부 노출
CC_mysql (10512) DB 외부 노출
jenkins (8889) 관리 페이지 노출
BM_rdp (2765) 미사용 장비 RDP
flask_test (5000) 미사용 장비
rdp (2588) 미사용 장비 RDP
kisa_test (9797) 테스트용
bjsrtest_frt1 (13000) 테스트용
bjsrtest_frt2 (13001) 테스트용

서버 보안 조치

  • PostgreSQL: listen_addresses → localhost
  • SSH: PasswordAuthentication → no
  • MySQL Docker: 0.0.0.0 바인딩 → 127.0.0.1 (tb-db, cm-db, cheeseboard-db)
  • 불필요 사용자 계정 정리

Caddy 전환 후 추가 삭제 가능 (레거시 포트포워딩)

규칙 조건
모든 개별 서비스 포트 (10500~15005) Caddy 서브도메인으로 대체 완료 시
ssh (24242) VPN으로만 접속 시
gitlab_hook (5050) Gitea webhook 전환 후
lets_encrypt (80→10080) 80→80 변경 또는 Caddy 직접 수신

목표 구조 (TO-BE): Proxmox + 서브도메인 기반

                        ┌─────────────────────────────────────┐
                        │         ISP (SK브로드밴드)            │
                        └──────────────┬──────────────────────┘
                                       │
                        ┌──────────────┴──────────────────────┐
                        │    TP-Link Archer AXE75              │
                        │    포트포워딩: 80, 443 → .101        │
                        │    WireGuard VPN: 51820/UDP          │
                        └──────────────┬──────────────────────┘
                                       │
          ┌────────────────────────────┴────────────────────────────┐
          │              Proxmox 호스트 (192.168.0.100)              │
          │              SSD / i9-10900K / 64GB                     │
          │                                                        │
          │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────┐ ┌─────┐ │
          │  │CT101    │ │CT102    │ │CT103    │ │CT104 │ │CT105│ │
          │  │Caddy    │ │Gitea    │ │Apps     │ │DB    │ │CI   │ │
          │  │.101     │ │.102     │ │.103     │ │.104  │ │.105 │ │
          │  │:80/:443 │ │:3000    │ │Docker   │ │PG    │ │Jenk │ │
          │  │         │→│         │ │TB,CM,CB │ │MySQL │ │Gitea│ │
          │  │         │→│         │ │GW,CC    │ │      │ │Runr │ │
          │  └─────────┘ └─────────┘ └─────────┘ └──────┘ └─────┘ │
          └────────────────────────────────────────────────────────┘

  외부 → :80/:443 → CT101 (Caddy) → 서브도메인별 라우팅
  VPN  → 직접 접근 (Proxmox :8006, Jenkins, DB 등)

IP 할당

IP 역할 비고
192.168.0.254 TP-Link 라우터 관리 웹UI
192.168.0.100 Proxmox 호스트 관리 웹UI (8006)
192.168.0.101 CT: Reverse Proxy Caddy — 외부 유일 진입점
192.168.0.102 CT: Gitea GitLab 대체
192.168.0.103 CT: 웹앱 (Docker) TrainBoard, CM, CheeseBoard, GroupWare 등
192.168.0.104 CT: DB PostgreSQL + MySQL (내부만 접근)
192.168.0.105 CT: Jenkins/CI Jenkins + Gitea Runner

라우터 포트포워딩 (최종)

외부 포트 내부 대상 용도
80 192.168.0.101:80 HTTP → HTTPS 리다이렉트 + Let's Encrypt
443 192.168.0.101:443 모든 HTTPS 트래픽
51820/UDP (라우터 자체) WireGuard VPN

→ 기존 포트포워딩 규칙 전부 폐쇄 → 외부에서는 80/443/51820만 열림 → SSH, DB, 관리 포트는 VPN 전용

서브도메인 → 서비스 매핑 (최종)

서브도메인 백엔드 비고
git.0022222.xyz 192.168.0.102:3000 Gitea
tb.0022222.xyz 192.168.0.103:10500 TrainBoard API
cm.0022222.xyz 192.168.0.103:10501 CultureMakers API
cb.0022222.xyz 192.168.0.103:10590 CheeseBoard API
gw.0022222.xyz 192.168.0.103:15002 GroupWare
gw-qa.0022222.xyz 192.168.0.103:15005 GroupWare QA
cc.0022222.xyz 192.168.0.103:10513 ChordCourse

VPN 전용 접근

대상 접근 방법
Proxmox 관리 https://192.168.0.100:8006
Jenkins http://192.168.0.105:8080
DB (MySQL/PG) 192.168.0.104:3306/5432
라우터 관리 https://192.168.0.254

DNS 레코드 (0022222.xyz — Cloudflare)

*.0022222.xyz    A    39.122.244.108
0022222.xyz      A    39.122.244.108

참고: WAN IP가 동적이므로 DDNS 설정 또는 고정 IP 전환 권장


마이그레이션 순서

Phase 0: 기본 인프라 완료

  • 서버 상태 파악 (server-audit.md)
  • SSH 키 설정 (coala@192.168.0.100, brandon 계정 추가)
  • 라우터 교체 (FortiGate → TP-Link, FortiGate 제거)
  • TP-Link LAN IP 변경 (.1 → .254)
  • TP-Link DHCP 범위 설정 (.200~.253)
  • 서버 게이트웨이 변경 (.1 → .254)
  • WireGuard VPN 설정 (brandon: 10.5.5.2)
  • 외부 접속 확인 (SSH, GitLab, 서비스들)

Phase 0.7: Caddy + Gitea + 마이그레이션 완료

  • Caddy v2.11.2 설치 (리버스 프록시, auto SSL)
  • Cloudflare DNS 서브도메인 10개 설정 (0022222.xyz)
  • Gitea 설치 (Docker, :3000)
  • GitLab → Gitea 전체 마이그레이션 (33개 레포, 7개 org)
  • GitLab HTTP 전환 (:8443, Caddy 뒤로)
  • 외부 HTTPS 접속 확인 (git/tb/cm/cb 등)

Phase 0.5: 보안 긴급 조치 ← 다음

  • DB 포트포워딩 삭제 (33306, 33307, 33308, 10512)
  • Jenkins 포트포워딩 삭제 (8889)
  • 미사용 포트포워딩 삭제 (RDP, flask_test, kisa_test, bjsrtest)
  • PostgreSQL listen_addresses → localhost
  • MySQL Docker 바인딩 → 127.0.0.1
  • SSH 비밀번호 로그인 비활성화
  • 레거시 포트포워딩 정리 (Caddy 서브도메인으로 대체된 것들)
  • lets_encrypt 포트포워딩 수정 (80→10080 → 80→80)

Phase 1: SSD 도착 전 준비

  • 전체 백업 실행 (GitLab, DB, Docker 볼륨, 설정파일, 인증서)
  • 백업 스크립트 작성
  • docker-compose 정리
  • GitLab 서비스 중단 (Gitea로 완전 전환 후)
  • CI/CD 파이프라인 Gitea webhook으로 전환

Phase 2: SSD 도착 후 Proxmox 설치

  • SSD에 Proxmox VE 설치
  • 네트워크 브릿지 설정 (vmbr0 → 192.168.0.0/24)
  • CT 생성: 101 (Caddy), 102 (Gitea), 103 (Apps), 104 (DB), 105 (Jenkins)
  • 각 CT에 고정 IP 할당

Phase 3: 서비스 이관

  • DB 복원 (PostgreSQL, MySQL)
  • Gitea 데이터 이관
  • Docker 앱 배포
  • Jenkins 복원
  • Caddy 리버스 프록시 설정
  • SSL 인증서 발급 확인 (Caddy 자동)

Phase 4: 전환

  • 라우터 포트포워딩 변경 (80/443 → .101)
  • 기존 포트 포워딩 전부 제거
  • DNS 최종 확인
  • 검증 후 기존 HDD Ubuntu 보관 (롤백용)

참고

도메인

도메인 레지스트라 용도 만료일
0022222.xyz Cloudflare 현재 서브도메인 (임시) 2027-02-22
softk.io - 주 도메인 (추후 전환) -
cheeserush.co - 이전 도메인 (비활성) -

서버 하드웨어

  • CPU: Intel i9-10900K (10C/20T)
  • RAM: 64GB
  • Disk: HDD 2TB (191GB 사용) → SSD 마이그레이션 예정
  • VT-x: 지원 (Proxmox 가능)

계정

대상 계정 비고
서버 SSH brandon (NOPASSWD sudo) ssh -p 24242 brandon@39.122.244.108
서버 SSH coala (기존) 키 인증 설정됨
Gitea 관리자 brandon https://git.0022222.xyz