로컬 서버의 소스 IP를 쿼리하기 위해 로컬 DNS를 제어하시겠습니까?

로컬 서버의 소스 IP를 쿼리하기 위해 로컬 DNS를 제어하시겠습니까?

내 Linux 라우터에서 로컬 DNS 서버가 실행되고 있습니다. 내 LAN(192.168.1.0/24)의 요청만 허용하도록 구성했습니다. 또한 서버가 자체적으로 DNS에 쿼리할 수 있기를 바랍니다. 이를 위해 127.0.0.1도 소스로 허용합니다.

문제는 상자가 자체적으로 수행하는 모든 쿼리에 소스 IP가 내 외부 IP로 설정되어 있다는 것입니다. tcpdump서버가 127.0.0.1에서 자체적으로 쿼리할 때 패킷은 대상 IP 127.0.0.1의 인터페이스에 도착 하지만 lo소스 IP는 내 ISP의 IP입니다.

사용해 dig -b도 도움이 되지 않습니다. 똑같은 효과가 발생합니다.

즉, 허용된 IP에 ISP의 IP를 명시적으로 추가하지 않으면 DNS 조회가 로컬에서 작동하지 않습니다. 내 IP는 동적일 수 있으므로 이는 본질적으로 전체 IP 범위를 DNS 서버에 추가하는 것을 의미합니다. 소스 IP가 올바르게 설정되어 있으므로 내 LAN의 컴퓨터에서는 문제가 되지 않는 것 같습니다. 문제는 서버 자체에 대한 로컬 쿼리와 관련이 있습니다.

나는 서버가 명시적인 소스 IP 주소(반드시 소스 인터페이스일 필요는 없음)를 사용하여 자체적으로 쿼리하도록 지시할 수 있기를 원합니다. 이것이 가능합니까?

답변1

서버의 메인 인터페이스 이외의 소스 쿼리를 설정하려면 query-sourcein BIND 옵션을 사용하세요.

서버/데몬에 의해 시작된 쿼리만 해당 IP를 사용하여 실행되도록 설정되어 있습니다.

조심하세요내부/RFC 1918 개인 주소인 경우, 밖에 나갈 때 NAT를 해야 합니다.

내 서버에 따르면 다음 위치에 있습니다 /etc/bind/named.conf.options.

options {
    query-source address X.X.X.X;
}

XXXX는 귀하의 IP 주소입니다.

또 다른 옵션은 IP 주소가 등록되고 DNS 이름을 기반으로 규칙이 적용되는 동적 DNS 서비스를 사용하는 것입니다. 물론, IP 주소가 변경될 때마다 규칙을 다시 적용하기 위해 스크립트를 DHCP 후크로 배치해야 하는 사소한 불편함이 있습니다.

답변2

@roaima의 의견은 나를 올바른 방향으로 이끌었습니다.

내 iptables POSTROUTING 규칙은 다음과 같습니다.

-t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to <my public IP>

라우터의 자체 IP를 제외하기 위해 위의 규칙을 추가하면 모든 문제가 해결됩니다.

-t nat -I POSTROUTING 1 -s 192.168.1.1 -j ACCEPT

@roaima, 답변으로 게시하고 싶으시다면 공감을 눌러드리겠습니다.

관련 정보