DDNS 구축하기 (PDNS 사용자)
PDNS 에 DDNS 기능이 있는것 같은데, 아직 개발 단계에 있다는 말도 있고..
SSH 키를 이용해 인증하는것 같아 제 나름의 방법대로 구축 방법을 기술하였습니다.
1. Client 설정
Client 서버에서 네임서버로 IP 정보를 전송해야 하므로, Client 서버에 아래와 같은 명령을 이용하여 주기적으로 IP를 체크, 업데이트 할 수 있도록 해야합니다.
아래 인증 방법 두 가지 중 하나를 이용하면 됩니다.
인증 방법1
# lynx -source -auth=아이디:패스워드 'http://ns1.sysdocu.com/update.php?도메인'
인증 방법2
# wget -O - --http-user=아이디 --http-passwd=패스워드 'http://ns1.sysdocu.com/update.php?도메인'
위 스크립트가 5분마다 자동 실행될 수 있도록 자동 스케쥴러에 등록해 놓습니다.
아래 예에서는 아이디 및 패스워드, 갱신할 도메인 sysdocu.com 을 실제로 입력하였습니다.
# crontab -e
*/5 * * * * wget -O - --http-user=sysdocu --http-passwd=PassW0rD 'http://ns1.sysdocu.com/update.php?sysdocu.com' |
2. Server 설정
네임서버에서는 Client 서버의 IP 정보를 수시로(1분 마다) 체크 하고 있다가 변경되어질 때, 업데이트 합니다.
그래서 Client 서버에서 보내오는 신호를 체크하고 DB에 저장된 IP값과 비교, IP 값이 다를 경우 업데이트 하는 스크립트를 만들어야 합니다.
우선 pdns DB에 users 테이블을 추가합니다. 아이디로 검색해 본인이 사용하는 도메인이 맞는지 확인하기 위해 사용됩니다.
# vi users.sql
CREATE TABLE users ( no INT PRIMARY KEY AUTO_INCREMENT, id varchar(255), domain varchar(255) ) Engine=InnoDB; |
# mysql -p pdns < users.sql
Enter password: (패스워드 입력)
추후에 사용할때는 users 테이블에 실제 사용하는 아이디랑 도메인이 들어가 있어야 작동을 합니다.
예) user1 sysdocu.com
user1 www.sysdocu.com
user2 system.sysdocu.com
# touch /usr/local/apache/htdocs/update.php // ns1.sysdocu.com 의 기본 디렉토리 안에 빈페이지를 생성합니다.
# vi /root/ipcheck.sh
#!/bin/bash cat /usr/local/apache/logs/ns1.sysdocu.com-access_log |grep 'update.php' |grep '200 -' |awk {'print $1" "$3" "$7'} |sed -e 's/\/update.php?//' > temp.txt cat /dev/null > /usr/local/apache/logs/ns1.sysdocu.com-access_log while read newIP USER Host trash do # 접속계정과 호스트를 이용해 DB의 저장값을 불러옵니다. authuser=`mysql -updns -p12345678 pdns -e "SELECT COUNT(*) FROM users WHERE id='$USER' AND domain='$Host'" |tail -n 1` # 저장값이 있으면 아이피값이 같은지 비교, 다를경우 업데이트합니다. if [ "$authuser" = "1" ]; then oldIP=`mysql -updns -p12345678 pdns -e "select content from records where name='$Host' and type='A'" |tail -n 1` if [ "$oldIP" != "$newIP" ]; then mysql -mysql -updns -p12345678 pdns -e "UPDATE records SET content='$newIP' where name='$Host' and type='A'" fi else echo "" fi done < temp.txt rm -f temp.txt |
이제 위 스크립트가 1분마다 자동으로 실행될 수 있도록 자동 스케쥴러에 등록해 놓습니다.
# crontab -e
* * * * * sh /root/ipcheck.sh |
또한 인증 받은 사람만(아이디, 패스워드로 확인) 업데이트가 가능하도록 아파치 웹인증 암호를 걸어 놓습니다.
# cd /usr/local/apache/htdocs // ns1.sysdocu.com 의 기본 디렉토리
# vi .htaccess
AuthName "User Authorization" AuthType Basic AuthUserFile /usr/local/apache/htdocs/.htpasswd AuthGroupFile /dev/null <Limit GET> require valid-user </Limit> |
# /usr/local/apache/bin/htpasswd -c .htpasswd sysdocu
New password : ********
Re-type new password : ********
위와 같이 아이디 sysdocu 와 그에 해당하는 패스워드를 설정했습니다. 이제 생성한 아이디, 패스워드 사용자만 update.php 파일에 접근이 가능합니다.
여기에 아이디, 패스워드를 추가 할때는 -c 옵션을 빼고 동일하게 명령을 수행하면 됩니다.
그리고 .htpasswd 파일의 위치를 잘 입력해주어야 합니다. 현재 디렉토리에서는 파일명만 적되, 다른 디렉토리에 위치한 상태에서 명령을 내릴 때는 절대경로, 또는 상대경로를 이용하여 위치를 정확히 입력합니다.
# /usr/local/apache/bin/htpasswd .htpasswd UserID
-c 옵션은 초기 사용자를 생성 할때만 사용됩니다. 여러개의 아이디를 만든 후 -c 옵션을 잘못 주었다면 기존의 아이디가 모두 사라져버리므로 주의를 해야 합니다. (주기적으로 인증 파일 백업 권장)
* 참고 : 이용자 삭제
# /usr/local/apache/bin/htpasswd -D .htpassd UserID
'리눅스 > DNS' 카테고리의 다른 글
[TIP] Docker 룰이 포함된 iptables 룰 저장 및 복구 (0) | 2022.12.22 |
---|---|
bind 9 설치 (Ubuntu 19.04) (0) | 2019.10.29 |
wireshark 로 DNS 쿼리 모니터링 하기 (0) | 2015.01.26 |
dnstop 설치 (DNS 쿼리량 순서로 모니터링) (0) | 2015.01.26 |
PDNS의 다양한 에러 로그 및 해결책 (0) | 2015.01.26 |