-
자작공유기 - 자기만의 DNS 서버 운영컴퓨터/공유기 2022. 6. 22. 00:16
자기만의 DNS 서버 운영법입니다.
물론 OPNsense 기반입니다.
여러가지 세팅을 거치고 나면 아래와 같이 PC가 내부 DNS 서버만 잡힌 상태에서 네이버 등 외부 사이트들을 모두 호출할 수 있게 됩니다.
내부 DNS 서버 뭐하러 복잡하게 설정하냐 하시겠지만 우선 한번 찾은 서버는 내부 DNS 서버가 정보를 캐싱하게 됩니다. 즉, 다음번 호출시에는 내가 직접 해당 서버의 IP를 치고 들어가는 것과 동일한 속도를 가질 수 있게 됩니다! 이것 하나만으로도 엄청난 메리트가 있다고 볼 수 있습니다.
DNS 서버는 내부 네트워크에 있지만 외부 통신도 모두 가능합니다. OPNsense는 Unbound DNS를 기본 DNS 서버로 밀고 있습니다. 초기에는 dnsmasq를 선택 했는데 19버전대에서 바뀌었습니다. 이것도 같이 활성화 되어 있긴 한데 기능이 썩 좋지는 않습니다. 가볍게 꺼 줍시다.
1. ISP 사업자의 DNS 서버를 받은 상태
아무것도 설정하지 않은 상태에서는 기본적으로 인터넷 서비스 제공자, ISP의 DNS를 제공 받아 쓰게 됩니다.
제가 지금 사용하고 있는 ISP는 KT라 저 서버들이 WAN 포트에 부여되어 있습니다. 2. 초보자가 할 수 있는 제일 간단한 DNS 서버 추가법
갑자기 KT의 DNS 서버 두대가 모두 죽을 수도 있으므로 System > Settings > General을 선택 합니다.
그 뒤 화면과 같이 구글 DNS 서버를 입력해 봅니다. 8.8.8.8과 4.4.4.4 두개 입니다. 저는 귀찮아서 캡쳐에서는 하나만 입력 했습니다.
하나만 추가해 봅니다. 그러면 다시 WAN 인터페이스의 요약 정보를 확인해 보도록 합시다.
뭐 나름 KT에서 찾지 못하는 서버들을 구글이 찾아줄 수는 있게끔 되었습니다. 하지만 이래서는 KT의 DNS 서버에 의존적일 수 밖에 없습니다.
내부 DNS 서버를 활성화할 분들은 이 단계는 재미로만 해보고 다시 원래대로 원복 하시기 바랍니다.
3. Unbound DNS 설정
Services > Unbound DNS > General을 선택한 후 Enable 항목을 체크해 주면 바로 실행이 됩니다.
그리고 내부 DNS 서버가 활성화가 되면 최우선으로 내부 서버를 사용하게 됩니다.
그리고 DNS Cache 항목은 체크 해서 설정 바꿀 때마다 캐시를 비워지게 하면 좋습니다.
여기까지 진행한 상태에서 네임서버 쿼리를 해보면 168.126.63.1로 날아가지 않습니다.
즉 ISP가 준 DNS 서버를 사용하지 않는 것이죠.
그 뒤 Query Forwarding을 클릭하여 구글 DNS 서버를 등록해 봅니다.
+ 버튼을 눌러 DNS 서버를 추가 합니다. 도메인 입력란은 비워두면 모든 네임서버 질의가 8.8.8.8 서버로 가게 됩니다. 즉, 기본이 공란입니다. 그 뒤 구글 캐나다 도메인인 www.google.ca의 IP를 네임서버에 질의해 봅니다.
그러면 보다시피 처음에는 내부 DNS 서버에 없으므로 구글 도메인 서버에서 찾고, 조금 기다렸다 다시 조회하면 이제는 내부 DNS 서버에서 바로 찾습니다. 주황색 박스가 최종적으로 조회한 DNS 서버 정보입니다.
그런데 보면 nslookup 명령이 둘다 내부 DNS 서버 주소를 선택했는데 어떻게 첫번째 쿼리는 8.8.8.8 서버로 날아갔을까요?
그건 바로 Query Forwarding 메뉴에서 자기 자신에게 없으면 질의를 8.8.8.8로 넘기라고 우리가 설정했기 때문입니다.
두번째부터는 외부 DNS 서버로 나가지 않습니다. 4. 좀 더 스마트 하게 - DNSSEC, DNS over TLS를 사용하여 네임 서버 질의 암호화 하기
여기까지만 해도 DNS를 빠르게 쓸 수 있습니다.
그러나 사실 일반 DNS는 해커의 공격에 매우 취약 합니다.
암호화가 안 되어 있기 때문입니다. 그래서 악의를 갖고 나의 IP를 알고 있는 해커가 모든 패킷을 자동으로 수집하여 어느 서버를 자주 가는지 알아낼 수 있습니다.
여기서부터는 정말 DNS 단에 도입되는 신기술들을 적용하는 단계이기 때문에 ISP 제공 DNS를 쓸 수 없습니다.
구글이나 클라우드플레어에서 제공하는 DNS 서버를 사용해야 합니다.
저는 클라우드플레어를 선택 했습니다. Free Plan으로도 엄청나게 다양한 보안 기능을 제공하기 때문입니다.
우선 Services > Unbound DNS > General 메뉴에서 DNSSEC 설정을 활성화 합니다.
DNSSEC 설정을 활성화 합니다. Services > Unbound DNS > Query Forwarding 메뉴에서 이전에 추가했던 내용들을 모두 삭제 합니다.
그리고 Services > Unbound DNS > DNS over TLS 메뉴를 클릭 합니다. 이 메뉴는 Query Forwarding과 하는 일이 정확히 똑같습니다. 다만 암호화를 지원하기 위해 메뉴가 분리되어 있는 것 뿐입니다.
그 뒤 + 버튼을 눌러 1.1.1.1과 1.0.0.1 두 개 서버를 등록해야 합니다. 두 서버 모두 포트는 853으로, CN 정보는 cloudflare-dns.com을 입력 합니다.
1.1.1.1과 1.0.0.1 두개를 입력해야 합니다. CN 정보는 다음의 사이트에서 알 수 있었습니다.
https://forum.opnsense.org/index.php?topic=24262.msg116829#msg116829
How to use setting under Unbound:"Verfiy if CN in certficate matches"
forum.opnsense.org
참고로 클라우드플레어는 용도별로 DNS 서버를 제공하고 있습니다. 물론 모두 DoT를 제공 합니다.
- 기본 : 1.1.1.1, CN=cloudflare-dns.com
- 멜웨어 차단 : 1.1.1.2, CN=security.cloudflare-dns.com
- 멜웨어 및 성인용 정보 차단 : 1.1.1.3, CN=family.cloudflare-dns.com
원래 DNS는 쌍으로 등록하고 IPv6 사용을 위해서는 아래 사이트에서 전체 정보를 제공하니 찾아서 입력하면 됩니다.
https://namu.wiki/w/Cloudflare?from=1.1.1.1#s-3.3
Cloudflare - 나무위키
클라우드플레어는 모든 플랜에서 웹 디도스 방어 서비스를 제공한다. 한국 기준으로 디도스 방어 서비스를 이용하려면 월 50만원은 기본으로 깨지는 것에 비해서 엄청나게 저렴한 가격으로 디
namu.wiki
각자 필요한 용도로 선택 하면 됩니다.
잘 적용되었는지 확인 하려면 아래의 사이트를 들어가면 됩니다.
https://cloudflare-dns.com/help
1.1.1.1 — The free app that makes your Internet faster.
Use the Internet fast-lane WARP+ subscriptions extend WARP by sending all of your Internet traffic over Cloudflare's optimized Internet routes which make thousands of websites 30% faster on average. WARP+ combines millions of Internet route measurements wi
1.1.1.1
저 설정을 마치고 Unbound DNS 서비스를 재시작 한 후 위 사이트에 들어간 결과 화면 입니다.
잘 설정이 되었습니다. 다음 사이트를 통해 DNSSEC 외에 Secure DNS, TLS1.3 적용 여부, Secure SNI 적용 여부 네 가지 항목을 체크할 수 있습니다.
https://www.cloudflare.com/ssl/encrypted-sni
Cloudflare Browser Check
Secure DNS Transport using DoH (DNS over HTTPS) or DoT (DNS over TLS) and SNI with ECH
www.cloudflare.com
저의 결과 화면입니다.
Secure SNI 기술을 제외한 모든 기능이 활성화 되어 있습니다. Secure SNI는 찾아보니 ESNI가 나왔는데 지원 브라우저도 파이어폭스 밖에 없었고 그나마 문제점이 발견되어 금새 사라졌다고 합니다. 지금은 ECH라는 것으로 바뀌는 중이라 아직 지원하는 브라우저는 없는 상황입니다. 당분간은 지켜보는 수 밖에는 없을 듯 합니다.
하지만 빠르게 지원하게 될 것으로 보입니다. 왜냐하면 이게 돈이 되거든요.
https도 그렇고 보안 프로토콜을 사용하기 위해 DNSSEC도 서버 인증서가 필요 합니다. 이 SSL 인증서가 기업용의 경우 어마어마한 금액을 자랑 합니다. DV > OV > EV 단계로 점점 가격이 쎄집니다. 에이 이거밖에 안해? 라고 생각하시는 분은 열심히 직장인 생활을 하시길 바랍니다. 서류 몇개 주고받고 인증서 주는 대가로는 엄청 비싼 겁니다. 보험 가입 되어 있고 보상비도 주니 당연 하다고 하시는 분, 순진한 겁니다. 그거 받아 봤자 뭐 합니까. 이미 회사 소스는 탈탈 털려서 문 닫아야 하는데. 게다가 예전에는 와일드 카드 인증서가 인기가 있었는데 이거는 한번 인증서를 털리면 해당 회사의 모든 서버가 다 털렸다라고 보시면 됩니다. 그래서 요새는 서비스 도메인 단위로 인증서를 발급 받기 때문에 많이 발급 받아야 합니다.
이렇다 보니 정작 개인들은 인증서를 유지할 수 없어 보안에서 멀어지게 되니 이걸 우려한 몇몇 비영리 단체에서 3개월 단기 무료 인증서 발급을 서비스 하고 있습니다. 그중 제일 유명한 게 Let's Encrypt 입니다. 아래 사이트 들어가 보면 제일 처음 나오는 후원 단체가 모질라입니다. 그렇습니다. 파이어폭스는 죽쑤고 있지만 그래도 인터넷 세상의 보안을 위해 피 같은 후원금을 다시 우리들에게 돌려주고 있습니다.
Let's Encrypt - 무료 SSL/TLS 인증서
letsencrypt.org
잡설이 길어졌네요. 저도 이거 공부 하느라 여기저기 들어가서 본 내용을 정리하다보니 이렇게 길어졌습니다. 너그러이 봐 주시면 감사 하겠습니다.
5. 고급 설정 - 특정 도메인을 특정 DNS 서버에 질의 하기
여기까지 하면 이제 여러분의 네트워크는 어느 정도 안전한 레벨에 올랐다고 할 수 있습니다.
다만 개발자라면 이 글을 보고 세팅 했을 때 AWS VPN을 연결해도 서버를 못 찾을 수가 있습니다.
안타깝게도 클라우드플레어 DNS에서 AWS 서버들을 찾을 수 없기 때문입니다.
그래서 구글링을 해보니 대부분이 최상위 DNS를 설정해라라는 글이 제일 많았습니다. 그러나 역시나 리눅스와 Bind라는 DNS 서버를 중심으로 설명한 "영어"글만 보였습니다. OPNsense도 Bind를 플러그인으로 제공하는데 설치하고 보니 웹 UI를 제공하고 있어 오히려 텍스트 설정 파일로 설명하는 글들의 내용을 적용해 볼 수가 없어 포기 했습니다.
근데 방법은 간단 했습니다.
우선 Unbound DNS를 끄고 DNS 캐시를 지우기 위해 자작 공유기와 작업할 컴퓨터를 재부팅 합니다.
그 뒤 AWS VPN을 연결한 상태에서 nslookup으로 아무 AWS 서버 주소를 칩니다.
그러면 210.220.163.82 라는 주소가 나오는데요. 이 서버가 AWS 서버들의 주소를 알고 있는 DNS입니다.
이걸 사용하면 됩니다. 검색해보니 SK쪽 서버네요. 난 KT에 돈을 주는데 AWS 주소도 모르네요... 에효...
여러분들은 다른 서버 주소가 나올 수도 있습니다. 참고만 해 주세요.
그럼 이렇게 얻은 주소를 Unbound DNS 서비스 메뉴 중 어디다 등록 하느냐.
Services > Unbound DNS > Override 라는 메뉴에서 아래와 같이 등록하면 끝입니다.
드디어 마지막 설정. 긴 여정이었습니다. 6. 결론
OPNsense를 처음 접하는 분들이 이 글을 보고 쉽게 DNS 설정을 하실 수 있었으면 좋겠습니다.
물론 제가 설정한 것이 정답은 아닙니다. 저는 스마트폰, 아이패드, PC, 노트북 등을 별도 DNS 세팅 없이 DHCP로 자동 부여 받고 인터넷을 바로바로 썼으면 좋겠다 싶어서 이렇게 했습니다.
여러 자료들을 찾아보고 트라이를 반복반복... 해서 그나마 여기까지 올 수 있었는데 정말 알아야 할 것도 많았고 시간도 많이 들었습니다. 어떻게 보면 인터넷 서비스를 하기 위해 가장 많이 쓰이는 서버가 DNS이기 때문에 그만큼 중요도도 높고 알아야 할 것도 많다라는 얘기겠죠.
제 생각에 앞으로 떼돈을 벌 사람은 바로 지금의 지저분한 경험으로 쌓아 올려진 컴퓨터 네트워크의 전체 구조를 깔끔하게 하나로 퉁칠 수 있는 프로토콜을 만드는 사람일 겁니다. IoT 세상이 오니 http, ftp 외 너무 많은 프로토콜들이 요즘에 와서 너무 폭발적으로 증가하는데다 그것들의 기반인 TCP 자체가 오버헤드가 너무 크다는 사실은 변하지 않기 때문에...