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 큐를 사용하는 것이 좋습니다.