networking MikroTik HomeServer BGP

BGP 지원 라우터로의 여정 - KT 공유기에서 MikroTik으로

홈 쿠버네티스에서 BGP 피어링이 필요해서 MikroTik을 도입했습니다. KT 공유기에서 MikroTik으로 마이그레이션한 과정을 공유합니다.

BGP가 필요하다고 생각했다

홈 쿠버네티스 클러스터에서 Cilium Gateway API를 사용하려고 했습니다. 여러 설정을 시도했는데, 외부에서 접속이 안 됩니다.

L2 Announcement로 VIP를 광고하는 상태에서 kubeProxyReplacement 활성화 등을 시도해봐도 동작하지 않아서, “라우팅 레벨에서 직접 처리하는 BGP면 다르지 않을까?”라는 생각이 들었습니다. 문제는 집에 있는 KT 공유기가 BGP를 지원하지 않는다는 것.

결국 BGP를 지원하는 라우터로 교체하기로 했습니다.

스포일러: 나중에 알고 보니 진짜 원인은 Cilium v1.18.5의 hostNetwork reconciler 버그였습니다. 자세한 내용은 Gateway API 전환기 (2)에서.


MikroTik 선택

홈랩 예산으로 BGP를 지원하는 라우터를 찾아봤습니다.

선택 기준:

  • BGP 지원 필수
  • 10만원대 가격
  • GUI 관리 도구 지원

MikroTik hEX S (RB760iGS)를 선택했습니다.

항목스펙
포트5x Gigabit Ethernet
OSRouterOS
BGP지원
관리 도구WinBox (GUI)
가격~13만원

Ubiquiti EdgeRouter나 pfSense도 고려했지만, 가격 대비 기능이 MikroTik이 가장 적합했습니다. WinBox라는 GUI 도구를 제공하는 점도 장점입니다.

MikroTik hEX S 설치

MikroTik hEX S 설치


마이그레이션 전략

기존 네트워크를 최대한 유지하면서 라우터만 교체하는 전략을 세웠습니다.

AS-IS 구성:

architecture-beta
group internet(cloud)[Internet]
group home(server)[Home Network]
service isp(internet)[ISP] in internet
service giga(server)[GIGA UTP] in home
service ktrouter(server)[KT Router] in home
service node1(server)[node1] in home
service node2(server)[node2] in home
service node3(server)[node3 GPU] in home
isp:R --> L:giga
giga:R --> L:ktrouter
ktrouter:R --> L:node1
ktrouter:R --> L:node2
ktrouter:R --> L:node3

KT 공유기가 라우터 + 스위치 + WiFi AP 역할을 모두 담당하고 있었습니다.

이전할 설정:

  • DHCP 고정 할당 (MAC-IP 매핑)
  • 포트 포워딩 규칙

전략: KT 공유기의 라우터 기능만 MikroTik으로 이전하고, 스위치 + WiFi AP 역할은 그대로 유지


물리 구성 변경

MikroTik을 라우터로, KT 공유기를 스위치 + WiFi AP로 구성했습니다.

architecture-beta
group internet(cloud)[Internet]
group home(server)[Home Network]
service isp(internet)[ISP] in internet
service giga(server)[GIGA UTP] in home
service mikrotik(server)[MikroTik hEX S] in home
service ktswitch(server)[KT Switch WiFi] in home
service node1(server)[node1] in home
service node2(server)[node2] in home
service node3(server)[node3 GPU] in home
isp:R --> L:giga
giga:R --> L:mikrotik
mikrotik:R --> L:ktswitch
ktswitch:R --> L:node1
ktswitch:R --> L:node2
ktswitch:R --> L:node3

케이블 연결:

  1. ISP → GIGA UTP → MikroTik ether1 (WAN)
  2. MikroTik ether2 → KT 공유기 LAN 포트

KT 공유기 설정:

  • DHCP 서버 비활성화
  • 라우터 기능 끔 (브릿지 모드)

기존 WiFi와 유선 연결이 모두 그대로 유지됩니다.


MikroTik 기본 설정

WinBox로 기존 네트워크 설정을 그대로 이전했습니다.

WinBox Neighbor Discovery Mac에 연결 후 WinBox에서 MikroTik 장비가 검색된 화면

항목설정값
LAN IP172.30.1.1/24
DHCP Pool172.30.1.150-200
DNS8.8.8.8, 8.8.4.4

DHCP 고정 할당:

  • node1: 172.30.1.20
  • node2: 172.30.1.70
  • node3-gpu: 172.30.1.82

동작 확인 - 예상치 못한 문제들

라우터 교체 후 몇 가지 추가 작업이 필요했습니다.

공인 IP 변경 → Route53 업데이트

라우터 교체로 공인 IP가 변경되었습니다.

<기존 공인 IP> → <새 공인 IP>

Route53에 예전 IP가 설정되어 있어서 도메인 접속이 안 됐습니다. *.heeho.net A 레코드를 새 공인 IP로 업데이트해서 해결했습니다.

Hairpin NAT - 내부에서 도메인 접속

외부에서는 접속되는데, 내부에서 grafana.heeho.net 접속 시 타임아웃이 발생했습니다.

KT 공유기에서는 문제없이 됐었는데, 왜 MikroTik에서는 안 될까요?

원인: KT 공유기 같은 소비자용 라우터는 Hairpin NAT(내부 → 공인IP → 내부)을 자동으로 처리해준다고 합니다.

sequenceDiagram
participant Client as 내부 클라이언트
participant Router as MikroTik
participant Server as 내부 서버
Client->>Router: grafana.heeho.net 요청
Note over Router: DNS: <공인 IP>
Note over Router: dst-nat: 공인IP:443 → VIP(172.30.1.7):443
Note over Router: src-nat: 172.30.1.x → 172.30.1.1
Router->>Server: 요청 전달 (VIP 경유)
Server->>Router: 응답
Router->>Client: 응답 전달

해결: dst-address 기준 dstnat + srcnat masquerade 조합으로 Hairpin NAT 구성

MikroTik NAT 규칙

현재 스크린샷에서는 누락되었지만, 기존 NGINX Ingress(172.30.1.6)로 향하는 포트포워딩도 그대로 유지했습니다. Gateway API로 전환하는 동안 서비스 중단을 최소화하며 병행 운용하기 위해서입니다.

참고: 현재 포트포워딩은 VIP(172.30.1.7)를 가리키며, BGP 기반 라우팅으로 동작합니다. 이 구성은 Gateway API 전환기 (2)에서 자세히 다룹니다.

Kubernetes 인증서 문제

kubectl 명령 시 인증서 오류가 발생했습니다.

x509: certificate is valid for 10.233.0.1, 172.30.1.20, 127.0.0.1,
<기존 공인 IP>, ... not <새 공인 IP>

K8s API 인증서의 SAN(Subject Alternative Name)에 새 공인 IP가 없어서 발생한 문제입니다.

임시 해결: kubeconfig에서 공인 IP 대신 내부 IP(172.30.1.20:6443) 사용


최종 확인

항목상태비고
MikroTik 기본 설정LAN IP, DHCP, DNS
포트 포워딩dst-address 기준
Hairpin NAT내부→공인IP→내부 동작
일반 인터넷curl google.com
외부에서 서비스 접속grafana.heeho.net
내부에서 서비스 접속Hairpin NAT 경유
kubectl내부 IP 사용

결과 - BGP 준비 완료

완료된 것:

  • KT 공유기 → MikroTik 라우터 마이그레이션
  • 기존 서비스 정상 동작 확인

얻은 것:

  • BGP 지원 라우터
  • 세밀한 NAT 제어 (RouterOS)
  • CLI 기반 설정 관리

다음 단계: MikroTik과 Cilium BGP 피어링으로 VIP 기반 동적 라우팅 구현

다음 콘텐츠: Gateway API 전환기 (2) - MikroTik과 Cilium BGP 피어링, Cilium 버그 해결, VIP 기반 동적 라우팅

관련 콘텐츠

댓글