#!/bin/sh # $Id: nat-dns,v 1.2 2006/11/09 16:01:18 friedman Exp $ chain=${NAT_DNS_CHAIN-OUTPUT} dst=${NAT_DNS_DST-192.168.1.2} ipt() { iptables -t nat ${1+"$@"} } rule() { case $1 in ruleno ) re='^\([^ ]*\) .*' ;; server ) re='.* udp dpt:53 to:\(.*\)' ;; esac iptables -t nat -L $chain -n --line-numbers \ | sed -n -e 's/[ ][ ]*/ /g' \ -e "/ DNAT .* udp dpt:53 to:/s/$re/\1/p" } flush() { for n in `rule ruleno | tac`; do ipt -D $chain $n done } main() { case ${UID-`id -u`} in 0 ) : ;; * ) exec sudo "$0" ${1+"$@"} ;; esac case $1 in - ) flush ;; '' ) rule server ;; * ) flush ipt -I $chain -p udp -d $dst --dport 53 -j DNAT --to-destination $1 ;; esac } main ${1+"$@"} # eof