독까의 이야기

서버에서 생성 한 파일의 생성 시간과 데스크톱 PC 에서 확인 된 시간하고 상이하다. 


시간 동기화 진행을 한다.


# rdate -s time.bora.net


명령어를 입력했는데, 실행 불가가 나온다. 

-bash: rdate: command not found


rdate 패키지가 설치가 안되어 있는 것 같다. 

# yum install rdate -y


설치 후 동기화 재실행 하니, 정상적으로 완료 되었다. 


DNS 란? 

네트워크에서 도메인이나 호스트 이름을 숫자로 된 IP 주소로 해석해주는 TCP/IP 네트워크 서비스이다.

TCP/IP 네트워크에서 사용되는 네임 서비스의 구조이다. TCP/IP 네트워크에서는 도메인이라고 하는 논리적 그룹을 계층적으로 설정할 수 있고, 그 논리적 그룹 명칭인 도메인명을 컴퓨터의 명칭(호스트명)의 일부에 포함시켜 이용하는 방법을 찾고 있다. 도메인 혹은 호스트 이름을 숫자로 된 IP 주소로 해석해 주는 TCP/IP 네트워크 서비스로서, 계층적 이름 구조를 갖는 분산형 데이터 베이스로 구성되고 클라이언트·서버 모델을 사용한다. 


각 컴퓨터의 이름은 마침표에 의해 구분되고 알파벳과 숫자로 구성된 세그먼트의 문자열로 구성되어 있다. 예를 들어 기관별로는 com이면 기업체, edu인 경우는 교육기관, go 또는 gov인 경우는 정부기관 등으로 나누어져 있다. 국가도메인은 au는 호주, ca는 캐나다, jp는 일본, kr는 한국, tw는 대만, uk는 영국 등이다.

[네이버 지식백과] DNS [domain name system] (두산백과)

라고 한다. 

뭐 간단히 말해서 PC 사용자가 특정 웹사이트 접속을 위해, 웹브라우저에 url 을 입력하면 DNS 에서 해당 웹사이트가 구축되어 있는 웹서버의 아이피를 확인하여 연결해주는 것이다. 라고 하면 될 걸 길게도 썼네. 그냥 교환국 입니다. 가 끝이지뭐. 

리눅스 서버에서 DNS 서버를 구축하기로 한다. 



1.  도메인 구입

테스를 위해서 무료 도메인 검색을 해봤는데, 마땅히 나오는 것도 없고 해서 .xyz 도메인을 구입했다. 

가비아에서는 1900 원에 구입이 가능했는데, 고대디에서는 1260 원이라길래 고대디에서 구매를 진행했다. 

 visa 카드로 결제 하는데, 자동 갱신이 기본 설정이므로 까먹고 있으면 돈만 쭉쭉 나가게 생겼다. 내 정보에서 자동 갱신을 취소 해야 한다. 

외국 사이트들은 왜 카드정보를 입력해 놓으면, 자동 갱신을 Default로 설정 하는지 모르겠다. 

예전에 4shared 사용할 때도 자동 결제 해지하느라 영문 메일 보내고 개빡침! 


저장 된 카드 정보도 삭제를 하려고 했는데, 사용 중인 상품에 결제 방법이 연동되어 있어서 안 된다고 한다. 

도메인 만료시에 삭제를 해야겠다. 

이제 도메인도 구입을 했으니, 서버에 설치를 진행 한다. 



2.  bind 패키지 설치 및 방화벽 오픈

# yum install bind* -y

자동으로 쭉쭉 설치가 되기 때문에 따로 할 것은 없다. 


DNS 서비스 실행 및 자동 실행 설정

# service named start

# chkconfig named on

# chkconfig --list named

named           0:해제  1:해제  2:활성  3:활성  4:활성  5:활성  6:해제


# vi /etc/sysconfig/iptables 에 정책 추가

-A INPUT -p udp -m udp --dport 53 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT

# service iptables restart



3.  설정 파일 수정

# vi /etc/named.conf

listen-on port 53 { 127.0.0.1; }; -> listen-on port 53 { any; };

allow-query     { localhost; }; -> allow-query     { any; };

최하단에 도메인 및 zone 파일 정보를 입력한다. 

다른 게시글들을 읽어보면, named.rfc1912.zones 의 하단에 도메인 정보를 입력하라고 하는데, 그냥 named.conf 에 입력해도 무관하다. 

named.rfc1912.zones 에 도메인 및 zone 파일 정보를 입력하라는 얘기는 named.conf 에서 include 를 통해서 named.rfc1912.zones 에 기재 된 내용을 갖고 오기 때문인데, 본인이 알아서 사용하면 될 것 같다. 

include "/etc/named.rfc1912.zones";


결론은 named.conf 에 입력하거나 named.rfc1912.zones 입력하거나 똑같다는 얘기다. 단, 중복이 되서는 안 된다. 

정방향과 역방향 둘 다 입력해준다. 

단순 도메인 정보 입력이면 역방향까지는 생성 안 해줘도 된다. 

내 서버에 네임서버를 구축하여 연동을 시켜야 하기 때문에 역방향까지 등록을 한다. 


// 정방향

zone "gunnm.xyz"             IN {type master;file "gunnm.xyz.zone";allow-update {none;}; };

// 역방향

zone "77.175.254.121.in-addr.arpa"             IN {type master;file "77.175.254.121.rev";allow-update {none;}; };



4.  zone 파일 생성

/var/named 폴더에 등록되어 있는 named.localhost 를 복사하여 zone 파일을 생성한다. 

zone 파일에 등록되는 세부 항목에 대해서는 아래의 표를 참고 하면 될 것 같다. 

형식

설명

;

주석

TTL

Time to Live. 캐시 활성 시간으로, 서버 정보를 자주 변경하는 경우는 보다 짧게 입력하자.

@

Origin을 뜻하는 특수문자이다.

IN

Internet. 네트워킹 주소 클래스

SOA

Start Of Authority. 네임 서버 관리자 메일 주소. 해당 도메인의 모든 리소스에 대한 권리를 알려 주는 레코드이다.

NS

Name Server. 네임 서버를 알린다.

MX

Mail Exchanger. 지정하는 메일 서버가 2개 이상일 때 우선순위를 지정한다.

A

Address. 도메인을 IP로 매핑하는 가장 중요한 레코드이다.

[네이버 지식백과] (유닉스 리눅스 명령어 사전, 2010. 11. 30., 한빛미디어)


# cp /var/named/named.localhost /var/named/gunnm.xyz.zone

$TTL 1D

@       IN SOA  ns1.gunnm.xyz. webmaster.gunnm.xyz. (

                                        3       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        IN      NS      ns1.gunnm.xyz.

        IN      NS      ns2.gunnm.xyz.

        IN      A       121.254.175.77

ns1      IN      A       121.254.175.77

ns2      IN      A       121.254.175.77

www     IN      A       121.254.175.77


# cp /var/named/named.localhost /var/named/77.175.254.121.rev

$TTL 1D

@       IN SOA  ns1.gunnm.xyz. webmaster.gunnm.xyz. (

                                        3       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        IN      NS      ns1.gunnm.xyz.

        IN      NS      ns2.gunnm.xyz.

77      IN      PTR     gunnm.xyz.

77      IN      PTR     www.gunnm.xyz. 



5.  설정 파일 점검

수정 된 named.conf 및 생성 된 zone 파일에 대한 점검을 진행해야 한다. 이 작업을 통해 오류를 확인하고 수정을 할 수 있다. 

# named-checkconf -z /etc/named.conf

# named-checkzone gunnm.xyz /var/named/gunnm.xyz.zone

# named-checkzone 121.254.175.77 /var/named/77.175.254.121.rev

오류가 났을 경우에는, 줄 번호와 함께 오류 원인이 나오니깐 수정을 하면 된다. 



6.  파일 권한 변경

게시글마다 권한 설정에 대한 의견이 분분하다.

ex) chown named:root zone 파일명    또는     chown root:named zone 파일명


나는 아래와 같이 진행을 했다. 

root(소유자):named(소유 그룹) zone 파일명

# chown root:named gunnm.xyz.zone

# chown root:named 77.175.254.121.rev

# chmod 660 gunnm.xyz.zone

# chmod 660 77.175.254.121.rev

구동 서비스에 권한을 어느 정도 할당하냐에 따라서 설정이 달라 질 수 있을 것 같다. named:named 로 권한 할당해도 구동이 가능한 걸 보면...



7.  DNS 서비스 재시작

# service named restart 

named 정지 중:                                             [  OK  ]

named 시작 중:                                             [  OK  ]

정상적으로 구동이 완료되면 설정에 이상은 없다는 뜻이다. 



8.  도메인 구입처에서 네임서버 정보 변경

내 서버에 네임서버를 구축했으니, 고대디에서 기본으로 제공해주는 네임서버 정보를 내가 구축한 네임서버로 변경을 해야 한다. 

고대디에 로그인 후 내 도메인 선택 - DNS 관리 - 네임서버 에서 "변경" 을 클릭 후 내가 구축 한 네임서버 정보를 입력한다.

ns1.gunnm.xyz

ns2.gunnm.xyz

해서 완료는 개뿔, 메일이 온다. 실패 메일이. 

여기서 시간 다 소비했다. 

만들었던 도메인 설정 및 zone 파일 삭제하고 다시 만들고 네임서버명 변경해보고 권한도 다시 할당하고 다 해봤다. 

그래도 계속 똑같은 실패 메일만 수신이 되어서 고객센터에 전화를 했다. 

대기 시간이 10분 이상 걸릴 것 같다드만, 20분 걸림. 영어로 대화하고 싶으면 1번 누르라는데 회화 불가로 포기. 

결국 상담원과 통화 됐는데, 한국사람이 아닌것 같다. 발음하고 억양이 다르다. 옆에서 들려오는 음성들을 들어보니 한국이 아닌 것 같다. 

아마도 전화를 포워딩해서 다른 지역에 있는 CS 센터에서 총괄을 하는 것 같다. 한국 담당은 1명이라서 대기 시간이 길었던 걸지도. 

상담원에게 내가 처해있는 상황에 대해 설명을 하니 정말 간단하게 해결을 해주었다. 


DNS 관리 - 최하단 - 호스트 이름 선택

여기에서 내가 구축한 네임서버 등록을 해야 한단다. 

관리페이지의 기능 버튼들을 다 눌러보았으면 금방 해결 되었을 텐데. 뻘짓했다. 

여기에 내 네임서버의 정보를 입력을 한 후, 

DNS 관리 - 네임서버 에서 "변경" 선택 후 내 네임서버 url 을 입력하면 정상적으로 반영이 된다. 

후이즈 조회시 변경 된 네임서버가 확인 된다. 

Name Server: NS1.GUNNM.XYZ

Name Server: NS2.GUNNM.XYZ


서브 도메인 추가 테스트 정상적으로 완료가 되었다. 


문제는 DNS 서비스가 구동되면 취약점 공격이 너무 많이 들어와버려서 관리를 잘 해야 한다. 

예전에도 bind 패키지가 구 버전인 리눅스 서버들에 대한 무작위 DDOS 공격이 들어와서 DNS 서비스를 구동하지 않는 서버들에 대해서는 삭제 조치 및 버전 업그레이드를 진행 했었다. 

그 때 확인 된거는 공격 당한 서버를 경유지로 이용해서 미국의 록히드 마틴 홈페이지를 공격했었는데, 별 희안한 해커들도 많은 것 같다. 

다음에는 리눅스 DNS 를 마스터, 윈도우 DNS 를 슬레이브로 구축하는 방법을 진행 해야겠다. 

리눅스 서버와 윈도우 서버에 mysql 을 설치 했으니, 이중화를 구성하려고 한다.

MS-SQL 이중화와는 방식이 다르긴 하지만 뭐, 그냥 저냥 해보면 될 것 같다. 


1.  Master 와 Slave 할당


검색을 통해서 알아보니깐 DB 버전이 완전히 같을 필요는 없지만, Slave 가 버전이 높아야 한다고 한다. 


그래서 Master 는 리눅스 mysql 5.1 을, Slave 는 윈도우 mysql 5.6 으로 정했다. 


M : Linux / mysql 5.1 / 192.168.1.10

S : Window / mysql 5.6 / 192.168.1.20




2.  M 의 my.cnf 설정 추가


[mysqld] 하단에 아래의 구문 추가


log-bin=mysql-bin

server-id = 1


mysqld 서비스 재시작


# service mysqld restart




3.  M 의 mysql 에 S 에서 접속할 사용자 계정 생성


mysql> use mysql;

mysql> grant replication slave on *.* to 'repluser'@'192.168.1.20' identified by 'password';




4.  S 의 my.ini 설정 추가


[mysqld] 하단에 아래의 구문 추가


log-bin=mysql-bin

server-id = 2


윈도우 서비스에서 mysql 재시작




5.  S 에서 M 에 접속하는 정보 등록


my.ini 에 아래와 같이 구문을 추가 하고, 서비스 재시작 했더니 구동 실패가 발생했다.


[mysqld] 

master-host=192.168.1.10

master-user=repluser

master-password=password

master-port=3306


mysql 에서 직접 M 의 접속 정보 입력을 진행 했다. 


mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.10',MASTER_USER='repluser',MASTER_PASSWORD='password', MASTER_PORT=3306, MASTER_CONNECT_RETRY=30;

mysql > start slave;


하고 나면, my.ini 에 해당 설정이 추가 되는게 아니라  C:\ProgramData\MySQL\MySQL Server 5.5\data\master.info 파일이 생성되어 저장 된다. 


윈도우 환경이라서 다른 것일 수도 있다. (리눅스 끼리 연동 후 확인 필요)




6.  M 의 mysql 에서 replication 작동 상태 확인


mysql> show master status;




7.  S 의 mysql 에서 replication 작동 상태 확인


mysql> show slave status;




8.  M 의 mysql 에 접속하여 테이블 생성 및 데이타 입력


mysql> use test;

mysql> create table gunnm ( no int(5), date int(10), text char(50), primary key(no) );

mysql> insert into gunnm values ('1', '20180321', 'replication test success, gunnm.tistory.com');

mysql> select * from gunnm;




9.  S 의 mysql 에 접속하여 gunnm 테이블 조회


mysql> use test;

mysql> select * from gunnm;




10.  결과

MS-SQL 의 미러링을 구성하는 Slave 서버에서는 대부분의 기능이 제한적인데 반해, mysql 에서는 slave 이지만 데이타값 조회가 가능한 것을 확인했다. 

그래서 slave 에서 데이타를 입력하면 master 에도 반영이 되는가를 테스트 해보았는데, 결과는 


master 의 테이블에는 slave 에서 입력한 데이타값 저장이 되지 않았다. 



결과적으로 Master 로 부터 데이타를 가져와서 저장을 하지만, 양방향 동기화가 되는 것은 아니다. 

즉, Master 에서 Slave 로의 데이타 백업만 진행되는 것을 확인 했다. 

구성 방식을 바꾸면 가능한지를 확인해 봐야겠다. 


OS 가 상이하여도 (리눅스 + 윈도우), mysql 을 DBMS 로 사용 한다면 이중화 구성이 가능함을 확인했다.