DDNS와 포트포워딩을 활용한 원격 서버 관리 및 모니터링 시스템

문한성·2025년 2월 26일
1

프로젝트 배경

우리 회사는 최근 운영 중인 4대의 물리 서버를 전력 소비 문제로 인해 본사에서 다른 사무실로 이전해야 했습니다. 이러한 물리적 이전에도 불구하고 IT 관리자로서 이 서버들을 효율적으로 원격 관리할 수 있는 방법이 필요했습니다. 이 블로그에서는 제한된 자원과 간단한 네트워크 구성을 활용해 물리 서버를 원격으로 관리하는 시스템을 구축한 경험을 공유합니다.

핵심 요구사항

  1. 본사에서 원격 사무실의 서버에 안전하게 접근할 수 있어야 함
  2. 각 서버의 SSH 접속과 서비스 포트에 대한 접근이 가능해야 함
  3. 네트워크 장비 설정 변경이 필요할 때도 원격으로 관리할 수 있어야 함
  4. 비용 효율적인 솔루션이어야 함

아키텍처

아키텍처 개요

우리가 구현한 시스템의 주요 구성 요소는 다음과 같습니다:

  1. KT Giga WiFi 공유기: 원격 사무실의 인터넷 게이트웨이 역할
  2. No-IP DDNS 서비스: 동적 IP 환경에서도 일관된 도메인 이름으로 접근
  3. 포트 포워딩 설정: 각 서버 및 서비스에 대한 명확한 포트 매핑
  4. 관리용 노트북: 네트워크 장비 직접 관리를 위한 현장 장비
  5. AnyDesk: 관리용 노트북에 원격 접속하기 위한 도구
  6. Zabbix Agent: 각 서버에 설치되어 모니터링 데이터 수집
  7. Zabbix 서버: 모니터링 데이터 수집 및 분석
  8. Grafana: 시각화 대시보드 및 알림 관리
  9. Slack 웹훅: 실시간 알림 전달

세부 구현

DDNS 설정

원격 사무실의 인터넷 연결은 대부분 동적 IP를 사용하기 때문에, 고정된 접근 방법이 필요했습니다. 이를 위해 No-IP 서비스에서 DDNS 도메인을 구매하여 KT Giga WiFi 공유기에 설정했습니다.

DDNS 설정:
- 서비스 제공자: No-IP
- 도메인 이름: example.no-ip.com
- 업데이트 주기: 10분

포트 포워딩 구성

KT Giga WiFi 공유기에서 다음과 같이 포트 포워딩을 설정했습니다:

서버외부 SSH 포트내부 SSH 포트서비스 포트 범위
서버 12100192.168.0.101:222101-2199
서버 22200192.168.0.102:222201-2299
서버 32300192.168.0.103:222301-2399
서버 42400192.168.0.104:222401-2499

이러한 설정을 통해 외부에서 example.no-ip.com:2100으로 접속하면 첫 번째 서버의 SSH 포트(22)로 연결됩니다. 마찬가지로 각 서버가 제공하는 서비스도 할당된 포트 범위를 통해 접근할 수 있습니다.

관리용 노트북 설정

원격 사무실에 관리용 노트북을 배치하여 네트워크 장비에 대한 물리적 접근이 필요할 때 사용할 수 있도록 했습니다. 이 노트북에는 다음과 같은 설정을 적용했습니다:

  1. AnyDesk 설치 및 자동 시작 설정
  2. 고정 비밀번호 및 무인 접속 허용
  3. 네트워크 진단 도구 설치 (Wireshark, iperf 등)
  4. 공유기 관리 웹 인터페이스 북마크

접속 및 모니터링 시나리오

일반적인 서버 관리

본사에서 서버에 접속하여 일상적인 관리 작업을 수행하는 경우:

# 서버 1에 SSH 접속
ssh username@example.no-ip.com -p 2100

# 서버 2에 SSH 접속
ssh username@example.no-ip.com -p 2200

# 서버 3의 웹 서비스 접속 (예: 8080 포트가 2301로 포워딩된 경우)
http://example.no-ip.com:2301

네트워크 설정 변경

네트워크 설정 변경이 필요한 경우:

  1. AnyDesk를 통해 관리용 노트북에 원격 접속
  2. 웹 브라우저를 통해 공유기 관리 인터페이스 접속 (일반적으로 192.168.0.1)
  3. 필요한 설정 변경 (포트 포워딩, 방화벽 규칙 등)
  4. 설정 저장 및 공유기 재부팅(필요한 경우)

모니터링 시스템 구성

각 서버의 상태를 실시간으로 모니터링하기 위해 다음과 같은 설정을 구현했습니다:

Zabbix Agent 설정

모든 서버에 Zabbix Agent를 설치하여 시스템 메트릭을 수집합니다:

# Zabbix Agent 설치
sudo apt-get install zabbix-agent

# Zabbix Agent 설정
sudo vi /etc/zabbix/zabbix_agentd.conf

# 주요 설정 내용
Server=<Zabbix 서버 IP>
ServerActive=<Zabbix 서버 IP>
Hostname=<서버 식별 이름>

Grafana와 Zabbix 연동

Zabbix에서 수집된 데이터를 Grafana에서 시각화하기 위해 다음과 같이 설정했습니다:

  1. Grafana에 Zabbix 데이터 소스 추가
  2. 주요 모니터링 대시보드 구성:
    • 서버별 CPU, 메모리, 디스크 사용량
    • 네트워크 트래픽
    • 서비스 상태
    • 로그 이벤트

Slack 알림 설정

중요한 이벤트 발생 시 즉시 대응할 수 있도록 Grafana에서 Slack으로 알림을 전송하는 웹훅을 구성했습니다:

  1. Slack에서 웹훅 URL 생성
  2. Grafana에서 알림 채널로 Slack 추가
  3. 다음과 같은 이벤트에 대한 알림 규칙 설정:
    • 서버 다운
    • CPU 사용량 80% 이상
    • 메모리 사용량 90% 이상
    • 디스크 공간 90% 이상 점유
    • 특정 오류 로그 발생

보안 고려사항

이 구성에서는 다음과 같은 보안 조치를 적용했습니다:

  1. SSH 키 기반 인증: 모든 서버에 비밀번호 대신 SSH 키 인증 적용
  2. 비표준 포트 사용: 표준 SSH 포트(22) 대신 커스텀 포트(2100, 2200 등) 사용
  3. 제한된 포트 개방: 필요한 서비스 포트만 선택적으로 개방
  4. 방화벽 설정: KT 공유기 방화벽에서 접속 IP 제한 (가능한 경우)
  5. AnyDesk 보안: 강력한 비밀번호와 2단계 인증 적용

장단점 분석

장점

  • 별도의 VPN 구성 없이 간단하게 원격 접속 환경 구축
  • 최소한의 장비와 서비스로 구현 가능
  • 각 서버별로 명확하게 구분된 포트 할당으로 관리 용이
  • 물리적인 네트워크 장비 접근을 위한 대체 방법 확보

단점

  • 공용 인터넷을 통한 접속으로 트래픽 암호화에 의존
  • 포트 개방으로 인한 보안 노출 가능성
  • 인터넷 연결 문제 발생 시 DDNS 업데이트 지연 가능성
  • 대역폭 제한으로 인한 성능 제약

모니터링 대시보드 구성

Grafana를 통해 다음과 같은 주요 대시보드를 구성했습니다:

  1. 개요 대시보드: 모든 서버의 상태를 한눈에 파악할 수 있는 뷰
  2. 서버별 상세 대시보드: 각 서버의 자세한 성능 메트릭
  3. 네트워크 대시보드: 인터넷 연결 상태 및 네트워크 트래픽 모니터링
  4. 알림 히스토리: 발생한 알림의 기록과 해결 상태

알림 관리 워크플로우

  1. 문제 발생 시 Grafana에서 Slack으로 즉시 알림 전송
  2. 알림 메시지에는 문제 내용, 심각도, 발생 시간, 대시보드 링크 포함
  3. 운영 팀은 Slack을 통해 알림 확인 후 조치
  4. 해결 후 알림 상태 업데이트 및 기록 유지

향후 개선 방향

현재 구성에서 더 발전시킬 수 있는 부분은 다음과 같습니다:

  1. VPN 구축: OpenVPN이나 WireGuard를 활용한 보안 터널 구성
  2. 자동화된 백업: 중요 설정에 대한 정기적인 백업 자동화
  3. 이중화: 인터넷 연결 또는 공유기 장애에 대비한 이중화 구성
  4. 모니터링 고도화:
    • 로그 집중화 시스템 도입 (ELK 스택)
    • 자동화된 문제 해결 스크립트 연동
    • AI 기반 이상 감지 시스템 도입

모니터링 시스템의 효과

Zabbix와 Grafana, Slack 연동을 통한 모니터링 시스템 도입 이후 다음과 같은 효과를 얻을 수 있었습니다:

  1. 장애 감지 시간 단축: 이전에는 사용자 보고를 통해 인지되던 문제들이 이제는 평균 60초 이내에 감지됨
  2. 선제적 대응 가능: 리소스 사용량 추이를 분석하여 문제 발생 전에 조치 가능
  3. 원격 관리 효율성 향상: 수동 점검 시간을 줄이고 실제 문제 해결에 집중
  4. 서비스 가용성 향상: 연속 모니터링과 빠른 대응으로 전체 가용성이 99.8%로 향상
  5. 장애 해결 시간 단축: 자세한 메트릭과 로그 정보를 통해 문제 원인 파악 시간 단축

결론

이 프로젝트는 제한된 자원과 간단한 네트워크 장비만으로도 효과적인 원격 서버 관리 및 모니터링 시스템을 구축할 수 있음을 보여줍니다. DDNS와 포트 포워딩의 조합은 물리적 접근이 제한된 환경에서 서버 관리를 위한 기반을 제공하며, Zabbix와 Grafana, Slack을 연동한 모니터링 시스템은 원격 관리의 한계를 극복하는 데 큰 도움이 됩니다.

물론 보안과 확장성 측면에서는 개선할 부분이 있지만, 비용 효율적인 솔루션으로서 충분한 가치가 있으며, 향후 인프라 발전에 따라 더 강화된 솔루션으로 진화시킬 수 있는 기반이 됩니다.

무엇보다 Grafana의 시각화 기능과 Slack 알림 통합을 통해 물리적으로 떨어진 서버들을 마치 눈앞에 있는 것처럼 모니터링하고 관리할 수 있게 되었습니다. 이는 IT 인프라 관리에 있어 물리적 위치의 제약을 극복하는 좋은 사례라 할 수 있습니다.

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글

관련 채용 정보