본문 바로가기

IT/기타 유용한 지식

/etc/resolv.conf가 지워지는 이유

서버가 리붓되거나 service network restart 명령을 치고 난 후에는 이상하게 /etc/resolv.conf의 내용이 사라지는 문제가 있다


그리고 새로 만들어진 /etc/resolv.conf의 내용에는 Generated by NeworkMager로 시작하는 내용이 들어있다

해답은 이 안에 다 있었다


# Generated by NetworkManager -> 네트워크 매니저라는 녀석에 의해 생성됨

# No nameservers found; try putting DNS servers into your ifcfg files in /etc/sysconfig/network-scripts like so:

  -> 네임서버를 찾을 수 없다! /etc/sysconfig/network-scripts 디렉토리 안에 DNS서버들을 추가해봐라~다음과 같이!

# DNS1=xxx.xxx.xxx.xxx

# DNS2=xxx.xxx.xxx.xxx

# DOMAIN=lab.foo.com bar.foo.com

 -> 위와같은 형식으로 DNS를 추가해라~


이 내용이 핵심 내용인 것이다


centos5버전부터 redhat관련 os들 centos와 fedora등의 os에서는 NetworkManager라는 녀석이 동작을 한다. 6버전부터 본격적으로 사용되기 시작했고 이 NetworkManager는 네트워크관련 설정을 하면 service network restart를 하지 않아도 자동으로 적용시켜주는 녀석이다. 따라서 무선네트워크를 사용한다던지하여 ip를 동적으로 할당받는 pc 즉, 개인용 데스크탑 pc에는 유용할 수도 있는 녀석이다.

하지만 ip를 고정으로 사용하는 서버에게 있어서 NetworkManager는 절대적으로 필요없는 쓰레기다(7버전에서는 기능이 추가되고 적용 여부를 결정하는등 많은 부분이 변경되어 사용 가치가 있지만 6버전에서는 쓰레기다)


이 NetworkManager는 네트워크의 전반적인 부분에서 동작하지만 /etc/resolv.conf에 대해서만 말하자면 

1. ifcfg-eth0파일을 읽어들여 그 내용중 DNS1,DNS2,DOMAIN부분을 확인한다

2. DNS 부분을 바탕으로 /etc/resolv.conf를 생성

    (버전에 따라 1개만 올라오는 버전도 있고-(6.5) 2개다 올라오는 버전도 있다-(6.6))


이 후 DNS서비스를 진행하는데 DNS서버의 주소를 잘못입력해도 잘못 입력한대로 그냥 /etc/resolv.conf를 생성한다

예를들어 DNS주소를 8.8.8.5로 입력해도 8.8.8.8(구글 DNS)로 변경하지 않고 그냥 그대로 올라온다

결국 NetworkManager는 네트워크 설정의 통합 정도의 의미만 있을뿐 오히려 ip설정등을 방해하기때문에 서버에서는 절대로 

사용하지 말하야할 기능이다(현재 서버의 설정과 운영방식등은 NetworkManager의 기능과 완전 반대에 있기때문에)


한가지 예를 들면 bonding등의 설정을 했을때 6버전의 NetworkManager는 제대로 지원을 못해서 eth0을 그냥 올려버린다. bonding에서 eth0등의 인터페이스는 BOOTPROTO 타입을 none으로 설정해 ip정보도없이 slave로 동작하도록 되어 있는 그 eth0을 그대로 올려버려 결국 서버의 인터넷 연결을 해제시켜 버릴 수도 있다(7버전의 os에서는 본딩을 지원하는 등 많은 기능들이 추가되어있다)


다시 본론으로 돌아와서 /etc/resolv.conf가 자꾸 지워지고 이 것을 고정시키고 싶다면 2가지 방법을 통해 해결할 수 있다

해결 1 - vi /etc/sysconfig/network-scripts/ifcfg-eth0을 열어서

          - NM_CONTROLLED 항목을 no로 설정

          - /etc/resolv.conf에 DNS 정보 입력


해결 2vi /etc/sysconfig/network-scripts/ifcfg-eth0을 열어서

          - DNS1=xxx.xxx.xxx.xxx 이런 형식으로 DNS 추가


주의할 것

 1. 1번방법으로 할때 NetworkManager를 no로하면 eth0이 다운된다. NetworkManager 프로세스는 동작하고 있는 상태에서 eth0만 동작을 중지시키니 NetworkManager가 eth0을 down시켜버리는 것같은데 확실치는 않다


참고

만약 NM_CONTROLLED 항목을 no로 설정하고 거기에 DNS를 추가하면 어떻게 될까요?

메시지 2개가 같이 뜹니다. DNS가 없으니 추가하라는 메시지와 DNS 정보가 동시에 뜬다

NetworkManager 프로세스를 죽이고 해봐도 동시에 떴다. 왜그런지는 잘 모르겠다.