DNS를 바꾸려고 resolv.conf를 고쳤다가 사라졌다 — 네트워크 관리
DNS 서버를 바꾸려고 /etc/resolv.conf를 직접 편집했다. 잘 되는 듯했는데 재부팅하니 원래대로 돌아갔다. 왜? Rocky 10에선 NetworkManager가 /etc/resolv.conf를 자동 관리한다. 직접 편집하면 덮어쓴다. DNS 변경은 nmcli로 해야 한다.
이런 함정이 네트워크 관리엔 많다. 서버의 대부분은 네트워크로 통신하고, IP 설정·포트 점검·DNS 오류·라우팅 문제는 운영 일상이다. 이 글은 컴퓨터가 서로 통신하는 세 가지 기반 — 서로를 식별할 주소(IP), 데이터를 전달할 경로(라우팅), 이름을 주소로 바꿀 DNS — 과, Rocky 10이 이걸 NetworkManager로 관리하는 방식을 다룬다.
우편 시스템으로 보는 네트워크 — 주소·포트·이름
네트워크 통신은 우편 시스템과 정확히 대응된다(오래된 표준 비유):
| 네트워크 | 우편 | |
|---|---|---|
| 호스트 식별 | IP 주소 | 우편번호 + 집 주소 |
| 서비스 구분 | 포트 번호 | 건물 내 호수(한 건물에 여러 수신자) |
| 패킷 전달 | 라우팅 | 우체부 경로(목적지까지 거쳐가는 우체국들) |
| 이름→주소 | DNS | 전화번호부 |
| 우체부 규칙 | TCP/UDP | 등기(TCP, 확실) / 엽서(UDP, 빠름) |
우편 비유는 "주소-경로-이름해석" 구조만 잡는다. 패킷은 여러 홉을 거치며 분할/재조립되고, 포트는 동시 다수 연결이 가능하다는 점에서 비유를 넘어선다.
IP 주소와 CIDR
- IPv4: 32비트, 4옥텟(
192.168.1.10). 약 43억 개. - CIDR 표기:
192.168.1.10/24= 앞 24비트가 네트워크(255.255.255.0)./24→ 호스트 254개(네트워크·브로드캐스트 주소 제외, 256이 아님)./30→ 2개(링크용)./16→ 65,534개.
| 대역 | 용도 |
|---|---|
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 |
사설(인터넷 직접 불가, NAT 필요) |
127.0.0.0/8 |
루프백(loopback, localhost) |
169.254.0.0/16 |
링크 로컬(DHCP 실패 시 자동) |
TCP vs UDP
| 항목 | TCP | UDP |
|---|---|---|
| 연결 | 연결 지향(3-way handshake) | 비연결 |
| 신뢰성 | 보장(재전송, 순서) | 보장 없음 |
| 속도 | 느림 | 빠름 |
| 용도 | 웹(HTTP), 메일(SMTP), SSH | DNS, DHCP, 스트리밍, VoIP |
포트는 16비트(0~65535). 잘 알려진 포트(<1024)는 root 권한이 필요하다. 22(SSH), 25(SMTP), 53(DNS), 80, 443(HTTPS).
TCP/IP 계층 — 4개로 압축
flowchart TB
L4[4. 응용 Application<br/>HTTP, SSH, DNS, SMTP] --> L3[3. 전송 Transport<br/>TCP, UDP]
L3 --> L2[2. 인터넷 Internet<br/>IP, ICMP]
L2 --> L1[1. 링크 Link<br/>이더넷, Wi-Fi]
OSI 7계층을 실용적으로 4개로 압축. 각 계층은 하위 계층을 이용한다.
라우팅과 DNS — 경로와 이름 해석
라우팅
패킷이 목적지까지 가는 경로 결정. 커널은 라우팅 테이블에서 가장 길게 매칭되는(longest prefix match) 엔트리를 선택한다.
- 게이트웨이(next hop): 다음 라우터.
- 기본 라우트(default, 0.0.0.0/0): 매칭 엔트리가 없을 때 쓰는 탈출구.
DNS와 이름 해석
호스트 이름 → IP 변환. 해석 순서는 /etc/nsswitch.conf의 hosts: 줄이 결정한다(보통 files dns).
/etc/hosts: 정적 로컬 매핑(가장 먼저)./etc/resolv.conf: DNS 서버 목록 — 그런데 Rocky 10에선 NetworkManager가 자동 관리.
핑은 되는데 DNS가 안 된다면? 핑은 IP 연결만 확인한다. DNS는 53번 포트로 따로 동작하니
dig로 확인해야 한다.
NetworkManager — Rocky 10의 네트워크 데몬
단일 데몬이 유선/무선/VPN/브리지/본딩을 통합 관리한다. 설정은 연결 프로필(key file) 단위.
flowchart LR
NM[NetworkManager 데몬] --> CLI[nmcli / nmtui]
NM --> PROF[연결 프로필<br/>/etc/NetworkManager/system-connections/]
NM --> KERNEL[커널 네트워크 스택<br/>ip 명령으로 확인]
- 설정 파일:
/etc/NetworkManager/system-connections/<name>.nmconnection(key-file). - 구
/etc/sysconfig/network-scripts/ifcfg-*는 더 이상 권장 아니다(RHEL 9부터 단계적 제거). - 인터페이스 명명:
eth0구식 →enp0s3(버스 기반 예측 가능 이름)이 현대 기본.en=이더넷,p0s3=버스 위치.
Rocky 10에서 직접 확인하기
미검증(출처 인용). Rocky 10 VM에서 실행 권장.
# 인터페이스·주소 (ip - 저수준)
ip addr show # 모든 인터페이스 + 주소 (ip a)
ip -4 addr show # IPv4만
ip link show # 링크 상태(up/down)
ip route show # 라우팅 테이블 (ip r)
ip route show default # 기본 게이트웨이
ip neigh show # ARP/이웃 테이블
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
link/ether 08:00:27:ab:cd:ef brd ff:ff:ff:ff:ff:ff
inet 192.168.1.50/24 brd 192.168.1.255 scope global enp0s3
default via 192.168.1.1 dev enp0s3 proto static metric 100
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.50
# NetworkManager (nmcli) — 권장 설정
nmcli general status # NM 상태
nmcli device status # 장치 목록
nmcli connection show # 모든 연결 프로필
# 정적 IP 설정
sudo nmcli connection modify "enp0s3" \
ipv4.method manual \
ipv4.addresses 192.168.1.50/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8 1.1.1.1"
sudo nmcli connection up "enp0s3" # 활성화
# DHCP 복귀
sudo nmcli connection modify "enp0s3" ipv4.method auto
# 소켓/포트 (ss - netstat 대체)
ss -tlnp # TCP 리스닝 + 프로세스
ss -ulnp # UDP 리스닝
ss -tunap # TCP+UDP 모든 소켓 + 프로세스
ss -t state established # established만
ss -s # 요약
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
LISTEN 0 511 *:80 *:* users:(("nginx",pid=5678,fd=6))
netstat는 deprecated.ss를 써라.
# 진단 도구
ping -c 4 8.8.8.8 # 연결성/지연
ping -c 4 example.com # DNS+연결 동시 확인
tracepath example.com # 경로 추적(traceroute 대체)
dig example.com # DNS 상세
dig +short example.com # IP만
dig @8.8.8.8 example.com # 특정 DNS 서버
getent hosts example.com # nsswitch 전체 조회
curl -I https://example.com # HTTP 헤더만
curl -v https://example.com # 상세
# 로컬 이름 해석
cat /etc/hosts # 정적 매핑
cat /etc/nsswitch.conf | grep hosts # 해석 순서
cat /etc/resolv.conf # DNS 서버(NM 관리, 직접 편집 금지)
흔히 묻는 것, 흔히 틀리는 것
| 오해 | 정정 |
|---|---|
"/etc/resolv.conf 직접 고치면 된다" |
Rocky 10에선 NM이 덮어씀. nmcli로 |
"netstat를 쓴다" |
deprecated. ss 사용 |
"인터페이스는 eth0" |
현대는 enp0s3, ens33(예측 가능 이름). e=이더넷, w=무선 |
"서비스가 127.0.0.1에만 묶어도 외부 접속된다" |
아니다. 0.0.0.0(모든 IF)이나 특정 IP로 바인딩해야 |
"/24면 호스트 256개" |
254개(네트워크·브로드캐스트 주소 제외) |
| "핑 되면 DNS도 된다" | 핑은 IP 연결만. DNS는 53번 따로. dig로 확인 |
| "DNS는 캐시된다" | 리눅스는 보통 시스템 DNS 캐시가 없음(nscd/systemd-resolved 안 쓰면). 매번 쿼리 |
"CIDR /30은 쓸모 없다" |
링크용 2개 호스트(라우터 간). 실제로 자주 씀 |
더 깊이
- IPv6: IPv4 고갈 대안. 128비트(
2001:db8::1). /64가 표준 서브넷. SLAAC(자동 설정) 또는 DHCPv6. Rocky 10은 기본 듀얼스택(IPv4+IPv6). - 본딩·브리지: 본딩은 여러 NIC를 하나의 논리 인터페이스로(이중화/대역폭, mode 1 active-backup·mode 4 LACP). 브리지는 L2 스위치 역할(가상화/컨테이너가 호스트 LAN에 직접 참여).
- 방화벽과 nftables: Rocky 10의 firewalld 백엔드는 nftables. 패킷 필터링 규칙은 nmcli가 아니라
firewall-cmd로(10장 참조).
요약 — 이 글의 결론
- IP/CIDR:
/24= 255.255.255.0 = 호스트 254개(256 아님). 사설대역(10/172.16/192.168)은 NAT 없이 인터넷 불가. - TCP(신뢰, 연결, 3-way handshake) vs UDP(빠름, 비연결).
- 포트: 잘 알려진 <1024(root 필요). 22/25/53/80/443.
- 라우팅: longest prefix match. 기본 라우트(0.0.0.0/0)가 탈출구.
- DNS 해석 순서:
/etc/hosts→ DNS(/etc/nsswitch.confhosts:줄). - NetworkManager(nmcli): Rocky 10 중심.
/etc/resolv.conf를 자동 관리하니 직접 편집 금지. 인터페이스 이름은enp0s3(예측 가능), 구eth0아님. ss>netstat(deprecated). 바인딩:127.0.0.1(로컬만) vs0.0.0.0(모든 IF, 외부 접속 가능).
생각해 볼 문제
- IP 주소·포트·라우팅·DNS를 우편 시스템에 비유해 설명하라.
- TCP와 UDP의 차이. 어떤 서비스가 각각 어울리는가?
/24서브넷에서 사용 가능한 호스트 수는? 왜 256이 아닌가?- 사설 IP 대역 3가지를 말하고, 왜 인터넷에 직접 못 나가는가?
- Rocky 10에서 DNS 서버를 바꾸려면 어떻게 하는가? 왜
/etc/resolv.conf직접 편집이 위험한가? ss -tlnp출력에서127.0.0.1:80과0.0.0.0:80의 차이는?- 핑은 되는데 DNS가 안 될 때 의심할 곳은?
enp0s3라는 인터페이스 이름의 의미는?
참고
- Configuring an Ethernet connection — RHEL 10 - 접근 2026-07-09
- NetworkManager — Rocky Linux 10 - 접근 2026-07-09
- man page:
man nmcli,man ip(8),man ss(8),man dig,man resolv.conf(5),man nsswitch.conf(5)
'Tech Artifacts > Linux' 카테고리의 다른 글
| Linux - 11. services (0) | 2026.07.09 |
|---|---|
| Linux - 10. security (0) | 2026.07.09 |
| Linux - 08. package (0) | 2026.07.09 |
| Linux - 07. shell script (0) | 2026.07.09 |
| Linux - 06. io device (0) | 2026.07.09 |
