이수의 삽질 기록
article thumbnail

배경

[[Bind9] Private DNS 서버 + OpenVPN

배경 Y 교수님의 연구실에서 최근 내가 이런 저런 목적으로 VM을 너무 많이 만들었다. (전체 건물이 /24 서브넷인데, 그 중 28개 정도를 내가 먹었으니...) 또, 지난주에 OVS를 가지고 테스트 하다가,

blog.isu.kim](https://isuwiki.tistory.com/7)

지난 시간에는 Private DNS 서버를 구축하는 방법에 대해 살펴봤다. 이번에는 Public DNS 서버를 구축해서, 실제적으로 우리의 DNS 서버를 다른 사람들이 쿼리할 수 있게 하려고 한다. 우선 전제는 도메인을 이미 소유하고 있다는 전제로 시작한다. 도메인 구매 방법은 뭐 다양하니, 아무 곳에서나 구매하면 된다.

사실 이걸 알아보게 된 계기는 그냥 개인적으로 이전부터 마인크래프트를 좋아했는데, SRV 레코드 제공해주는 DNS 서버를 만들어서 서비스하려고 해서 그렇다. 알다시피 한 마인크래프트 호스트에서 서버를 여러개 호스팅 하는 경우, 포트로 구분을 지어야 하는데, 만일 25565번 포트가 아니면 귀찮게 포트를 치고 들어가야한다. 그래서 귀찮음을 방지하기 위해 SRV 레코드를 제공해주는 케이스가 많다. 이걸 서비스해보려고 한다.

준비물

다시 말하지만 준비물은 우선:

  • 등록된 도메인
  • Bind9 서버

이정도이다. 내 도메인은 gabia.com 에서 구매를 했으며, 여기서 구매한 이유는 딱히 없다. 사실 .kr 도메인 말고 다른 도메인들은 porkbun.com 이라는 곳에서 구매한다.

도메인 설정

가비아 또는 본인 도메인을 등록한 사이트에 들어가서 네임서버 설정을 바꿔준다. 가비아 기준: 홈 > 전체도메인 > 도메인 상세 페이지로 들어가면 된다. 들어가서 "네임서버" 설정을 눌러서 변경을 해준다. Godaddy, Porkbun, Whois 모두 다 네임서버 설정을 할 수 있게 해주니까, UI만 다르고 내용은 같다.

기존의 경우, 아마 가비아면 ns.gabia.com 이런 네임 서버가 기본으로 설정 되어있을텐데, 이걸 밀어버려야 한다. 그리고 우리가 호스팅 하는 네임 서버의 IP 또는 도메인을 적어줘야한다.

지금 현재 ns1.isu.kim 그리고 ns2.isu.kim은 모두 우리 네임 서버를 향해 등록되어있다. 따라서, 1차 그리고 2차를 모두 여기로 설정해준다.

가비아의 경우 이상하게 호스트명에 IP를 직접 입력하면 에러가 생겨서 등록되지 않는다. 그냥 A 레코드를 대충 만들고 진행하는게 정신 건강에는 좋을 것이다. (삽질 많이 해봄)

사실 이러면 끝이다. 네임 서버의 경우 기존 캐싱된게 루트에 저장되어있기에, 반영까지 시간이 조금 걸린다. 24~48시간이라고 했지만, 내 경우는 10분 이내로 끝났다.

Bind9 설정

앞서 말한 것 처럼, 캐싱 때문에 반영까지 시간이 조금 걸리니까 조금 어디서 쉬다가 오면 된다. 시간이 조금 지나고 나서, dig 또는 nslookup을 통해서 우리의 NS 서버의 zone 파일에서 호스팅 중인 A 레코드를 검색해보면 아마 정상적으로 동작할 것이다.

이렇게 non authoritative answer로 반환이 될 것이다. 왜냐면 이게 자체적으로 응답을 해서 그런 것 같다. *아닐수 있음*

아무튼 이러고 원래 우리의 도메인 foo.com 에 들어가면 접속이 안될 것이다! 왜냐면 이제 foo.com의 IP를 알려주는 서버는 없다! 기존의 도메인 판매자가 제공해주던 NS 서버를 사용하지 않기에 생기는 문제이다. 이를 해결하기 위해서는, 자체 DNS 서버에서 우리의 원래 foo.com에 대한 응답을 제공해줘야 한다. foo.com의 zone 파일에 다음의 내용을 추가해야한다.

@                               IN      A       123.123.123.123

이를 통해서 foo.com123.123.123.123을 반환할 것이다. 따라서 여기까지 해줘야한다.

SRV 레코드

그냥 보너스로 추가한다. 만약에 우리가 srv4.foo.com234.234.234.234의 25599번 포트를 알려주도록 하기 위해서는 총 2단계가 필요하다. 1) A 레코드 생성 2) A 레코드를 사용하는 SRV 레코드 생성. 예시는 다음과 같다:

srv5.foo.com.       IN      A       234.234.234.234
_minecraft._tcp.srv5.foo.com.   IN      SRV     0 0 25599 srv5.foo.com.

이제 이 zone 파일에 여러 내용을 추가해서 사용할 수 있게 된다. 

profile

이수의 삽질 기록

@IsuKim

두분의 주인님 밑에서 네트워크, 클라우드, 서버 삽질을 하는 학부생입니다