모든 아웃바운드 UDP DNS 요청을 localhost DNS 서버로 리디렉션

모든 아웃바운드 UDP DNS 요청을 localhost DNS 서버로 리디렉션

LAN의 모든 아웃바운드 DNS 요청을 localhost에서 실행되는 터널로 리디렉션하고 127.0.0.1:5353에서 UDP를 수신하려고 합니다.

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 127.0.0.1:5353

테스트해 보세요

nc -u -l -p 5353

그리고

nc -u 127.0.0.1 53

괜찮고 UDP 세션이 작동하지만 다음 명령을 사용하려고 하면:

nc -u 8.8.8.8 53

nc리스너는 트래픽을 수신할 수 있지만 다음과 같이 응답하지 않습니다.

보내기 2, 받기 2: 연결이 거부되었습니다.

하지만

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 192.168.1.108:5353

정상적으로 작동하며 동일한 Wi-Fi 네트워크에서 실행되는 장치는 성공적으로 응답을 받을 수 있습니다.

편집하다:TCP를 사용하는 DNS 쿼리는 별도로 관리되므로 고려할 필요가 없습니다.

답변1

DNS UDP 기반 요청을 리디렉션하려면 DNS 데몬/프록시가 포트 5353/UDP에서 수신 대기하는 경우 다음을 수행해야 합니다.

iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1:5353

루프가 필요하지 않으므로 소스는 내부 네트워크 블록/네트워크여야 합니다(즉, 여전히 외부에 DNS 요청을 해야 할 수 있음).

멀티홈 컴퓨터에서 내부 네트워크를 라우팅하는 경우 소스 네트워크 없이도 이 인터페이스를 적용할 수 있습니다.

iptables -i eth0 -t nat -A PREROUTING  -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1:5353

포트 53에서도 이 작업을 수행할 수 있습니다. 다음과 같이 대상을 블랙리스트에 추가하면 됩니다.

iptables -t nat -A PREROUTING  ! -d 127.0.0.1/32 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1:53

OUTPUT 큐는 로컬 테스트에서 작동할 수 있지만 원격 컴퓨터 및 현재 구성의 경우 PREROUTING 큐를 사용하는 것이 좋습니다.

관련 정보