Network - 네트워크 기초(스위치, 라우터, 게이트웨이)

2026. 1. 5. 22:09·CKA

쿠버네티스 네트워킹(CNI, Service, Pod-to-Pod 통신, NAT, 라우팅)을 제대로 이해하려면 “리눅스에서 패킷이 어떻게 움직이는지”를 먼저 잡고 가는 게 가장 빠릅니다.
이 글에서는 OSI 같은 이론을 길게 하지 않고, 시스템 관리자/개발자 관점에서 실제로 무엇을 확인하고 어떻게 설정하는지 중심으로 정리합니다.


1) 네트워크는 “서로 도달할 수 있게 만든 연결”이다

클라우드든 온프레미스든, 컴퓨터 A와 B가 통신하려면 최소한 다음이 필요합니다.

  • 네트워크 인터페이스(물리/가상 NIC)
  • 같은 네트워크(서브넷)에 있음을 나타내는 IP
  • 같은 네트워크 안에서의 전달 장치(스위치)
  • 다른 네트워크로 넘어가려면 라우터 + 라우팅 테이블(게이트웨이)

2) 스위치: “같은 네트워크(서브넷) 내 통신”을 가능하게 하는 장치

예를 들어 네트워크가 192.168.1.0/24라고 가정합니다.

  • A: 192.168.1.10/24
  • B: 192.168.1.11/24

이 둘이 같은 스위치(혹은 같은 L2 네트워크)에 연결돼 있고, IP가 올바르게 설정되어 있다면 A ↔ B는 통신 가능합니다.

2.1 리눅스에서 인터페이스 확인: ip link

ip link
# 또는
ip link show eth0

2.2 IP 확인/설정: ip addr, ip addr add

ip addr
ip addr show eth0

# 임시로 IP 부여(재부팅 시 사라짐)
sudo ip addr add 192.168.1.11/24 dev eth0
sudo ip link set eth0 up

ip addr add로 한 설정은 보통 “임시”입니다. 영구 설정은 배포판별 네트워크 설정 파일(Netplan, ifcfg, NetworkManager 등)에서 합니다.


3) 라우터: “서로 다른 네트워크”를 연결하는 장치

이제 네트워크가 두 개 있다고 합시다.

  • 네트워크1: 192.168.1.0/24 (A, B)
  • 네트워크2: 192.168.2.0/24 (C, D)

예:

  • B: 192.168.1.11/24
  • C: 192.168.2.11/24

B가 C에 어떻게 가죠?
서브넷이 다르면 스위치만으로는 못 갑니다.
이때 “두 네트워크를 다리처럼 연결하는” 라우터가 필요합니다.

라우터는 두 네트워크에 각각 인터페이스를 가지고 IP를 가집니다.

  • 라우터(R):
    • 네트워크1 쪽 IP: 192.168.1.1
    • 네트워크2 쪽 IP: 192.168.2.1

4) 게이트웨이(Gateway): “밖으로 나가는 문”을 라우팅 테이블에 등록하는 것

네트워크를 방이라고 하면, 게이트웨이는 다른 방(다른 네트워크/인터넷)으로 나가는 문입니다.
시스템이 그 문을 통해 나가려면 “문이 어디인지” 알아야 하는데, 그게 라우팅 테이블입니다.

4.1 라우팅 테이블 확인: ip route (또는 route)

ip route
# 또는 구식
route -n

예를 들어 B가 192.168.2.0/24로 가는 길을 라우터 192.168.1.1로 지정하려면:

sudo ip route add 192.168.2.0/24 via 192.168.1.1

그러면 B는 “192.168.2.x로 가는 패킷은 192.168.1.1(라우터)로 보내라”를 알게 됩니다.

중요한 포인트: 한쪽(B)만 설정하면 끝이 아닙니다.
C도 다시 B 네트워크로 돌아가는 길을 알아야 왕복 통신이 됩니다.

C에도 반대 방향 라우팅이 필요합니다.

sudo ip route add 192.168.1.0/24 via 192.168.2.1

5) 기본 게이트웨이(Default Gateway): “모르는 목적지는 전부 여기로”

인터넷(수많은 네트워크)을 일일이 라우팅 테이블에 등록하는 건 불가능합니다. 그래서 기본 경로(default route) 를 둡니다.

기본 경로는 다음과 같은 의미입니다.

  • “내가 아는 경로(더 구체적인 라우트)가 없으면 전부 이 게이트웨이로 보내라”

표현은 보통 둘 다 같은 뜻입니다.

  • default
  • 0.0.0.0/0

설정 예:

sudo ip route add default via 192.168.1.1
# 또는
sudo ip route add 0.0.0.0/0 via 192.168.1.1

라우팅 테이블에서 gateway가 0.0.0.0로 보이는 엔트리는 보통 이런 의미로 해석합니다.

  • “이 목적지는 게이트웨이가 필요 없다(직접 연결된 네트워크다)”

예: 192.168.2.0/24 dev eth0 scope link 같은 형태


6) 리눅스 호스트를 “라우터”로 만들기: 핵심은 IP 포워딩

강의에서 가장 중요한 실습 포인트 중 하나가 이 부분입니다.

6.1 토폴로지 예시

(A) 192.168.1.5/24 ---- eth0  (B) 192.168.1.6/24
                         eth1  (B) 192.168.2.6/24 ---- (C) 192.168.2.5/24
  • B는 NIC가 2개(eth0, eth1)라서 양쪽 네트워크에 다 물려 있음
  • A가 C로 통신하려면 A는 “192.168.2.0/24는 B를 통해 가라”를 알아야 함
  • C도 “192.168.1.0/24는 B를 통해 가라”를 알아야 함

A에서:

sudo ip route add 192.168.2.0/24 via 192.168.1.6

C에서:

sudo ip route add 192.168.1.0/24 via 192.168.2.6

여기까지 하면 흔히 이런 상황이 나옵니다.

  • 라우팅은 맞는 것 같은데 ping이 안 됨
  • “Network is unreachable”는 사라졌는데 응답이 없음

이때 이유는:

리눅스는 기본적으로 “한 인터페이스로 들어온 패킷을 다른 인터페이스로 전달(포워딩)하지 않기” 때문
(보안상 기본값)

6.2 IP 포워딩 켜기: /proc/sys/net/ipv4/ip_forward

현재 값 확인:

cat /proc/sys/net/ipv4/ip_forward
# 0이면 포워딩 OFF
# 1이면 포워딩 ON

임시로 켜기:

sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

또는 sysctl 사용:

sudo sysctl -w net.ipv4.ip_forward=1

이제 A ↔ C ping이 통과하는 걸 볼 수 있습니다.

재부팅 후에도 유지하려면(영구 설정)

배포판/환경에 따라 다르지만 대표적으로 아래 중 하나를 씁니다.

/etc/sysctl.conf 또는 /etc/sysctl.d/*.conf에 추가:

net.ipv4.ip_forward = 1

적용:

sudo sysctl --system

7) 앞으로 자주 쓰게 될 핵심 명령어 요약

인터페이스/링크

ip link
ip link set eth0 up

IP 주소 확인/추가

ip addr
sudo ip addr add 192.168.1.11/24 dev eth0

라우팅 테이블 확인/추가

ip route
sudo ip route add 192.168.2.0/24 via 192.168.1.1
sudo ip route add default via 192.168.1.1

IP 포워딩 확인/설정

cat /proc/sys/net/ipv4/ip_forward
sudo sysctl -w net.ipv4.ip_forward=1

8) 쿠버네티스 관점에서 왜 이게 중요하나?

이 내용이 쿠버네티스에서 바로 연결되는 지점들:

  • Pod 네트워크는 결국 노드의 라우팅/포워딩 위에서 구성됩니다.
  • CNI 플러그인은 노드에 veth, bridge, route, iptables/nftables 등을 설정해 says “Pod 간 통신이 되는 것처럼” 만듭니다.
  • 노드 간 Pod-to-Pod 통신 이슈가 나면 결국 확인 포인트가:
    • 라우팅 테이블(ip route)
    • 포워딩(ip_forward)
    • NAT/필터(iptables/nft)
    • 인터페이스 상태(ip link), IP 설정(ip addr)
      로 내려옵니다.

'CKA' 카테고리의 다른 글

Network - 네트워크 기초(veth, bridge, routing, NAT, port-forward)  (1) 2026.01.05
Network - 네트워크 기초(DNS)  (0) 2026.01.05
Storage - 정리  (0) 2026.01.05
Storage - Storage Class  (0) 2026.01.03
Storage - PV & PVC  (0) 2026.01.03
'CKA' 카테고리의 다른 글
  • Network - 네트워크 기초(veth, bridge, routing, NAT, port-forward)
  • Network - 네트워크 기초(DNS)
  • Storage - 정리
  • Storage - Storage Class
5jyan5
5jyan5
  • 5jyan5
    jyan
    5jyan5
  • 전체
    오늘
    어제
    • 분류 전체보기 (243)
      • 김영한의 스프링 핵심 원리(기본편) (8)
      • 김영한의 스프링 핵심 원리 - 고급편 (11)
      • 김영한의 스프링 MVC 1편 (1)
      • 김영한의 스프링 DB 1편 (3)
      • 김영한의 스프링 MVC 2편 (3)
      • 김영한의 ORM 표준 JPA 프로그래밍(기본편) (9)
      • 김영한의 스프링 부트와 JPA 활용2 (2)
      • 김영한의 실전 자바 - 중급 1편 (1)
      • 김영한의 실전 자바 - 고급 1편 (9)
      • 김영한의 실전 자바 - 고급 2편 (9)
      • Readable Code: 읽기 좋은 코드를 작성.. (2)
      • 김영한의 실전 자바 - 고급 3편 (9)
      • CKA (119)
      • 개발 (37)
      • 경제 (4)
      • 리뷰 (1)
      • 정보 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      reentarantlock
      양방향 맵핑
      @args
      Target
      requset scope
      jdk 동적 프록시
      고급
      버퍼
      @discriminatorcolumn
      jpq
      @within
      JPQL
      cglib
      프록시
      @discriminatorvalue
      WAS
      페치 조인
      프록시 팩토리
      gesingleresult
      스레드
      김영한
      단방향 맵핑
      락
      Thread
      자바
      typequery
      조회 성능 최적화
      log trace
      hibernate5module
      빈 후처리기
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.2
    5jyan5
    Network - 네트워크 기초(스위치, 라우터, 게이트웨이)
    상단으로

    티스토리툴바