Хорошо, объясню.
Рассмотрим стандарную ситуацию, когда DNS-сервер находится у провайдера. Тогда:
а. Необходимо разрешить пакеты до провайдера на udp-порт 53. Эти пакеты будут проходить через цепочку OUTPUT и значение порта 53 будет выступать в качестве destination. Иначе говоря правило будет выглядеть так (конечно в минималистическом виде)
iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
b. когда DNS -сервер будет отвечать, то необходимо пропустить ответные пакеты обратно. Это уже будет цепочка INPUT и udp-порт 53 будет уже выступать в качестве source-порт. А значит правило будет выглядеть так:
iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT
Теперь рассмотрим ситуацию, когда хост сам является DNS-сервер. тогда
а. он должен принимать udp-пакеты на 53 порт. Т.е. в цепочке INPUT нужно разрешить пакеты с source-порт 53 и правило будет выглядеть так
iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
b. также он должен и ответить, а значит в цепочке OUTPUT разрешить пакеты с source-порт 53. Т.е. правило будет уже выглядеть
iptables -A OUTPUT -p udp -m udp --sport 53 -j ACCEPT
Как-то так....