systemd-resolved와 systemd-networkd — DNS와 네트워크 설정

systemd-resolved의 DNS 스텁 리졸버 동작 방식과 resolvectl 사용법, systemd-networkd의 .network 파일로 정적 IP 및 DHCP를 설정하는 방법을 설명합니다.

· 4 min read · PALDYN Team

지난 글에서 저널 보존 정책을 설정하는 방법을 배웠습니다. 이번에는 systemd 생태계의 네트워크 담당 두 서비스 — systemd-resolved(DNS 해석)와 systemd-networkd(IP 설정) — 를 살펴봅니다. 두 서비스는 독립적으로도 사용할 수 있지만, 함께 사용하면 서버와 컨테이너 환경에서 일관된 네트워크 관리가 가능합니다.

systemd-resolved

systemd-resolved는 로컬 DNS 캐싱 리졸버입니다. 127.0.0.53:53에서 스텁(stub) 리스너를 실행하고, 애플리케이션의 DNS 질의를 받아 업스트림 DNS 서버에 전달한 뒤 결과를 캐시합니다.

systemd-resolved DNS 해석 흐름

/etc/resolv.confstub-resolv.conf의 심볼릭 링크로 만들어야 합니다. 이렇게 해야 모든 애플리케이션의 DNS 질의가 resolved를 거칩니다.

# 심볼릭 링크 설정 (이미 됐는지 확인)
ls -la /etc/resolv.conf
# → /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf

# 아직 안 됐다면
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

resolvectl로 상태 확인

resolvectl status             # 전체 DNS 설정 (인터페이스별)
resolvectl query example.com  # DNS 조회 테스트
resolvectl statistics         # 캐시 히트율, 질의 수
resolvectl flush-caches       # 캐시 초기화

DNSSEC 검증이 활성화된 경우 resolvectl queryDNSSEC: yes가 표시됩니다.

resolved.conf 설정

# /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8 1.1.1.1
FallbackDNS=9.9.9.9
Domains=~.
DNSSEC=allow-downgrade
DNSOverTLS=opportunistic
Cache=yes

Domains=~.는 모든 도메인을 이 DNS 서버로 해석한다는 의미입니다. VPN 환경에서 특정 도메인만 내부 DNS로 보내려면 Domains=~company.internal처럼 지정합니다.

systemd-networkd

systemd-networkd는 네트워크 인터페이스를 관리하는 데몬입니다. NetworkManager 없이 서버나 컨테이너 환경에서 가볍게 사용할 수 있습니다. /etc/systemd/network/ 디렉터리의 .network, .link, .netdev 파일로 설정합니다.

systemd-networkd .network 파일

파일 이름 앞의 숫자(10-, 20-)는 우선순위를 결정합니다. 낮은 숫자가 먼저 적용됩니다.

# /etc/systemd/network/10-eth.link
[Match]
MACAddress=aa:bb:cc:dd:ee:ff

[Link]
Name=eth0

MAC 주소로 인터페이스를 매칭해 이름을 고정합니다. udev의 persistent naming과 유사한 역할을 합니다.

networkd 상태 확인

networkctl                    # 인터페이스 목록과 상태
networkctl status eth0        # 특정 인터페이스 상세
networkctl reload             # 설정 파일 다시 불러오기
networkctl reconfigure eth0   # 특정 인터페이스 재설정

NetworkManager와의 관계

Ubuntu 데스크톱이나 일반 배포판은 NetworkManager를 기본으로 사용합니다. systemd-networkd는 서버, Raspberry Pi, 컨테이너처럼 GUI 없이 가볍게 동작해야 하는 환경에 적합합니다. 두 서비스를 동시에 활성화하면 충돌이 발생하므로 하나만 사용해야 합니다.

# NetworkManager 비활성화 후 networkd 사용
sudo systemctl disable NetworkManager
sudo systemctl enable --now systemd-networkd systemd-resolved

지난 글: systemd 저널 로테이션과 보존 정책

다음 글: systemd-tmpfiles — 임시 파일과 디렉터리 관리


읽어주셔서 감사합니다. 😊