Index: /trunk/src/VBox/Main/include/NATNetworkImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/NATNetworkImpl.h	(revision 76131)
+++ /trunk/src/VBox/Main/include/NATNetworkImpl.h	(revision 76132)
@@ -117,4 +117,6 @@
     void i_getPortForwardRulesFromMap(std::vector<Utf8Str> &aPortForwardRules, settings::NATRulesMap &aRules);
 
+    void i_updateDnsOptions();
+
     struct Data;
     Data *m;
Index: /trunk/src/VBox/Main/src-server/DHCPServerImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/DHCPServerImpl.cpp	(revision 76131)
+++ /trunk/src/VBox/Main/src-server/DHCPServerImpl.cpp	(revision 76132)
@@ -467,5 +467,4 @@
     if (aOption == DhcpOpt_Router)
     {
-        m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNeedMain, "on");
         m->router = true;
     }
@@ -788,4 +787,8 @@
     m->dhcp.setOption(DHCPServerRunner::kDsrKeyConfig, m->tempConfigFileName);
 #else /* !VBOX_WITH_DHCPD */
+    /* Main is needed for NATNetwork */
+    if (m->router)
+        m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNeedMain, "on");
+
     /* Commmon Network Settings */
     m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNetwork, aNetworkName.c_str());
Index: /trunk/src/VBox/Main/src-server/NATNetworkImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/NATNetworkImpl.cpp	(revision 76131)
+++ /trunk/src/VBox/Main/src-server/NATNetworkImpl.cpp	(revision 76132)
@@ -643,4 +643,86 @@
 
 
+void NATNetwork::i_updateDnsOptions()
+{
+    RTNETADDRIPV4 networkid, netmask;
+
+    int rc = RTCidrStrToIPv4(m->s.strIPv4NetworkCidr.c_str(), &networkid, &netmask);
+    if (RT_FAILURE(rc))
+        return;
+
+    ComPtr<IHost> host;
+    if (SUCCEEDED(m->pVirtualBox->COMGETTER(Host)(host.asOutParam())))
+    {
+        com::Bstr domain;
+        if (SUCCEEDED(host->COMGETTER(DomainName)(domain.asOutParam())))
+        {
+            if (domain.isNotEmpty())
+                m->dhcpServer->AddGlobalOption(DhcpOpt_DomainName, domain.raw());
+        }
+        RTCList<RTCString> lstServers;
+        com::SafeArray<BSTR> nameServers;
+        if (SUCCEEDED(host->COMGETTER(NameServers)(ComSafeArrayAsOutParam(nameServers))))
+        {
+            size_t cAddresses = nameServers.size();
+            if (cAddresses)
+            {
+                /* The following code was copied (and adapted a bit) from VBoxNetDhcp::hostDnsServers */
+                /*
+                * Recent fashion is to run dnsmasq on 127.0.1.1 which we
+                * currently can't map.  If that's the only nameserver we've got,
+                * we need to use DNS proxy for VMs to reach it.
+                */
+                bool fUnmappedLoopback = false;
+
+                for (size_t i = 0; i < nameServers.size(); ++i)
+                {
+                    RTNETADDRIPV4 addr;
+
+                    com::Utf8Str strNameServerAddress(nameServers[i]);
+                    rc = RTNetStrToIPv4Addr(strNameServerAddress.c_str(), &addr);
+                    if (RT_FAILURE(rc))
+                        continue;
+
+                    if (addr.u == INADDR_ANY)
+                    {
+                        /*
+                        * This doesn't seem to be very well documented except for
+                        * RTFS of res_init.c, but INADDR_ANY is a valid value for
+                        * for "nameserver".
+                        */
+                        addr.u = RT_H2N_U32_C(INADDR_LOOPBACK);
+                    }
+
+                    if (addr.au8[0] == 127)
+                    {
+                        settings::NATLoopbackOffsetList::const_iterator it;
+                        for (it = m->s.llHostLoopbackOffsetList.begin();
+                             it != m->s.llHostLoopbackOffsetList.end(); ++it)
+                        {
+                            if (it->strLoopbackHostAddress == strNameServerAddress)
+                            {
+                                addr.u = RT_H2N_U32(RT_N2H_U32(networkid.u) + it->u32Offset);
+                                break;
+                            }
+                        }
+                        if (it == m->s.llHostLoopbackOffsetList.end())
+                        {
+                            fUnmappedLoopback = true;
+                            continue;
+                        }
+                    }
+                    lstServers.append(RTCStringFmt("%RTnaipv4", addr));
+                }
+
+                if (lstServers.isEmpty() && fUnmappedLoopback)
+                    lstServers.append(RTCStringFmt("%RTnaipv4", networkid.u | RT_H2N_U32_C(1U))); /* proxy */
+
+                m->dhcpServer->AddGlobalOption(DhcpOpt_DomainNameServer, Bstr(RTCString::join(lstServers, " ")).raw());
+            }
+        }
+    }
+}
+
+
 HRESULT  NATNetwork::start(const com::Utf8Str &aTrunkType)
 {
@@ -714,5 +796,8 @@
         }
 
-        /* XXX: AddGlobalOption(DhcpOpt_Router,) - enables attachement of DhcpServer to Main. */
+#ifdef VBOX_WITH_DHCPD
+        i_updateDnsOptions();
+#endif /* VBOX_WITH_DHCPD */
+        /* XXX: AddGlobalOption(DhcpOpt_Router,) - enables attachement of DhcpServer to Main (no longer true with VBoxNetDhcpd). */
         m->dhcpServer->AddGlobalOption(DhcpOpt_Router, Bstr(m->IPv4Gateway).raw());
 
