![소스 IP 또는 MAC를 기반으로 다양한 DNS 전달자를 사용하는 방법은 무엇입니까?](https://linux55.com/image/103999/%EC%86%8C%EC%8A%A4%20IP%20%EB%98%90%EB%8A%94%20MAC%EB%A5%BC%20%EA%B8%B0%EB%B0%98%EC%9C%BC%EB%A1%9C%20%EB%8B%A4%EC%96%91%ED%95%9C%20DNS%20%EC%A0%84%EB%8B%AC%EC%9E%90%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
요청 호스트의 소스 IP 및/또는 MAC를 기반으로 DNS 쿼리를 다른 업스트림 전달자에 전달하도록 Linux 시스템에서 BIND를 구성하려면 어떻게 해야 합니까?
예를 들어, 네트워크의 일부 호스트에서 OpenDNS로, 다른 호스트에서는 Google로, 다른 모든 호스트에서는 ISP로 DNS 쿼리를 보내고 싶을 수 있습니다.
답변1
해결책은 "뷰"를 바인딩하는 것입니다. 소스 또는 대상 IP를 기준으로 필터링하고 요청을 보기로 라우팅할 수 있습니다. 완전히 다른 DNS 영역, 전달자 및 기타 처리 옵션을 제공할 수 있습니다.
https://kb.isc.org/article/AA-00851/0/Understanding-views-in-BIND-9-by-example.html
답변2
나는 동일한 사용 사례를 가지고 있으며 다음과 같이 수행합니다(약간 복잡하지만 잘 작동합니다).
- 라우터는 DoT 클라이언트를 통해 TLS를 통해 DNS를 실행하여 nextdns.io로 전달합니다. 나는 이 서비스를 통해 광고 및 기타 항목을 차단합니다.
- 내부 Linux 시스템에는 동일한 시스템의 서로 다른 내부 IP에 바인딩된 2개의 dnsmasq 컨테이너가 있습니다. 그들은 쿼리를 라우터로 전달하고 TLS를 통해 인터넷으로 전달합니다.
- 1개의 dnsmasq는 성인 DNS + DHCP를 수행하고, 두 번째는 어린이 DNS만 수행합니다. 첫 번째는 요청 클라이언트의 MAC 주소를 기반으로 DHCP 응답에 다른 DNS 옵션을 설정합니다. 저는 특별히 두 번째 제한된 dnsmasq 컨테이너의 DNS를 가져오도록 어린이 장치를 구성했고, 성인은 다른 것을 가져오도록 구성했습니다.
- 두 번째 dnsmasq 컨테이너는 제한된 어린이 친화적인 도메인 집합만 제공하고 나머지 도메인에 대해서는 0.0.0.0을 반환합니다.
그런데, 하드코딩된 8.8.8.8 또는 이와 유사한 불량 클라이언트를 처리하기 위해 라우터를 통과하는 모든 요청이 TLS를 통과하도록 강제로 일부 IP 테이블도 설정했습니다.