Index: /trunk/src/VBox/Devices/Network/slirp/slirp.c
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/slirp.c	(revision 17301)
+++ /trunk/src/VBox/Devices/Network/slirp/slirp.c	(revision 17302)
@@ -587,4 +587,7 @@
 #endif
         fNATfailed = 1;
+#ifdef VBOX_WITH_SLIRP_DNS_PROXY
+    dnsproxy_init(pData);
+#endif
 
     getouraddr(pData);
Index: /trunk/src/VBox/Devices/Network/slirp/slirp.h
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/slirp.h	(revision 17301)
+++ /trunk/src/VBox/Devices/Network/slirp/slirp.h	(revision 17302)
@@ -272,4 +272,8 @@
 #endif
 
+#ifdef VBOX_WITH_SLIRP_DNS_PROXY
+# include "dnsproxy/dnsproxy.h"
+#endif
+
 #define DEFAULT_BAUD 115200
 
Index: /trunk/src/VBox/Devices/Network/slirp/socket.c
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/socket.c	(revision 17301)
+++ /trunk/src/VBox/Devices/Network/slirp/socket.c	(revision 17302)
@@ -561,4 +561,5 @@
              * out much quicker (10 seconds  for now...)
              */
+#ifndef VBOX_WITH_SLIRP_DNS_PROXY
             if (so->so_expire)
             {
@@ -568,4 +569,16 @@
                     so->so_expire = curtime + SO_EXPIRE;
             }
+#else
+            if (so->so_expire)
+            {
+                if (so->so_fport != htons(53))
+                    so->so_expire = curtime + SO_EXPIRE;
+            }
+            /* 
+             *  last argument should be changed if Slirp will inject IP attributes
+             *  Note: Here we can't check if dnsproxy's sent initial request
+             */
+            dnsproxy_answer(pData, so, m, sizeof(struct ip));  
+#endif
 
 #if 0
Index: /trunk/src/VBox/Devices/Network/slirp/udp.c
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/udp.c	(revision 17301)
+++ /trunk/src/VBox/Devices/Network/slirp/udp.c	(revision 17302)
@@ -228,4 +228,13 @@
     so->so_faddr = ip->ip_dst;   /* XXX */
     so->so_fport = uh->uh_dport; /* XXX */
+
+#ifdef VBOX_WITH_SLIRP_DNS_PROXY
+    if (   (ip->ip_dst.s_addr == htonl(ntohl(special_addr.s_addr) | CTL_DNS))
+        && (ntohs(uh->uh_dport) == 53)) 
+    {
+        dnsproxy_query(pData, so, m, iphlen);
+        goto bad; /* it isn't bad, probably better to add additional label done for boot/tftf :)  */
+    }
+#endif
 
     iphlen += sizeof(struct udphdr);
