현대오토에버 모빌리티 sw 스쿨 3기 [클라우드]/LINUX

리눅스/우분투 네트워크 설정 가이드 - IP, nmcli, netplan

맹꽁이+ 2026. 1. 14. 17:48

이번 포스팅은 Linux(Ubuntu) 환경에서 네트워크를 이해하고 관리하기 위한 핵심 개념과 명령어를 다룹니다. TCP/IP 프로토콜의 계층 구조부터 실제 네트워크 설정, 상태 확인까지 단계별로 학습할 수 있도록 구성했습니다.

NetworkManager, nmcli, ip, ifconfig 등 다양한 네트워크 관리 도구의 사용법을 익히고, ping, netstat, tcpdump 등으로 네트워크 문제를 진단하는 방법을 배울 수 있습니다!

 

1. 네트워크 기초

TCP/IP 프로토콜 개요 및 구조

  • 프로토콜 정의: 컴퓨터 간 데이터 교환 방법을 정의한 통신 규약. 동일한 프로토콜을 사용해야 통신 가능
  • TCP/IP: 인터넷에서 데이터를 주고받는 데 사용하는 핵심 프로토콜

🐸TCP/IP 계층별 역할과 프로토콜

계층 기능 대표 프로토콜 전송 단위
응용 계층 서비스 제공 응용 프로그램 DNS, FTP, SSH, HTTP, Telnet Message
전송 계층 응용 프로그램으로 데이터 전달, 데이터 흐름 제어 및 전송 신뢰성 TCP, UDP Segment
네트워크 계층 주소 관리 및 경로 탐색 IP, ICMP Packet
링크 계층 네트워크 장치 드라이버 ARP Frame
물리 계층 케이블 등 전송 매체 구리선, 광케이블, 무선 Bit

 

🐸네트워크 주소

🔻MAC Address (Media Access Control)
    ▪️정의: 하드웨어를 위한 주소. 이더넷 주소, 하드웨어 주소, 물리 주소라고도 불림
    ▪️저장 위치: 네트워크 인터페이스 카드(랜카드)에 저장
    ▪️특징: 랜카드가 생성될 때 부여되며, 원칙적으로 수정 불가하지만 일부 카드는 허용. 각 하드웨어를 구별하는 역할
    ▪️구성: 콜론(:)이나 하이픈(-)으로 구분되는 여섯 개의 16진수로 구성되며 총 48bit
         ▪️앞의 세 자리는 제조사 번호, 뒤의 세 자리는 일련 번호

🔻IP Address (Internet Protocol Address)
    ▪️정의: 인터넷으로 연결된 네트워크에서 각 컴퓨터를 구분하기 위해 사용되는 주소
    ▪️IPv4 주소
         ▪️1 바이트 크기의 숫자 네 개로 구성(총 4 byte)
         ▪️EX) 192.168.100.5
         ▪️주소 고갈 문제로 인해 IPv6로 대체됨
    ▪️IPv6 주소
         ▪️IPv4를 대체하기 위해 개발
         ▪️16진수로 표기하며 128 bit 크기
         ▪️EX) fe80::250:56ff:fe3e:3cfe
    ▪️사용 계층: TCP/IP 프로토콜의 3계층 (네트워크 계층)에서 사용

🔻NetMask (서브넷 마스크)
    ▪️역할: IP 주소에서 네트워크 부분을 알려주는 역할
    ▪️사용 목적: 하나의 네트워크를 더 작은 네트워크(서브넷)로 분리할 때 사용
    ▪️표현
         ▪️C 클래스 IP 주소의 기본 넷마스크는 255.255.255.0 입니다
         ▪️CIDR 표기법: 192.168.100.5/24 (여기서 /24는 넷마스크의 비트 수를 의미)

🔻Broadcast Address
    ▪️정의:네트워크에 있는 모든 컴퓨터에 메시지를 보낼 때 사용하는 주소
    ▪️구성: 호스트 부분을 모두 1로 설정
    ▪️EX)192.168.100.0/24 네트워크의 브로드캐스트 주소는 192.168.100.255

🔻호스트 이름 (Host Name)
    ▪️목적: 사람이 기억하기 어려운 숫자 IP 주소 대신 사용
    ▪️예시: 202.179.177.21 대신 www.naver.com 사용
    ▪️구성: IP 주소처럼 두 부분으로 구성 (네트워크 부분 + 호스트 부분)
         ▪️EX) naver.com (네트워크 부분), www (호스트 부분)

🔻포트 번호 (Port Number)
    ▪️역할: 서버 컴퓨터에서 사용자가 요청한 특정 서비스(데몬)를 구분해주는 번호
    ▪️동작: 패킷이 서버에 도착하면 IP 주소로 컴퓨터를 찾고, 포트 번호로 요청한 서비스(데몬)를 확인하여 전달
         ▪️예: 웹 서비스 요청 → 웹 서버 데몬(httpd)에 전달
    ▪️표준: 서비스별 포트 번호는 /etc/services 파일에 저장되어 국제 표준으로 합의되어 사용됨
         ▪️FTP 데이터 전송: 20/tcp
         ▪️FTP 제어: 21/tcp
    ▪️권장 사항: 사용자가 개발한 네트워크 프로그램은 이 파일에 정의되지 않은 번호를 사용하도록 권장

 


 

2. 네트워크 설정

✅인터넷 연결에 필요한 필수 설정 주소

  • IP address: 내 고유 주소
  • subnet mask: 우리 네트워크 범위
  • broadcast address: 전체에 전송할 수 있는 주소
  • gateway address: 다른 네트워크로 갈 수 있는 라우터 주소
  • DNS address: 이름(링크)을 IP 주소로 바꿔주는 서버 주소

 

✅NetworkManager와 네트워크 관리 도구

🐸NetworkManager 개요

  • 기능: 우분투에서 네트워킹 서비스를 제공하며, 네트워크의 제어와 설정을 관리하는 데몬.
  • 주요 작업:  주소 설정, 고정 라우터 설정,  설정 등을 수행.
  • 설정 파일: 네트워크 설정 정보를 connection profile에 저장.
  • 전통 방식 지원: 기존 유닉스/리눅스의  형식의 네트워크 설정 파일도 계속 지원.
  • 도구 종류:
    • : 기본 네트워킹 데몬.
    • : 를 사용하는 명령 기반 도구.
    • : 그놈에서 제공하는  기반 도구.
    • :  기반 도구로, 에서 설정할 수 없는 세부 사항도 설정 가능.
    •  명령: 네트워크를 설정하는 명령을 제공하지만, 이 명령으로 변경 시 가 자동으로 인식하지 못함.

 

🐸NetworkManager 설치 및 실행

#설치
sudo apt install network-manager

#실행
sudo systemctl start NetworkManager

#부팅 시 자동 실행 설정
sudo systemctl enable NetworkManager

#상태 확인
sudo systemctl enable NetworkManager

 

🐸nmcli 명령으로 관리

를 제어하는 명령줄 도구로, 유/무선 네트워크, 보안 등 거의 모든 설정을 관리할 수 있다.

  • 형식
nmcli [옵션] 명령 {서브 명령}
# [대괄호] = 선택 사항
# {중괄호} = 필수 요소

 

  • 옵션
    • -t: 실행 결과를 간단하게 출력
    • -p: 사용자가 읽기 좋게 출력
  • 주요 서브 명령
명령 서브명령 기능
general (gen) status | hostname  전체 상태 출력 및 호스트 이름 관리
networking (net) on | off | connectivity 네트워크 시작, 종료 및 연결 상태 출력
connection (con) show | up | down | modify | add | delete 네트워크 설정 관리
device (dev) status | show 네트워크 장치의 상태 출력
  •  명령 연결 상태 (connectivity)
    • none: 네트워크에 연결되어 있지 않음
    • limited: 네트워크에는 연결되었지만 인터넷과 연결되지 않음
    • full: 네트워크에 연결되어 있고 인터넷도 사용 가능
    • unknown: 연결 상태를 알 수 없음
  • connection 명령
    • show: 연결 프로파일 출력
    • up/down: 네트워크 연결 시작/중지
    • modify: 연결 프로파일 속성 추가/수정/삭제
    • add/delete: 새로운 연결 생성/삭제
  • device 명령으로 장치 상태 확인
    • nmcli dev status: 장치, 유형, 상태, 연결 정보를 간략하게 확인
    • nmcli dev show [장치명]: 특정 장치의 상세 정보( 주소, IP 주소 등) 확인

 

🐸ip 명령으로 주소 관리

 명령은 네트워크를 설정하는 데 사용되지만, 재부팅 시 내용이 사라지므로 설정을 영구적으로 유지하려면 설정 파일에 저장해야 

  • 형식
ip [옵션] 객체 [서브명령]
  • 객체 [서브명령]
    • address [add | del | show] : 라우팅 테이블을 관리
    • route [add | del] : 네트워크 인터페이스를 활성화 또는 비활성화
  • 주소 확인
    • ip addr show: 전체 장치 상세 정보 출력
    • ip addr show enp0s8: 특정 장치 상세 정보 출력
  •  주소 추가/삭제
    • 추가: sudo ip addr add 192.168.1.20/24 dev enp0s8
    • 삭제: sudo ip addr del 192.168.1.20/24 dev enp0s8
  • 라우팅 테이블 및 게이트웨이 관리 (ip route)
    • 게이트웨이: 네트워크를 다른 네트워크와 연결하는 접점(보통 라우터). 게이트웨이 주소가 없으면 외부 네트워크와 접속 불가능.
    • 라우팅 테이블 보기: ip route show
      • default via 192.168.56.1: 기본 게이트웨이 설정.
#기본 게이트웨이 설정
sudo ip route add default via 192.168.56.1 dev enp0s8

#특정 네트워크 라우팅 설정
sudo ip route add 192.168.2.0/24 via 192.168.147.2 dev enp0s8
  • 네트워크 인터페이스 활성화/비활성화(ip link)
    • 비활성화: sudo ip link set enp0s8 down
    • 활성화: sudo ip link set enp0s8 up

 

🐸ifconfig 명령으로 주소 관리

 패키지를 설치해야 사용할 수 있는 전통적인 네트워크 설정/확인 명령

  • 설치
sudo apt install net-tools
  • 사용법
ifconfig [인터페이스명] [옵션] [값]
  • 주요 옵션
    • -a: 시스템 전체 인터페이스 정보 출력
    • up/down: 인터페이스 활성화/비활성화
    • netmask 주소: 넷마스크 주소 설정
    • broadcast 주소: 브로드캐스트 주소 설정
  • 정보 확인 내용
    •  주소 ()
    •  주소 ()
    • 넷마스크 ()
    • : 부팅 후 받은 패킷 수 및 바이트 수.
    • : 부팅 후 보낸 패킷 수 및 바이트 수
  • 인터페이스 설정 예시
sudo ifconfig enp0s8 192.168.147.129 netmask 255.255.255.0 broadcast 192.168.147.255

 

🐸route 명령으로 게이트웨이 설정

 명령은 라우팅 테이블을 관리하거나 기본 게이트웨이를 설정/제거하는 데 사용

  • 사용법: route [명령]
    • add: 라우팅 경로 또는 기본 게이트웨이 추가
    • del: 라우팅 경로 또는 기본 게이트웨이 제거
  • 라우팅 테이블 보기: route
    • Destination: 라우팅 대상 네트워크/호스트 주소. 목적지
    • Gateway: 게이트웨이 주소. default는 기본 게이트웨이 경로를 의미.
    • Genmask: 대상 네트워크의 넷마스크. 이면  경로.
    • Metrics: 대상까지의 거리로 최근 커널에서는 사용되지 않지만 라우팅 데몬에서
      사용할 수도 있음
    • Ref: 해당 경로에 대한 참조 수이지만 리눅스 커널에서는 사용하지 않음
    • Use: 경로를 탐색한 후
    • Iface: 패킷이 전달되는 인터페이스 이름
    • Flags:
      • : 경로 활성화().
      • : 게이트웨이로 사용.
      • : 대상이 호스트.
      • : 활성화된 게이트웨이 경로.
  • 기본 게이트웨이 설정
sudo route add default gw 192.168.147.2 dev ens33

 

🐸DNS 설정

  •  역할: 도메인 이름()을  주소로 변환
  • 설정 파일: 전통적으로  파일에  서버 주소를 저장. (최신 에서는  서비스를 사용하며, 이 파일은 로컬 스터브 주소 을 가리키는 심볼릭 링크인 경우가 많음)
  •  정보 확인: resolvectl status 명령을 통해 각 링크별  서버 목록 확인 가능.
    • Current DNS Server: 현재 사용되는 서버.
    • DNS Servers: 설정된  서버 목록 ().
  •  설정
nmcli con mod connection-name ipv4.dns DNS주소
  • DNS 서버 질의 확인: nslookup 명령 사용 (호스트 이름을  주소로 변환하는지 확인).

 

🐸netplan을 이용한 네트워크 설정

에서 네트워크 구성을 관리하는 최신 도구임

  • 설정 파일:  형식으로 작성되며  디렉토리에 존재.
  • 적용: 파일을 수정한 후 sudo netplan apply 명령 또는 재부팅을 통해 적용.
  • 설정 파일 권한: 보안을 위해 일반 사용자/그룹 읽기/쓰기 권한을 제한해야 함 (sudo chmod 600 /etc/netplan/*.yaml).
  • 정적  설정 예시
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s8:
      dhcp4: no
      addresses:
        - 192.168.56.101/24
      gateway4: 192.168.56.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
  • dhcp
    • 동적 호스트 설정
    • IP pool을 가지고 있다가 클라이언트가 접속할 때 IP를 할당해주는 서비스
    • 직접 IP를 설정하면 관리자가 계속해서 IP가 중복되지 않도록 할당을 해야 하기 때문에 복잡함

 

3. Host Name 설정

호스트 이름 출력 및 설정

🐸uname 명령

운영체제 및 하드웨어 정보를 출력

#-n: 호스트 이름을 출력
uname -n

#-a: 모든 정보 출력 (OS 이름, 호스트 이름, 릴리즈, 버전 등)
uname -a

 

 

🐸hostname 명령

현재 호스트 이름을 출력하거나 임시로 설정

  • 출력: hostname
  • 설정 (재부팅 시 초기화됨): sudo hostname ubuntu

 

  •  

🐸hostnamectl 명령

 환경에서 호스트 이름을 관리하는 표준 도구

  • 상태 출력: hostnamectl status
  • 호스트 이름 설정
sudo hostnamectl set-hostname myubuntu

 

 

✅호스트 이름 파일에 저장

  • : 시스템을 재시작해도 바뀐 호스트 이름이 유지되도록 호스트 이름을 저장하는 파일

 

 

✅/etc/hosts 파일

  • 개요: 도메인 이름()을  주소에 수동으로 매핑하는 텍스트 파일.  조회를 거치지 않고 로컬 시스템에서 가장 먼저 참조
  • 용도
    • 로컬 개발/테스트: 개발 서버 I를 특정 도메인 이름에 매핑하여 로컬에서 테스트
    • 시스템 최적화: 자주 방문하는 호스트 이름의  조회 생략 (속도 향상)
    • 특정 사이트 차단: 악성 사이트 도메인 이름을 루프백 주소 ()에 매핑하여 접속 차단
    • 자체 호스트 이름 정의: 로컬 네트워크 장치들의 이름을 편리하게 지정
  • 형식
IP_주소 호스트이름 [별칭1, 별칭2…]
  • 작성 시 주의사항
    • 0.0.0.0 접속 대상 IP가 아니기 때문에 연결
    • 특정 사이트 차단하는 법
      • 0.0.0.0 도메인

4. 네트워크 상태 확인

✅통신 확인

🐸ping 명령

외부와의 통신 가능 여부 또는 외부 서버의 동작 여부를 확인.  프로토콜을 사용

  • 형식
ping [옵션] [목적지 주소]
  • 주요 옵션
    • -c 개수: 보낼 패킷 수를 지정하고 종료
    • -q: 종합 결과만 출력 (지속적인 출력 X)
  • 결과 해석
    • :  패킷의 순서
    •  (): 패킷이 목적지까지 도달하기까지 거친 라우터 수를 간접적으로 알려줌 (값이 높을수록 출발지에서 설정된 값이 높았거나 경로가 짧음)
    • : 왕복 시간 (, )
    • : 손실률 (0%가 정상)
    • : 왕복 시간의 최소, 평균, 최대, 표준편차
  • 주의: 보안 설정에 따라  응답을 하지 않도록 설정된 시스템도 있으므로, 이 안된다고 해서 시스템이 동작하지 않는다고 단정할 수 없음

 

🐸netstat 명령

네트워크 연결 상태, 라우팅 테이블, 인터페이스 통계 정보 및 시스템에 열려있는 포트를 확인

  • 형식
netstat [옵션]
  • 주요 옵션
    • -a: 모든 소켓 정보 출력
    • -r: 라우팅 정보 출력 (route와 유사)
    • -n: 호스트 이름 대신  주소로 출력
    • -i: 모든 네트워크 인터페이스 정보 출력
    • -s: 프로토콜별 네트워크 통계 정보 출력
    • -p: 소켓과 관련된 프로세스 이름과 를 출력
  • 열려있는 포트 확인 예시: netstat -an | grep LISTEN
    • : 연결 요청을 기다리고 있는 상태
  • 인터페이스 통계 확인 (-i 옵션)
    • : 성공적으로 수신한 패킷 수
    • : 성공적으로 전송한 패킷 수

 

✅MAC 주소와 IP 주소 확인

🐸arp 명령 (Address Resolution Protocol)

같은 네트워크에 연결된 시스템들의  주소와 IP 주소 매핑 정보를 확인.

  • 형식: arp [IP 주소]
  • 역할:  주소를 물리적인  주소로 변환하여 통신할 수 있게 함.

 

🐸패킷 캡쳐 명령 - tcpdump

네트워크 상태를 확인하기 위해 패킷을 캡쳐하고 분석할 때 사용.

  • 형식
tcpdump [옵션]
  • 주요 옵션
    • -c 패킷수: 지정한 패킷 수만큼 덤프 받고 종료.
    • -i 인터페이스명: 특정 인터페이스 지정.
    • -n:  주소를 호스트 이름으로 바꾸지 않음.
    • -q: 정보를 간단하게 출력
    • -X: 패킷의 내용을 진수와 로 출력 (내용 분석 시 사용).
    • -w 파일명: 덤프한 내용을 파일에 저장.
    • -r 파일명: 파일에서 읽어 옴
    • host 호스트이름/주소: 지정한 호스트가 받거나 보낸 패킷만 덤프.
    • tcp port 번호: 지정한 포트 번호 패킷만 덤프.
  • 예시
    • sudo tcpdump: 현재 시스템의 모든 패킷 캡쳐.
    • sudo tcpdump -c 3 port 22: 포트 로 송수신되는 패킷 3개만 캡쳐.

 

5. Virtual box에서 하나의 네트워크에 묶인 컴퓨터 만들기

1. Virtual Box에서 네트워크 메뉴를 선택하고 오른쪽 탭에서 NAT 네트워크를 선택하고 만들기 클릭
2. 만들어진 네트워크를 선택하고 일반 옵션을 선택
3. 이름을 수정하고 네트워크의 IP 대역을 설정(10.0.2.0/NAT)

 

 

6. 실습

✅3개의 Linux 가상머신을 만들고 하나의 네트워크로 묶기

🐸ping 명령으로 컴퓨터들이 통신이 되는지 확인

🐸hostname으로도 ping이 가능한 지 확인

sudo nano /etc/netplan/50-cloud-init.yaml

sudo netplan try

sudo netplan apply

sudo nano /etc/hosts

hostname

sudo hostnamectl set-hostname worker2

hostname