IT 비전공자를 위한 네트워크 기초
네트워크 첫걸음
+도메인 하나로 우리 집 리눅스 서버까지
IP · DNS · 라우팅 · 공유기 · VPN — 택배와 전화번호부로 이해하기
오늘의 여정
개념 6개를 익힌 뒤, 실제로 도메인을 사서 집 서버에 연결합니다
네트워크
택배망처럼 데이터를 나르는 길
IPv4 주소
인터넷 세상의 집 주소
DNS
이름을 주소로 바꾸는 전화번호부
라우팅
길을 찾아 주는 내비게이션
인터넷 공유기
우리 집 관리실 겸 교환원
VPN
남이 못 보는 비밀 통로
실전 연결
후이즈 → Cloudflare → 공유기 → 서버
안전하게 운영
보안 점검과 문제 해결 순서
네트워크란?
컴퓨터끼리 택배를 주고받는 약속된 시스템
네트워크는 거대한 택배망입니다
택배를 보낼 때
- 상자에 보내는 사람·받는 사람 주소를 적는다
- 택배 회사가 여러 물류센터를 거쳐 배달한다
- 송장 양식이 정해져 있어 누구나 같은 방식으로 보낸다
데이터를 보낼 때
- 데이터 조각(패킷)에 출발지·목적지 IP를 적는다
- 라우터들이 여러 구간을 거쳐 전달한다
- 프로토콜(TCP/IP)이라는 공통 규칙을 따른다
꼭 알아야 할 세 가지 단어
택배로 바꿔 생각하면 어렵지 않습니다
패킷
큰 파일도 작은 상자 여러 개로 나눠 보내고, 받는 쪽에서 다시 조립합니다.
+TCP · UDP
TCP는 받았는지 확인하는 등기우편, UDP는 확인 없이 빠르게 뿌리는 전단지입니다.
+포트
IP가 건물 주소라면 포트는 호수입니다. 웹은 80·443호, SSH는 22호에 삽니다.
+IPv4 주소
인터넷에 연결된 모든 기기의 집 주소
IP 주소는 인터넷의 집 주소입니다
도로명 주소
- 경기도 군포시 ○○로 12
- 주소가 있어야 택배가 찾아온다
- 같은 주소가 두 집이면 배달 사고
IPv4 주소
- 192.168.0.10 처럼 숫자 4묶음
- 각 묶음은 0~255, 점(.)으로 구분
- 전체 약 43억 개 → 이미 부족 → IPv6 등장
공인 IP와 사설 IP
회사 대표번호와 내선번호를 떠올리세요
공인 IP
전 세계에서 유일한 주소. 통신사가 우리 집 공유기에 1개 줍니다. 밖에서 찾아올 때 쓰는 번호.
+사설 IP
집 안에서만 통하는 주소. 192.168.x.x, 10.x.x.x, 172.16~31.x.x. 옆집에도 똑같은 번호가 있어도 됩니다.
+직접 확인
사설 IP: 리눅스에서 ip addr
공인 IP: curl ifconfig.me
두 값이 다르면 공유기 뒤에 있는 것!
같은 동네, 다른 동네
서브넷과 게이트웨이 — 우리 동네 안은 직접, 밖은 우체국을 거쳐서
서브넷 /24
192.168.0.1 ~ 192.168.0.254는 한 동네. 서로 직접 대화할 수 있습니다.
+게이트웨이
동네 밖으로 나가는 모든 짐은 공유기(보통 192.168.0.1)에 맡깁니다.
+확인 명령
ip route
→ default via 192.168.0.1
'모르는 곳은 공유기로 보내라'는 뜻
DNS
사람이 기억하는 이름을 컴퓨터의 주소로
DNS는 인터넷의 전화번호부입니다
전화 걸 때
- '엄마'를 누르면 폰이 번호로 바꿔 건다
- 번호를 몰라도 이름만 알면 된다
- 번호가 바뀌면 주소록만 고치면 끝
웹사이트 접속할 때
- naver.com → 223.130.x.x 로 바꿔 접속
- 숫자 IP를 외울 필요가 없다
- 서버 IP가 바뀌어도 DNS만 고치면 된다
이름 하나를 찾는 과정
처음 가는 가게 주소를 물어물어 찾아가는 것과 같습니다
내 PC
최근에 찾은 적 있나? 수첩(캐시) 먼저 확인
리졸버
공유기·통신사 안내원에게 대신 찾아 달라고 부탁
루트 · TLD
'.com 담당은 저쪽'처럼 담당 부서를 안내
권한 네임서버
도메인 주인이 정한 답(예: Cloudflare)을 알려줌
IP 획득
받은 IP로 접속하고, 한동안 수첩에 기록(TTL)
DNS 레코드 — 전화번호부의 항목들
실습에서는 A 레코드 하나만 있어도 충분합니다
| 레코드 | 하는 일 | 생활 비유 | 예시 |
|---|---|---|---|
| A | 이름 → IPv4 주소 | 이름 옆에 적힌 전화번호 | server → 121.x.x.x |
| AAAA | 이름 → IPv6 주소 | 새 형식의 긴 번호 | server → 2001:db8::1 |
| CNAME | 이름 → 다른 이름(별명) | '김부장' = '김철수' | www → myhome-lab.com |
| MX | 메일 받을 서버 지정 | 우편물 수령 장소 | mail.myhome-lab.com |
| TXT | 소유 인증·설정 메모 | 주소록 메모란 | 인증 문자열 |
| NS | 이 도메인의 전화번호부 담당 | 어느 114에 물어볼지 | xxx.ns.cloudflare.com |
라우팅
수많은 갈림길에서 다음 길을 고르는 일
라우팅은 택배 허브의 길 안내입니다
군포 → 부산 택배
- 군포 대리점 → 중앙 허브 → 부산 터미널
- 각 거점은 '다음 거점'만 알면 된다
- 길이 막히면 다른 경로로 돌아간다
내 PC → 해외 서버
- 공유기 → 통신사 → 국제망 → 목적지
- 각 라우터는 '다음 라우터'만 정한다
- 장애가 나면 우회 경로를 찾는다
라우팅 테이블 = 갈림길의 이정표
-
+
192.168.0.0/24 → 직접
같은 동네는 바로 전달
+ default (그 외 전부) → 공유기
모르는 곳은 동네 우체국에 맡김
+ traceroute 로 경로 보기
거쳐 가는 라우터가 한 줄씩 보임
$ ip route
+default via 192.168.0.1 dev eth0
+192.168.0.0/24 dev eth0 src 192.168.0.10
+
+$ traceroute google.com
+ 1 192.168.0.1 1.2 ms
+ 2 10.x.x.x 4.8 ms
+ 3 ...
+12 142.250.x.x 35.1 ms인터넷 공유기
공인 IP 하나를 온 가족이 나눠 쓰게 해 주는 장치
공유기가 하는 네 가지 일
작은 상자 하나가 아파트 관리실 역할을 모두 맡습니다
라우터
동네 우체국집 안과 인터넷 사이에서 패킷의 길을 정합니다.
DHCP
호텔 프런트기기가 들어오면 빈 방(사설 IP)을 자동으로 배정합니다.
NAT
전화 교환원내선(사설 IP)을 대표번호(공인 IP)로 바꿔 밖에 연결합니다.
방화벽·Wi-Fi
경비실밖에서 함부로 들어오는 연결을 막고 무선 신호를 뿌립니다.
NAT와 포트포워딩
교환원에게 '외부에서 2222번 찾으면 서버 내선으로 돌려주세요'라고 부탁해 두는 것
외부 사용자
카페 노트북에서 내 공인 IP:2222로 접속
공유기(교환원)
규칙표 확인: 2222 → 192.168.0.10:22
리눅스 서버
내선 22번(SSH)에서 연결을 받음
주소가 바뀌는 문제와 해결책
서버의 주소는 안 바뀌게, 집의 공인 IP는 바뀌어도 따라가게
DHCP 고정 할당
서버의 MAC 주소에 192.168.0.10을 고정. 포트포워딩 대상이 바뀌지 않습니다.
+유동 공인 IP
가정용 회선은 공인 IP가 재부팅·계약 변경 시 바뀔 수 있습니다.
+DDNS
IP가 바뀌면 DNS 기록을 자동으로 고쳐 줍니다. 뒤에서 Cloudflare API로 직접 구현합니다.
+VPN
인터넷 위에 나만의 비밀 통로를 놓는 기술
VPN은 회사 출입증이 달린 비밀 통로입니다
사원증 들고 출근
- 출입증이 있어야 사내에 들어간다
- 들어가면 내부 회의실을 자유롭게 쓴다
- 밖에서 보면 누가 무엇을 하는지 모른다
VPN 접속
- 인증한 기기만 집·회사망에 들어온다
- 접속하면 사설 IP(192.168.x)로 바로 통신
- 통로 안의 데이터는 모두 암호화된다
포트포워딩 vs VPN
처음엔 포트포워딩으로 원리를 배우고, 운영은 VPN 방식을 권장합니다
| 비교 | 포트포워딩 | VPN (WireGuard · Tailscale) |
|---|---|---|
| 비유 | 건물 정문 옆 쪽문을 열어 둠 | 출입증 있는 사람만 쓰는 비밀 통로 |
| 외부 노출 | 열어 둔 포트가 전 세계에 보임 | 통로 입구 하나(또는 없음) |
| 설정 난이도 | 쉬움 — 공유기 설정만 | 보통 — 각 기기에 앱 설치 |
| 도메인 필요 | 있으면 편리(오늘 실습) | 없어도 됨 |
| 추천 용도 | 학습·웹 서비스 공개 | SSH·관리 화면 등 나만 쓰는 접속 |
실전: 집 서버 접속
도메인 → Cloudflare DNS → 공유기 → 리눅스
전체 그림 한 장
ssh -p 2222 user@server.myhome-lab.com 을 입력하면 일어나는 일
내 노트북
server.myhome-lab.com 의 IP를 묻는다
Cloudflare DNS
A 레코드: 우리 집 공인 IP를 알려준다
집 공유기
2222번 문 → 192.168.0.10:22로 돌린다
리눅스 서버
SSH 키를 확인하고 접속을 허락한다
후이즈(whois.co.kr)에서 도메인 구입
가게 상호를 등록하는 일 — 이름의 주인이 됩니다
-
+
- 1
이름 검색
원하는 이름과 확장자(.com, .kr, .net 등)가 비어 있는지 확인
+ - 2
구입 · 결제
보통 1년 단위. 만료되면 남이 가져갈 수 있으니 자동 연장 권장
+ - 3
소유자 정보 확인
연락받을 이메일을 정확히. 인증 메일을 놓치면 도메인이 정지될 수 있음
+ - 4
관리 화면 위치 기억
'도메인 관리 → 네임서버 변경' 메뉴를 다음 단계에서 씁니다
Cloudflare에 도메인 연결 (네임서버 변경)
전화번호부 관리 회사를 후이즈에서 Cloudflare로 바꾸는 일
-
+
- 1
Cloudflare 가입 · 도메인 추가
무료(Free) 요금제로 충분. 기존 DNS 기록을 자동으로 불러옴
+ - 2
네임서버 2개 받기
예: ada.ns.cloudflare.com / bob.ns.cloudflare.com (계정마다 다름)
+ - 3
후이즈에서 네임서버 교체
후이즈 기본 네임서버를 지우고 Cloudflare가 준 2개를 입력
+ - 4
활성화 기다리기
보통 수 분~몇 시간, 길면 최대 48시간. 완료되면 이메일로 알려줌
STEP 3 Cloudflare DNS 레코드 만들기
주황 구름(Proxied)은 웹 전용 — SSH는 반드시 회색 구름(DNS only)으로
| Type | Name | Content | Proxy | 용도 |
|---|---|---|---|---|
| A | server | 우리 집 공인 IP | 회색 (DNS only) | SSH 접속용 |
| A | @ | 우리 집 공인 IP | 주황 (Proxied) | 웹사이트 (80·443) |
| CNAME | www | myhome-lab.com | 주황 (Proxied) | www 붙여도 접속 |
공유기 설정 (ipTIME 기준)
관리실에 '서버 자리 지정'과 '쪽문 연결 규칙'을 등록하는 일
-
+
- 1
관리 화면 접속
브라우저에서 192.168.0.1 → 관리자 로그인 (초기 비밀번호는 꼭 변경)
+ - 2
서버 IP 고정
고급 설정 → 네트워크 관리 → 내부 네트워크 설정 → 수동 IP 할당: 192.168.0.10
+ - 3
포트포워딩 규칙
고급 설정 → NAT/라우터 관리 → 포트포워드 설정: 외부 2222 → 192.168.0.10:22 (TCP)
+ - 4
공인 IP 확인
공유기 첫 화면의 '외부 IP'와 curl ifconfig.me 값이 같은지 비교
STEP 5 리눅스 서버 준비와 접속
-
+
SSH 서버 설치
Ubuntu: openssh-server
+ 방화벽에서 22번만 허용
ufw로 필요한 문만 엽니다
+ 비밀번호 대신 키로 로그인
내 노트북의 공개키를 서버에 등록
+ 도메인으로 접속
외부 2222 → 내부 22로 연결됨
# server (192.168.0.10)
+$ sudo apt install -y openssh-server
+$ sudo ufw allow 22/tcp && sudo ufw enable
+
+# laptop
+$ ssh-keygen -t ed25519
+$ ssh-copy-id user@192.168.0.10
+
+# from outside (cafe, LTE)
+$ ssh -p 2222 user@server.myhome-lab.comSTEP 6 공인 IP가 바뀌어도 자동으로 (DDNS)
-
+
Cloudflare API 토큰 발급
권한: Zone · DNS · Edit (해당 도메인만)
+ Zone ID · Record ID 확인
대시보드 개요 화면과 API 조회로 확인
+ 5분마다 실행
crontab: */5 * * * * python3 ddns.py
+ 표준 라이브러리만 사용
pip 설치 없이 바로 실행
import json, os, urllib.request as u
+T=os.environ['CF_TOKEN']; Z=os.environ['CF_ZONE']
+R=os.environ['CF_RECORD']
+ip=u.urlopen('https://api.ipify.org').read().decode()
+api='https://api.cloudflare.com/client/v4'
+url=f'{api}/zones/{Z}/dns_records/{R}'
+body=json.dumps({'type':'A','name':'server',
+ 'content':ip,'ttl':300,'proxied':False}).encode()
+req=u.Request(url,data=body,method='PUT',headers={
+ 'Authorization':f'Bearer {T}',
+ 'Content-Type':'application/json'})
+print(json.load(u.urlopen(req))['success'], ip)문을 열었다면, 지키는 것도 내 몫
포트를 여는 순간 전 세계 자동 스캐너가 두드리기 시작합니다
비밀번호 로그인 끄기
sshd_config: PasswordAuthentication no — 키로만 접속
필요한 포트만 열기
포트포워딩 규칙을 최소로. 안 쓰는 규칙은 바로 삭제
반복 실패 차단
fail2ban으로 로그인 실패가 잦은 IP를 자동 차단
업데이트 습관
sudo apt update && sudo apt upgrade 를 주기적으로
관리 접속은 VPN으로
SSH는 Tailscale·WireGuard 안쪽에서만 열면 가장 안전
웹은 Cloudflare 뒤로
Proxied 또는 Cloudflare Tunnel로 집 IP를 숨김
안 될 때는 바깥에서 안쪽으로
택배가 안 오면 주소 → 건물 → 호수 → 사람 순서로 확인하듯
① 이름
dig +short server.myhome-lab.com 이 우리 집 공인 IP인가?
② 공인 IP
curl ifconfig.me 와 공유기 외부 IP가 같은가?
③ 쪽문
포트포워딩 규칙의 내부 IP·포트가 정확한가?
④ 서버
systemctl status ssh 실행 중? ufw가 22를 허용?
한 장으로 정리
개념마다 생활 속 짝꿍 하나만 기억하세요
네트워크
= 택배망
IP 주소
= 집 주소
포트
= 아파트 호수
DNS
= 전화번호부
라우팅
= 택배 허브 길 안내
공유기 · NAT
= 전화 교환원
VPN
= 출입증 비밀 통로
도메인
= 가게 상호
오늘의 과제
내 도메인으로 집(또는 실습실) 리눅스 서버에 접속하고, 접속 화면을 캡처해 제출하세요
+- dig 결과 · 공유기 포트포워딩 화면 · 외부(LTE)에서 ssh 접속 성공 화면
- 보너스: STEP 6 DDNS 스크립트를 cron에 등록하고 동작 로그 첨부