한 인터페이스에 주소가 두 개 붙거나 임대가 두 번 들어오는 대부분의 원인은 같은 장치에 연결 프로파일이 여러 개 있고 그중 둘 이상이 활성화된 것이다. NetworkManager 는 프로파일 단위로 동작하므로 주소를 지우는 것이 아니라 프로파일을 정리해야 한다.
/etc/resolv.conf 를 직접 고치는 것도 같은 이유로 소용이 없다. NetworkManager 가 DHCP 갱신이나 연결 재시작 때 덮어쓴다. 설정은 프로파일에 넣는다.
# 장치와 상태
nmcli device status
# 활성 연결. 같은 DEVICE 가 두 줄 이상이면 중복이다
nmcli connection show --active
# 전체 프로파일 (비활성 포함)
nmcli connection show
# 특정 프로파일의 IPv4 설정만
nmcli -f ipv4 connection show "<CON_NAME>"
# 실제로 붙은 주소
ip -4 addr show dev <IFNAME>
프로파일 파일은 배포판과 버전에 따라 /etc/NetworkManager/system-connections/ 또는 /etc/sysconfig/network-scripts/ 에 있다. RHEL 9 이후로는 keyfile 형식이 기본이다.
# 쓰지 않는 프로파일을 내리고 지운다
nmcli connection down "<CON_NAME>"
nmcli connection delete "<CON_NAME>"
# 남긴 프로파일만 다시 올린다
nmcli connection up "<CON_NAME>"
원격으로 작업 중이면 순서를 지킨다. 접속에 쓰는 프로파일을 먼저 내리면 세션이 끊긴다. 콘솔 접근이 없다면 nmcli device reapply <IFNAME> 처럼 되돌릴 수 있는 명령부터 시도한다.
프로파일 하나가 정적 주소를 여러 개 들고 있는 경우라면 프로파일을 지울 것이 아니라 주소만 뺀다.
# 특정 주소만 제거
nmcli connection modify "<CON_NAME>" -ipv4.addresses "192.168.0.50/24"
# 목록을 통째로 다시 지정
nmcli connection modify "<CON_NAME>" ipv4.addresses "192.168.0.10/24"
nmcli connection up "<CON_NAME>"
+ipv4.addresses 는 추가, -ipv4.addresses 는 제거, 접두사 없이 쓰면 교체다. DNS · 라우트 등 다른 목록형 속성도 같은 규칙이다.
프로파일을 남겨 두되 자동으로 올라오지 않게 하려면 autoconnect 를 끈다. 여러 프로파일의 우선순위를 정할 때는 autoconnect-priority 를 쓴다. 값이 클수록 먼저 선택된다.
nmcli connection modify "<CON_NAME>" connection.autoconnect no
nmcli connection modify "<CON_NAME>" connection.autoconnect-priority 10
# DHCP 가 준 DNS 를 무시하고 직접 지정
nmcli connection modify "<CON_NAME>" ipv4.dns "192.168.0.53 1.1.1.1"
nmcli connection modify "<CON_NAME>" ipv4.ignore-auto-dns yes
# 검색 도메인
nmcli connection modify "<CON_NAME>" ipv4.dns-search "example.com"
# 기존 값에 추가만
nmcli connection modify "<CON_NAME>" +ipv4.dns "9.9.9.9"
# DHCP 제공 값으로 되돌리기
nmcli connection modify "<CON_NAME>" ipv4.ignore-auto-dns no
nmcli connection modify "<CON_NAME>" -ipv4.dns "192.168.0.53 1.1.1.1"
nmcli connection up "<CON_NAME>"
적용 결과 확인은 다음과 같다.
nmcli device show <IFNAME> | grep -i dns
cat /etc/resolv.conf
resolvectl status # systemd-resolved 를 함께 쓰는 경우
인터페이스가 여러 개면 어느 쪽 DNS 가 먼저 쓰이는지가 문제가 된다. ipv4.dns-priority 값이 작은 프로파일의 DNS 가 앞에 온다. VPN 을 켜면 사내 이름이 안 풀리는 증상도 대개 이 우선순위와 dns-search 때문이다.
nmcli connection modify "<CON_NAME>" \
ipv4.method manual \
ipv4.addresses "192.168.0.100/24" \
ipv4.gateway "192.168.0.1" \
ipv4.dns "192.168.0.53"
nmcli connection up "<CON_NAME>"
ipv4.method manual 로 바꾸기 전에 주소 · 게이트웨이를 먼저 채워 둔다. 값이 빈 채로 manual 이 되면 연결이 올라오지 않는다.