나는 해결책을 찾기 위해 웹을 둘러보았고 다양한 제안이 있는 수많은 스레드를 발견했습니다. 내가 찾은 것 중 대부분은 해결 프로그램에서 LUA를 사용하여 레코드를 반환하는 것이었습니다. 다른 게시물에서는 GEO-IP 또는 파이프 백엔드 사용을 제안합니다. 내가 읽은 모든 콘텐츠가 사용되었습니다.
LUA를 사용하여 영역 정보를 저장하는 대신 LUA를 통해 네트워크 범위에 따라 전달자를 변경하는 것이 가능한지 궁금합니다.
다음과 유사한 논리가 작동하도록 할 수 있다면 모든 준비가 완료되어야 합니다.
if sourceip comes from (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) {
forwarder = 192.168.0.1;
}else{
forwarder = 8.8.8.8;
}
PDNS 자체 내에서 설정 변경을 보여주는 LUA의 예는 pdns에서 볼 수 없으며 이것이 가능한지 궁금합니다.
답변1
PowerDNS Server나 Recursor는 BIND와 같은 분할-수평 설정을 지원하지 않습니다.
예를 들어 특정 서브넷에 대해 제공하려는 답변을 직접 제공하는 반복자에서 Lua 코드를 실행하여 이 문제를 해결할 수 있지만 이미 알고 있듯이 Lua에서 쿼리가 전달될 위치를 조작할 수는 없습니다.
PowerDNS 코드 제품군에 비교적 새로 추가된 것은 Lua에서 프로그래밍 가능한 DNS 로드 밸런서입니다. 이를 통해 DNS 프로토콜이 허용하는 거의 모든 것을 기반으로 다양한 네임서버에 쿼리를 보낼 수 있습니다. 보다http://dnsdist.org/그리고https://github.com/PowerDNS/pdns/blob/master/pdns/README-dnsdist.md. Split Horizon 예제는 재귀 쿼리와 비재귀 쿼리를 분할하지만 예를 들어 addPoolRule(netmask, pool) 함수를 통해 소스 주소에 따라 분할할 수도 있습니다.
그런데. Lua 사람들은 모두 대문자로 쓰는 것을 좋아하지 않습니다. 보다http://www.lua.org/about.html"이름이 뭐에요?" ;-)
답변2
이 답변은 @ZaphodB의 사용 제안을 지원합니다.dnsdist. 다음은 dnsdist.conf
대상 FQDN에 따라 Google의 DNS 서버 또는 로컬 네트워크의 DNS 서버로 트래픽을 전달하는 분할 지평선 설정을 수행하는 샘플 파일입니다 . 개체 dq
는DNS 질문; 루아 함수는 해당 객체의 모든 속성에 대해 테스트할 수 있습니다.
-- bind to port 53 (default) on local machine.
-- setLocal clears existing, addLocal appends to existing
setLocal("127.0.0.1")
addLocal("10.22.222.222")
-- set up dns server pools
newServer({address="8.8.8.8",name="google8888",pool="google"})
newServer({address="8.8.4.4",name="google8844",pool="google"})
newServer({address="10.22.222.1",name="localdns1",pool="local"})
newServer({address="10.22.222.2",name="localdns2",pool="local"})
-- define split horizon policy
function splitHorizon(servers, dq)
if (string.find(dq.qname:toString(),'example.com.?$')) then
print("local address")
return leastOutstanding.policy(getPoolServers("local"), dq)
else
print("other address")
return leastOutstanding.policy(getPoolServers("google"), dq)
end
end
-- apply split horizon policy
setServerPolicyLua("splitHorizon", splitHorizon)