EdgeRouter - 라우터에서 BIND DNS 서버를 설치하고 설정하기

download at 2017-02-07T01:06:42Z origin

Overview


이 문서는 EdgeOS에서 BIND를 하는 명령들에 대하여 서술합니다. BIND는 인터넷에서 DNS 소프트웨어로 많이 사용되는 패키지입니다.

명령어는 재설치를 자동화하기위한 스크립트와 펌웨어 업그레이드를 하기위한 설정들을 포함합니다.

SSH, SFTP와 Linux 명령어에 익숙한 사용자에게 추천합니다. DNS의 문제를 해결하기 위해서는 Linux의 dig을 사용합니다. ERL에 SSH 접근하기 위해서 PuTTY를 사용하였고, 파일 업로드를 위해서 Filezilla, DNS 서버 문제를 해결하기 위해 ERL에 dig을 사용하였습니다. 텍스트 에디터로 vi와 nano를 설치하여 사용하였습니다. vi를 사용하고 싶다면 2단계를 건너뛰시고 명령어상에서 nano 대신 vi를 사용하시기 바랍니다.

Note: ER-X, ER-X-SFP, EdgePoint R6의 제한적인 메모리 때문에 BIND와 다른 크기가 큰 패키지는 추가할 수 없을 수도 있습니다.

Steps


1. SSH로 router에 접근하여 EdgeRouter에 데비안(Debian) 리포지토리를 추가합니다.:

configure
set system package repository wheezy components 'main contrib non-free'
set system package repository wheezy distribution wheezy
set system package repository wheezy url http://http.us.debian.org/debian

commit
save
exit

*Note: "squeeze"를 1.7.0 버전 이전에서는 "wheezy" 대신에 사용 합니다.

2. nano 텍스트 에디터를 설치합니다.

sudo apt-get update
sudo apt-get install nano

3. BIND DNS 서버와 (dig을 포함하는) dnsutil 패키지를 설치합니다.

sudo apt-get install bind9 dnsutils

4. config 파일의 위치를 수정합니다.

위치를 변경하지 않으면, 펌웨어 업그레이드 이후에 설정 파일이 초기화 될 수 있습니다. /config 디렉토리에 파일들을 백업하기를 권장합니다.

sudo nano /etc/bind/named.conf

아래의 파일들의 경로를 변경하고 저장합니다: include "/config/bind/named.conf.options"; include "/config/bind/named.conf.local"; include "/config/bind/named.conf.default-zones";

5. BIND DNS 설정 파일을 위한 디렉토리를 생성하고 새로운 디렉토리에 설정 파일들을 복사한다.

mkdir /config/bind

sudo cp /etc/bind/named.conf /config/bind/named.conf
sudo cp /etc/bind/named.conf.options /config/bind/named.conf.options
sudo cp /etc/bind/named.conf.local /config/bind/named.conf.local
sudo cp /etc/bind/named.conf.default-zones /config/bind/named.conf.default-zones

6. zone 파일을 생성하고, 설정을 작성합니다.

https://help.ubuntu.com/lts/serverguide/dns-configuration.html 문서를 확인해보세요 /etc/bind/가 아니라 /config/bind/ 에 저장하는 것을 잊지마시기 바랍니다.

 7. 스타트업 스크립트

어떤 이유이든지 BIND는 ERL에 dig을 수행하기 이전까지 정상적으로 동작하지 않습니다. 아래의 예제도 /config/bind 내에 있는 설정 파일을 포인팅 하고 있는 설정 파일의 복사본입니다. 새로운 펌웨어가 업그레이드 될 때마다 아래의 작업이 필요합니다. /config/scripts/post-config.d/ 내에 "start_dns.sh" 스타트업 스크립트 파일을 생성하여 다음과 같이 입력합니다:

#!/bin/bash
sudo service bind9 stop
sleep 5
sudo cp /config/bind/named.conf /etc/bind/named.conf
sudo service bind9 start
sleep 5
dig google.ca @127.0.0.1
exit

라우터에 다음과 같은 명령어를 통해서 생성하기를 권장합니다.

sudo nano /config/scripts/post-config.d/start_dns.sh

복사/붙여넣기를 수행하거나 각 내용을 직접 타이핑해서 저장하십시요. 윈도우에서 파일을 생성하는 경우, dos2unix <파일명> 을 수행하여 인코딩 문제를 해결하십시요. 이제 스크립트를 실행할 수 있도록 적절한 권한을 부여합니다:

sudo chmod 777 /config/scripts/post-config.d/start_dns.sh
sudo chmod +x /config/scripts/post-config.d/start_dns.sh

8. BIND 테스트하기.

BIND는 이제 동작해야 합니다. 방금 전에 생성한 도메인 zone의 레코드에 dig, nslookup을 수행하여 DNS가 라우터를 올바르게 포인팅하고 있는지 테스트 해봅시다. 라우터 내에서 테스트를 수행한다면 다음과 같이 테스트를 수행합니다:

dig google.ca @127.0.0.1
dig example.com @127.0.0.1

(example.com 이 zone에 추가한 레코드입니다.)

9. 펌웨어 업그레이드 후 BIND 자동 재인스톨

이제 펌웨어 업그레이드 이후 BIND를 재인스톨하는 설정이 필요합니다. 위오 같이 필요한 패키지를 설치하는 스타트업 스크립트를 생성해야 합니다. 리포지토리를 추가하거나 config에 적을 필요는 없습니다.

sudo nano /config/scripts/post-config.d/install_packages.sh

스크립트의 내용은 다음과 같습니다:

#!/bin/bash
doneit='/var/lib/my_packages'
packages='dnsutils bind9'

if [ -e $doneit ]; then
exit 0;
fi

sudo dpkg --configure -a
apt-get update
apt-get install -y $packages
if [ $? == 0 ]; then
 echo package install successful
 touch $doneit
else
 echo package install failed
fi
exit 0

이제 실행 권한을 부여합니다:

sudo chmod 777 /config/scripts/post-config.d/install_packages.sh
sudo chmod +x /config/scripts/post-config.d/install_packages.sh

10. 스타트업 스크립트 테스트

라우터를 리부팅하고 BIND 서비스가 클라이언트에서 수행되는지 확인하세요.

완료하였습니다!

참고사항


펌웨어 업그레이드 이후 2개의 스크립트 모두 수행하는 것에 리부팅 작업이 두번 필요할 수도 있습니다. 펌웨어 업그레이드 이후 몇가지 이슈가 발견되어 해당 이슈를 해결하였지만, 업그레이드 이후 테스트를 많이 수행하지 못하였습니다. 테스팅을 위하여는 몇차례 더 업데이트가 필요합니다.