2019/12/03

페어라인 테니스 방송 DNS, DDNS 개발 테스트

1. 개요
DDNS는 Dynamic DNS의 약자이다.
DDNS 서비스를 해 주는 곳이 바로 DNS 서비스 중 Dynamic 부분을 해준다.

현재 CLI 기반으로된 DDNS 서비스를 보안장비에다 GUI 기반으로 변경한다.

2. DDNS 서비스 회사
유료
DYNDNS.COM

만약 자체 Dynamic 부분을 직접 운영 한다면, 서비스를 제공하는 회사의 서비스를 받을 필요가 없다.


3 nodeJS GUI 구현.
3.1 설치
https://nodejs.org/en/download/package-manager/

3.2 페도라 6.5 기반
curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -
sudo yum -y install nodejs
sudo yum install gcc-c++ make

3.3 우분투 12.04 기반
3.1 저장소 등록

sudo sh -c "echo deb https://deb.nodesource.com/node_6.x precise main \
> /etc/apt/sources.list.d/nodesource.list"

3.2 소스 파일 추가
sudo vi /etc/apt/sources.list.d/nodesource.list
deb https://deb.nodesource.com/node_6.x precise main
deb-src https://deb.nodesource.com/node_6.x precise main

3.3 키값 추가 설치 스크립트 다운로드
sudo apt-get -y install curl
curl --silent https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -
curl -sL https://deb.nodesource.com/setup_6.x -o nodesource_setup.sh

3.4 컴파일러 추가
sudo apt-get install gcc g++ make

3.5 설치
sudo bash nodesource_setup.sh

3.6 nodejs 설치 ip 는 설치 안해도 된다. 하지만 예전 프로젝트 webrtc 구동을 위해 설치 했음.
sudo apt-get -y install nodejs && sudo npm -y install forever -g && sudo npm install ip -g

// 설치 버전 있으면 의존성 에러 발생. 그냥 설치 버전으로 진행. 즉 아랫 명령어 실행.
sudo apt-get install npm

scp source_file(webrtc_server and easyrtc) download

3.7 이건 참고용이다. 예전 webrtc 프로젝트 즉, 잘 동작하는가 확인을 위해 설치 했음.
Node.js 플러그인 forever, ip 설치
$ sudo npm install forever -g
$ sudo npm install ip -g
--- sudo rm -rf /usr/bin/node
 -. $ sudo ln -s /usr/bin/nodejs /usr/bin/node

3.7.1 시작프로그램 등록
$ sudo vi /etc/rc.local
 -. 최하단 exit 0 이전에 아래내용 추가
 +++ /home/snow/easyrtc/start.sh
exit 0


3.7.2 start.sh 내용
#!/bin/sh
cd /home/snow/easyrtc/server/
sudo forever start server.js
cd -

3.7.3 테스트
보안장비 https, http 프로토콜 open
기본적으로 443을 사용하고 있다.

웹브라운저
https://IPaddress

reboot
/etc/init.d/nemoos network restart

4. 참고 문서
https://javafa.gitbooks.io/nodejs_server_basic/content/chapter3.html
http://http://www.tutorialbook.co.kr/entry/NodeJS-%EC%97%90%EC%84%9C-Express-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0
http://devlecture.tistory.com/entry/lecture02-Express%EC%9D%98-%EC%84%A4%EC%B9%98%EC%99%80-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1-%EC%98%88%EC%A0%9C-%EC%8B%A4%ED%96%89

5. 구현
5.1 DNS 이름
gist.fairlineai.com
fltnsobs.gist.fairlineai.com
5.2 응답테스트
5.2.1 설정된 DNS 응답 메세지
root@fwgist:~# nslookup gist.fairlineai.com
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
gist.fairlineai.com     canonical name = fwgist.fairlineai.com.
Name:   fwgist.fairlineai.com
Address: xx.xx.xx.xx

5.2.2 설정안된 DNS 응답 메세지
nslookup fltnsobs.gist.fairlineai.com
Server:         127.0.0.1
Address:        127.0.0.1#53

** server can't find fltnsobs.gist.fairlineai.com: NXDOMAIN

5.2.2.1 보안장비 검색 엔진 변경
domain: google.com

root@fwgist:~# nslookup fltnsobs.gist.fairlineai.com
Server:         127.0.0.1
Address:        127.0.0.1#53

5.2.2.1.2 동일함 resolver에 대한 설정 값 실험필요.
실험방법.
- 보안장비 2개 설정
- 포워드 서버 한대, 공인 IP 1나
- 리조버 서버 한대, 공인 IP 2나

공급받은 DNS 하나로 테스트 fairlineai.com
포워드 서버 설정 설계.(도메인 이름 IP 변경)
리조버 서버 설정 설계.(IP를 이름으로 변경)

5.3 bind 환경설정
5.3.1 named.conf 파일 설정.
cd /etc/bind/
cat named.conf

include "/etc/bind/named.conf.options";
include "/etc/bind/keys";

// prime the server with knowledge of the root servers
zone "." {
        type hint;
        file "/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

include "/etc/bind/named.conf.local";

5.3.2 /etc/bind/named.conf.options 수정
empty-zones-enable no; ---> 추가.

cat /etc/bind/named.conf.local
options {
     sortlist {
            { 172.16.1.0/24 ;{ 172.16.1.0/24 ; };};
            { 172.16.6.0/24 ;{ 172.16.6.0/24 ; };};
    };
    directory "/var/cache/bind";

    // If there is a firewall between you and nameservers you want
    // to talk to, you might need to uncomment the query-source
    // directive below.  Previous versions of BIND always asked
    // questions using port 53, but BIND 8.1 and later use an unprivileged
    // port by default.

    //query-source address * port 53;
    //transfer-source * port 53;
    //notify-source * port 53;

    // If your ISP provided one or more IP addresses for stable
    // nameservers, you probably want to use them as forwarders.
    forward first;
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };

    tkey-gssapi-keytab "/opt/samba4/private/dns.keytab";

    auth-nxdomain no;    # conform to RFC1035

    allow-query { any; };
    empty-zones-enable no; --> 추가 보안장비 재부팅시 내용 사라짐.
    allow-recursion { trusted; };
    allow-query-cache { trusted; };
    allow-transfer { internal-local-nets; };
};
                               
5.3.3 보안장비 DNS 구성
5.3.3.1 해남 연구소
- fairlineai.com 가비아 URL 공급
- n1.fairlineai.com:해남 연구소 외부 ip 연동
- n2.fairlineai.com:해남 연구소 외부 ip 연동

- mail.gairlineai.com: 해남 연구소 웹메일서버 설정
- gist.fairlineai.com: 광주 연구소 외부 ip 2차 도메인 설정

도메인 설정 테스트
LTE 스마트폰을 이용 테스트 gist.fairlineai.com 광주 사무실 접근 확인.
LTE 스마트폰을 이용 테스트 FTP 서버 포트 포워딩 gist.fairlineai.com 광주 사무실 접근 확인. 
내부 광주 연구소 컴퓨터에서  gist.fairlineai.com 광주 사무실 접근 확인.
내부 광주 연구소 컴류터에서 FTP 포트 포워딩 giist.fairlineai.com 광주 사무실 접근 확인. 
메일 서버도 동일하게 테스트 완료.

5.3.3.2 광주 GIST 연구소 DNS 검토
- gist.fairlineai.com 2차 도메인 서비스 설정 없음.
- 해남 DNS 서버에서 광주 연구소 외부 IP와 DNS 정보 설정만 해주면 접근 가능확인.

모든 서비스 동작확인.

즉, 현재 광주 보안장비 IP는 gist.fairlineai.com으로 매칭됨.

5.4 광주 GIST 연구소 DNS 설정
5.4.1 DNS 추가
- 보안장비 GUI를 통해 추가

5.4.2 추가 구성 확인
cat /etc/bind/db.fairlineai.com
$ORIGIN fairlineai.com.
$TTL 3D
@       IN      SOA     fwgist hostmaster (
                        2019112117      ;serial number
                        8H              ;refresh
                        2H              ;retry
                        4W              ;expiration
                        1D )    ;minimum
;
@       IN      NS      fwgist
@       IN      A       172.16.1.1
@       IN      A       172.16.6.1
@       IN      A       xx.xx.xx.xx
;

fwgist     IN      A       xx.xx.xx.xx
fwgist     IN      A       172.16.1.1
fwgist     IN      A       172.16.6.1

5.4.2.1 테스트

5.4.2.1.2 보안장비 외부 GW
- 외부 IP DHCP 받음
- 내부 IP Static 정보 입력
- 내부 DHCP

a. 유선 eth1 광주 연구소 내부 테스트
http://fairlineai.com
https://fairlineai.com:5700

해남 서버 접근 불가능 하며, 광주 연구소 GW 서비스 연동 됨.

b. 해남 DNS 서버 IP 매칭 URL 접근 
gist.fairlineai.com

내부 유선 eth1
- 페이지 없음

내부 무선 WiFi
- 페이지 없음

외부 LTE
- 접근 가능

결론: 내부 GW DNS 생성시 해남 연구소와 동일한 DNS 입력했으므로 동작하지 않음
해결책은 광주 DNS에다가 해남 DNS IP 주소 변경후 서비스 정보 제공한다.

gist.fairlineai.com도 내부 IP로 변경해 줄때 내부에서 사용하는 얼리어스를 하나만들어 줘야한다.
외부에서 접근시 gist.fairlineai.com
내부에서 접근시 security.fairlineai.com

즉, 해남 연구소 서버와, 광주 DNS 서버의 설정 문제.
동일한 도메인을 사용하고 IP 주소가 다름.

동시에 사용할 수 없는 이유는
외부에서 접근시는 해남 서버에서 응답을 먼저하고,
내부 접근시에는 광주 연구소 내부에서 먼저 응답을 하기 때문이다.

b. 보안장비 유선 내부 GW
- 테스트 모두 통과

즉, DNS 설정시 URL과 IP 매칭이 중요하다.
리졸버, 포워더 DNS 설정을 잘 해줘야 한다.

c. 보안장비 유무선 내부 GW
- 테스트 모두 통과

즉, DNS 설정시 URL과 IP 매칭이 중요하다.
리졸버, 포워더 DNS 설정을 잘 해줘야 한다.

접속이 불안정할 경우.
그럴때는 로컬 환경을 재부팅 해준다.
DNS 동기화 시간이나 기타등등 네트워크 환경을 새로 잡기 위해 재부팅한다.

5.5 DNS 연동 확인 파일
cat /etc/bind/db.fairlineai.com
$ORIGIN fairlineai.com.
$TTL 3D
@       IN      SOA     fwgist hostmaster (
                        2019112122      ;serial number
                        8H              ;refresh
                        2H              ;retry
                        4W              ;expiration
                        1D )    ;minimum
;
@       IN      NS      haenam
@       IN      A       xx.xx.xx.xx
;

haenam     IN      A       xx.xx.xx.xx
mail    IN      CNAME   haenam
fwgist     IN      A       172.16.1.1
fwgist     IN      A       xx.xx.xx.xx
gist    IN      CNAME   fwgist
ss     IN      A       172.16.1.97
ftp    IN      CNAME   ss

5.6 host 파일 구성
 cat /etc/host.conf
# The "order" line is only used by old versions of the C library.
order hosts,bind
multi on

5.7 resolv 구성
리졸버: IP 주소를 DNS로 해석
포워드: DNS 주소를 IP로 해석

cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# and managed by Nemoos.
#
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
#
nameserver 127.0.0.1
search fairline.lan kornet

5.7.1 구성파일 설명

-dns-search=”example.com”처럼 설정하면 DNS 서버에 hello를 질의할 때 hello.example.com을 먼저찻음.
kornet은 168.126.63.1 의 DNS 서버인데 자동으로 설정 되었다.

kernet 수동삭제 해놓음 -> 재부팅시 다시 생성된다.

A : resolvconf 는 /etc/resolvconf/resolv.conf.d/의 경로를 가지며 base, head, original, tail 파일들을 가질수 있다.
설정법은 resolv.conf 에 방식과 같으며 아래는 각각의 파일에 대한 설명이다.

base - 다른 설정 파일들을 찾을수 없을때 사용된다.
head - resolv.conf 파일의 헤더에 사용되는 DNS 서버는 항상 목록의 첫 번째인지 확인하는데 사용할 수 있다.
original - resolvconf 를 설치시 이전의 resolve.conf 의 백업이다.
tail - resolv.conf 파일의 끝에 추가된다.

cd /etc/resolvconf

cat interface-order
lo.inet*
lo.dnsmasq
lo.pdnsd
lo.!(pdns|pdns-recursor)
lo
nemoos.domain
eth0.dhclient
eth0.dhclient
nemoos.form

6 동작확인
nslookup fairlineai.com

Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   fairlineai.com
Address: xx.xx.xx.xx

6.1 외부 네임서버 동작확인(포워드 조회)
 dig @8.8.8.8 fairlineai.com

; <<>> DiG 9.8.1-P1 <<>> @8.8.8.8 fairlineai.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7122
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;fairlineai.com.                        IN      A

;; ANSWER SECTION:
fairlineai.com.         21599   IN      A       xx.xx.xx.xx

;; Query time: 174 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Nov 22 02:10:01 2019
;; MSG SIZE  rcvd: 48

6.2 리버스 조회
dig -x 8.8.8.8

; <<>> DiG 9.8.1-P1 <<>> -x 8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53647
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 0

;; QUESTION SECTION:
;8.8.8.8.in-addr.arpa.          IN      PTR

;; ANSWER SECTION:
8.8.8.8.in-addr.arpa.   21402   IN      PTR     dns.google.

;; AUTHORITY SECTION:
.                       36171   IN      NS      h.root-servers.net.
.                       36171   IN      NS      g.root-servers.net.
.                       36171   IN      NS      m.root-servers.net.
.                       36171   IN      NS      a.root-servers.net.
.                       36171   IN      NS      j.root-servers.net.
.                       36171   IN      NS      e.root-servers.net.
.                       36171   IN      NS      l.root-servers.net.
.                       36171   IN      NS      c.root-servers.net.
.                       36171   IN      NS      i.root-servers.net.
.                       36171   IN      NS      d.root-servers.net.
.                       36171   IN      NS      k.root-servers.net.
.                       36171   IN      NS      b.root-servers.net.
.                       36171   IN      NS      f.root-servers.net.

;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Nov 22 02:11:18 2019
;; MSG SIZE  rcvd: 273

7. 보안설정
7.1 iptables 작성
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT ---> ping 응답 확인을 위해
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -> 공개키, 개인키
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -> 웹서버 포트 변경 가능
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -> https 웹서버
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT -> DNS 서비스
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT -> DNS 서비스
-A INPUT -j REJECT --reject-with icmp-host-prohibited -> ping
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

8. 테스트 방안
Nslookup을 사용하여 DNS 구성 확인 방법
명령 프롬프트에서 Nslookup을 입력한 다음 Enter 키를 누릅니다.
server <IP address>를 입력합니다. 여기서 IP address는 외부 DNS 서버의 IP 주소입니다.
set q=MX를 입력한 다음 Enter 키를 누릅니다.
<domain name>을 입력합니다. 여기서 domain name은 외부 메일 도메인의 이름입니다.
그런 다음 Enter 키를 누릅니다.
입력한 도메인의 메일 교환기(MX) 리소스 레코드가 표시되어야 합니다.
MX 레코드가 나타나지 않으면 DNS가 외부 도메인 이름을 확인하도록 구성되지 않은 것입니다.

9.1 테스트 진행.
현제 연구실에 설치되어 있는 컴퓨터 하나에다가 dns 정보를 생성해준다.
주의 할점은 서버 아이피와 로컬 아이피이다.
서버 아이피는 xx.xx.xx.xx 이고 매핑 아이피는 172.16.1.17이다.

9.1.1 DNS 정보 업데이트
nsupdate
> server xx.xx.xx.xx
> update add testa.fairlineai.com 60 IN A 172.16.1.17
> show

Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id:      0
;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; UPDATE SECTION:
testa.fairlineai.com.   60      IN      A       172.16.1.17

9.1.2 외부 네임서버 동작확인(포워드 조회)
9.1.2.1 기존 fairlineai.com 조회
dig @xx.xx.xx.xx fairlineai.com

; <<>> DiG 9.8.1-P1 <<>> @xx.xx.xx.xx fairlineai.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20469
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;fairlineai.com.                        IN      A

;; ANSWER SECTION:
fairlineai.com.         259200  IN      A       xx.xx.xx.xx

;; AUTHORITY SECTION:
fairlineai.com.         259200  IN      NS      haenam.fairlineai.com.

;; ADDITIONAL SECTION:
haenam.fairlineai.com.  259200  IN      A       xx.xx.xx.xx

;; Query time: 7 msec
;; SERVER: xx.xx.xx.xx#53(xx.xx.xx.xx)
;; WHEN: Fri Nov 22 02:47:11 2019
;; MSG SIZE  rcvd: 85

9.1.2.2 방금추가한 내용 질의
dig @xx.xx.xx.xx testa.fairlineai.com

; <<>> DiG 9.8.1-P1 <<>> @xx.xx.xx.xx testa.fairlineai.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 41582
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;testa.fairlineai.com.          IN      A

;; AUTHORITY SECTION:
fairlineai.com.         86400   IN      SOA     haenam.fairlineai.com. hostmaster.fairlineai.com. 2019112202 28800 7200 2419200 86400

;; Query time: 7 msec
;; SERVER: xx.xx.xx.xx#53(xx.xx.xx.xx)
;; WHEN: Fri Nov 22 02:56:30 2019
;; MSG SIZE  rcvd: 92

추가되지 않음. ---> 여기서 부터 다시 보안장비 코드 점검 필요. 서버 추가 내용 복구
알고리즘 : 해남서버로 접근 하지 말고, 광주 연구소 IP 기반으로 3차 도메인을 작성한다.
/usr/share/nemoos/stubs/dns/
vi named.conf.options.mas
empty-zones-enable no; ---> 삭제 원상복구

10 삭제
nsupdate
> server xx.xx.xx.xx
> update delete testa.fairlineai.com
> send

11 스크립트 작성
cat nsadd-scr.cmd
server 172.16.1.56
prereq nxdomain adfsdf.dnskcam.com.
update add adfsdf.dnskcam.com. 60 IN A 192.168.0.100
show
send

nsupdate
> server xx.xx.xx.xx
> update delete adfsdf.fairlineai.com
> send

관리패키지 설치
npm install forever -g
forever list
forever start noip/bin/www
forever restart 0
forever stop 0


최종 결론
보안장비 DHCP static IP는 외부망 통신
내부망으로 DDNS 구성한다.

2차 도메인 관리는 로그인을 할 수 있게 그룹, 사용자 추가로 한다.

댓글 없음:

댓글 쓰기