Windows Server DNS 설정을 Linux Bind9로 옮기기 (Migration From Windows DNS to Linux Bind9)

Windows Server DNS는 정말 좋은 도구(인것 같)다.

  1. GUI라서 쉽게 설정 .
    1. 적당히 설정하면 역방향 조회 영역도 만들어준다.
  2. 각 영역 일련번호가 중복되면 설정 도중에 알려줌.
    1. 잘못 알고 있었다. 각 영역 일련번호는 서로 상관 없기에 중복 되어도 문제 없는듯.

이에 반해 Linux Bind9은

  1. 있던 GUI 설정 도구도 없어짐(CentOS5에서 있던 system-config-named가 CentOS6에서 사라지고, 텍스트 설정 파일을 직접 수정하는걸 권장하고 있는 듯 함.)
  2. 시리얼이 중복 되어도 안 알려주고, 역방향 조회영역 자동으로 생성? 그런 게 있을 리가…
    1. 설정이 잘못되면 실행 시 잘못되었다고 알려줄 뿐.

그래도 여러 사정으로 인해 윈도 DNS를 Linux Bind9으로 옮기는 경우가 생긴다. 옮기는 방법에 대해 설명한다.

  1. 영역 파일 복사
  2. 설정(/etc/named.conf (CentOS6) 혹은 /etc/bind/named.conf (ubuntu13))에 각 영역에 대한 내용 추가

영역 파일 복사하기

%systemroot%system32dns 에서 (기본 값은 보통 c:windowssystem32dns ) 영역 파일(확장자가 .dns로 되어 있는 파일들을 말함)을 복사한다. 리눅스에선 보통 .zone으로 저장하지만 상관없다. 텍스트 파일(plain text)임.

영역 파일이 한 두 개일 때는 그냥 편집 하면 되지만 회사 정도 되면 그냥 정규 표현식으로 수정하는 방법이 빠르고 편하다. 그 방법은 아래에서 설명한다.

영역(zone) 등록용 파일 만들기

zone(혹은 dns)파일들에 대한 내용을 named.conf 에 추가 해야 하는데, dns 파일을 리눅스 특정 디렉토리에 옮겨 놨다고 하고, 해당 디렉토리에서 아래 내용을 실행.

ls *dns | sed –e ‘s,.dns,,g’ > ~/dnslist.txt ; perl -pi -e ‘s,(.*),zone “$1” {nttype master;ntfile “data/$1.zone”; }ntallow-update { none; };ntallow-transfer { any; };n};,g’ ~/dnslist.txt

.dns 파일들 .zone으로 바꾸기(바꾼 다음에 /var/named/data 등에 옮기자.)

for i in *.dns;do mv $i ${i%dns}zone;done

위 내용은 ~/dnslist.txt 파일 안에 있는 domain.com 을 아래와 같이 만든다.

zone “domain.com” {
        type master;
        file “data/domain.com.zone”; }
        allow-update { none; };
        allow-transfer { any };

};

위 내용을 실행해서 생성된 ~/dnslist.txt를 /etc/named.conf 에 덧붙이던지 하면 된다. 정규표현식이 들어가긴 했지만 각 영역에 대한 설정을 적당히 넣어주면 됨.

slave로 하고 싶다면?

type slave;로 하고 master { “IP” };를 추가하면 됨. allow-update sllow-transfer는 삭제.

zone “domain.com” {
        type slave;
        file “data/domain.com.zone”;

        masters { “192.168.0.1”; };
};

설정에 대한 설명을 하자면,

zone 설정의 file 옵션을 보면, file “data/domain.com.zone”; 와 같이 경로 data가 적혀있는데, 이 디렉토리가 어디에 위치해 있는지를 알 수 없다. 이건 /etc/named.conf의 options에서 directory 항목을 봐야 한다. 예를 들어 아래와 같이 되어 있는 경우

 

options {
        listen-on port 53 { any; };
        //listen-on-v6 port 53 { ::1; };
        directory       “/var/named”;

        …하략…

이 경우 data는 /var/named/data 를 말한다. 이 아래 zone 파일을 놓으면 된다.

리눅스 팁 2탄

  1. rsync
    1. ssh로 rsync 할 때 포트 번호 지정하는 방법
      1. 2222번 포트를 사용할 경우
        1. –rsh=’ssh –p2222′
      2. 예를 들면
        1. rsync -avz –progress –rsh=’ssh –p26′ /home/ jellypo.pe.kr:/home/
    2. 속도 제한 하고 싶을 때
      1. –bwlimit=KBPS          limit I/O bandwidth; KBytes per second
        1. rsync -avz –bwlimit=100 –progress –rsh=’ssh –p26′ /home/ jellypo.pe.kr:/home/
    3. 인코딩이 다른 시스템끼리 동기화할 때 멀티바이트(한글) 깨지는 경우
      1. 인코딩을 지정해주면 됨
      2. –iconv=CONVERT_SPEC    request charset conversion of filenames
      3. 이 옵션은 일정 버전 이상 되어야 있음(정확한 버전은 …모르겠음)
        1. rsync –av  –iconv=utf-8,cp949 a.com:/home/ b.com/home/
        2. 여러 개 적을 수 있다. 이 경우 utf-8을 쓰는 a.com에서 cp949를 쓰는 b.com으로 싱크를 하는 방법 (… 반대 일 수 있음)
  2. 포트 스캔
    1. nc (netcat)
      1. 211.218.150.200에 1부터 1000번까지 포트스캔해라.
        1. nc -v -z 211.218.150.200 1-1000
      2. 텔넷식으로 접근(telnet localhost 80 같이 테스트 할 때)
        1. nc –t <대상IP> <port>
    2. nmap
      1. TCP 열린 포트 확인
        # nmap -sT -p 1-1024 localhost
        
      2. UDP 열린 포트 확인
        # nmap -sU -p 1-1024 localhost
        
      3. 특정 열린 포트 확인
        # nmap -sX -p 25,53,110 192.168.0.3
        
  3. 트래픽 관련
    1. 트래픽 확인은 iptraf 가 좋은 듯. 패키지 등을 설치해야 있음.
  4. awk로 간단한 덧셈 할 때 (ls –l 로 파일 사이즈 합쳐서 볼 때)
    1. awk '{sum += $2} END { print "sum is", sum }' filename
    2. $2를 더해서 볼 위치로 적당히 수정하면 됨..



	

맥미니에 USB으로 우분투 설치하기

맥 OS X은 정말 아름답고 훌륭한 OS다. 그러나 안타깝게도, 한글 처리가 매우 …매우… 이상하다. 유니코드(UTF-8)을 쓰긴 쓰는데, UTF-8-mac 인가 하는 인코딩 방식을 쓴다.

무슨 차이인고 하니, 한글을 조합할 때 NFC(normalization form C)와 NFD(normalization form D) 방식이 있고, UTF-8-MAC은 NFD 방식이라고 한다(물론 NFC, NFD 둘 다 표준이다.)

NFC : 한글”이란 단어를 “한글”로 저장

NFD : “ㅎㅏㄴㄱㅡㄹ”로 저장

라고 한다. 이는 일어 처리에서도 같은 현상이 있다고(청음/탁음 표기가 글자에서 떼서 저장) 한다. 래도 대충 알아볼 수 있는 일어에 비해 자모가 완전히 분리되는 한글쪽이 타격이 큰듯.

이 한글 문제를 해결하는 방법이 많지만 완벽하지 않을 뿐더러 해결 불가능한 부분도 있다.

GUI만 사용하면 별다른 문제가 없는데, ssh 등으로 원격 접속할 때 한글 파일/디렉토리명을 사용하기가 힘들고 git 코멘트를 한글로 쓰기가 어려워서(방법은 있다고 한다) 결국 우분투로 이주를 결심했다.

멀티부팅 등을 하려면 뭔가 복잡한데, 그냥 죄 날려버리고 우분투만 쓰는 방법을 기술한다.

 

맥 OS X용 우분투 설치 미디어 만들기

PC에서 만든 부팅용 USB로 부팅할 수가 없다! 맥에서 부팅 USB를 미리 만들어야 한다.

설치 과정을 요약하면

우분투 iso 파일을 변환(hdiutil)

변환한 파일을 USB에 쓰기(dd)

hdiutil convert -format UDRW -o ~/path/to/target.img ~/path/to/ubuntu.iso

예를 들어 ~/Downloads/ubuntu-12.04-desktop-amd64.iso 에 파일이 있다면

hdiutil convert -format UDRW -o ~/ubuntu-12.04-mac ~/Downloads/ubuntu-12.04-desktop-amd64.iso

~/ 경로에 ubuntu-12.04-mac.dmg 파일을 생성한다.

이 이미지를 USB에 밀어 넣으면 되는데, USB 마운트 된 상태에선 안되므로 언마운트

sudo diskutil unmountDisk /dev/disk2

/dev/disk2가 아닐 수도 있다. diskutil list 던가? 로 확인해볼 것.

이미지 USB에 쓰기

dd if=~/ubuntu-12.04-mac.dmg of=/dev/disk2 bs=1m

/dev/disk2를 /dev/rdisk2로 쓰면 좀 더 빨리 쓸 수 있다고 한다.

이걸로 완성. 리부팅을 하자. 리부팅 되는 동안 command(alt)키를 누르고 있으면 부팅 매체 선택할 수 있는 화면이 나오고, USB로 부팅하면 우분투 설치 과정이 진행된다.

파티션 설정할 때, 맥용 복구 파일이 있는 파티션이랑 그 외 몇 가지가 더 있는데, 이걸 남겨뒀더니 리부팅 할 때 우분투로 부팅 안 되는 경우가 있어서 그냥 HDD에 있는 모든 파티션을 싹 날리고 우분투만 설치했더니 잘 된다.

설치 후 이더넷 드라이버 잡아주기

유선 이더넷 장치가 잡히지 않는다!! 무선은 잡힘.(2014년 1월 현재, 우분투 커널 3.11.0-15는 별도 설정 없이 맥미니 이더넷 드라이버 잡힙니다. 따라서 최신 버전 사용시 아래 내용은 적용할 필요가 없습니다. 그 이전까진 모듈이 제대로 안 잡혔음)

broadcom tg3 모듈을 잡아줘야 한다.

리눅스 소스, 헤더 설치

sudo apt-get install linux-source linux-headers-generic

설치된 파일은 /usr/src 밑에 있다. linux-source 는 tar.bz2로 압축 되어 있음. 압축 풀어준다.

리눅스 커널 소스 디렉토리에서 drivers/net/ethernet/broadcom/ 디렉토리로 이동, tg3.c 파일 편집

cd /usr/src/linux-source-3.8.0/linux-source-3.8.0/drivers/net/ethernet/broadcom/

sudo vim tg3.c

{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)}, 를 찾아서 그 밑에

{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)},
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)},
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)},

추가해주고 저장.

리눅스 커널 소스 디렉토리로 현재 커널의 Module.symvers 파일을 복사해야 함. linux-header 경로에서 가져와야 함.

sudo cp /usr/src/linux-headers-3.8.0-19-generic/Module.symvers /usr/src/linux-source-3.8.0/linux-source-3.8.0/

모듈 컴파일

cd /usr/src/linux-source-3.8.0/linux-source-3.8.0/

sudo make clean
sudo make oldconfig
sudo make scripts
sudo make prepare

cd drivers/net/ethernet/broadcom/

make –C /usr/src/linux-source-3.8.0/linux-source-3.8.0 SUBDIRS=$PWD modules

컴파일 된 모듈을 복사(/usr/src/linux-source-3.8.0/linux-source-3.8.0/drivers/net/ethernet/broadcom/ 에 생긴다)

sudo cp tg3.ko /lib/modules/3.8.0-19-generic/kernel/drivers/net/ethernet/broadcom/

모듈 올리기

sudo modprobe tg3

리부팅해도 모듈 바로 올라가도록 /etc/modules 파일 수정

sudo vim /etc/modules

loop
lp
rtc
tg3

이후 패키지 업데이트 시 커널 관련 업데이트 있으면 업데이트 후 리붓 시 유선 연결 안될 수 있으니 알아서 조심.. 무선 이더넷과 같이 쓰는 것도 방법이다.