Я запускаю локальный DNS-сервер на порту 5300 для разработки программного обеспечения. Мне нужна моя машина, чтобы использовать этот DNS, но я не смог указать /etc/resolv.conf проверять другой порт. Я немного искал в Google и не нашел решения.
Я установил 127.0.0.1 в качестве сервера имен в /etc/resolv.conf. Это весь мой /etc/resolv.conf:
nameserver 127.0.0.1
Подскажите, пожалуйста, как мне перенаправить исходящий трафик с порта 53 на другой порт?
Я пробовал следующее, но это не сработало:
iptables -t nat -A PREROUTING -p tcp --dport 53 -j DNAT --to 127.0.0.1:5300
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to 127.0.0.1:5300
Вот результат iptables -t nat -L -v -n
(с предложенными правилами):
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 redir ports 5300
0 0 REDIRECT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 redir ports 5300
Chain POSTROUTING (policy ACCEPT 302 packets, 19213 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 302 packets, 19213 bytes)
pkts bytes target prot opt in out source destination
После того, как Андрес указал, что мне нужны другие правила для локальных пакетов, немного погуглив, я нашел решение.
Локально сгенерированный пакет игнорирует цепочку PREROUTING таблицы nat при чтении цепочки OUTPUT. Следующими правилами я решил свою проблему:
iptables -t nat -A OUTPUT -p tcp --dport domain -j DNAT --to-destination 127.0.0.1:5300
iptables -t nat -A OUTPUT -p udp --dport domain -j DNAT --to-destination 127.0.0.1:5300
С этими правилами мне даже не нужно менять мой /etc/resolv.conf.
Попробуйте следующее:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 53 -j REDIRECT --to-port 5300