diff --git a/package/openwrt/files/etc/init.d/smartdns b/package/openwrt/files/etc/init.d/smartdns index cc54b1a..7474d8e 100644 --- a/package/openwrt/files/etc/init.d/smartdns +++ b/package/openwrt/files/etc/init.d/smartdns @@ -46,9 +46,14 @@ stop_forward_dnsmasq() set_iptable() { local ipv6_server=$1 + local tcp_server=$2 + IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`" for IP in $IPS do + if [ "$tcp_server" == "1" ]; then + iptables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT >/dev/null 2>&1 + fi iptables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT >/dev/null 2>&1 done @@ -59,6 +64,9 @@ set_iptable() IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`" for IP in $IPS do + if [ "$tcp_server" == "1" ]; then + ip6tables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT >/dev/null 2>&1 + fi ip6tables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT >/dev/null 2>&1 done @@ -72,6 +80,7 @@ clear_iptable() for IP in $IPS do iptables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1 + iptables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1 done if [ "$ipv6_server" == 0 ]; then @@ -82,6 +91,7 @@ clear_iptable() for IP in $IPS do ip6tables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1 + ip6tables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1 done } @@ -203,7 +213,7 @@ start_service() { fi if [ "$redirect" = "redirect" ]; then - set_iptable $ipv6_server + set_iptable $ipv6_server $tcp_server elif [ "$redirect" = "dnsmasq-upstream" ]; then set_forward_dnsmasq "$SMARTDNS_PORT" fi diff --git a/package/optware/S50smartdns b/package/optware/S50smartdns index 6d29e5e..ad4522a 100644 --- a/package/optware/S50smartdns +++ b/package/optware/S50smartdns @@ -7,10 +7,22 @@ SMARTDNS_PORT=535 set_iptable() { + local redirect_tcp + + redirect_tcp=0; + + grep ^bind-tcp $SMARTDNS_CONF > /dev/null 2>&1 + if [ $? -eq 0 ]; then + redirect_tcp=1; + fi + IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F: '{print $2}'`" for IP in $IPS do - iptables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT + if [ $redirect_tcp -eq 1 ]; then + iptables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT > /dev/null 2>&1 + fi + iptables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT > /dev/null 2>&1 done } @@ -20,7 +32,8 @@ clear_iptable() IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F: '{print $2}'`" for IP in $IPS do - iptables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT + iptables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT > /dev/null 2>&1 + iptables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $SMARTDNS_PORT > /dev/null 2>&1 done }