diff -aur openvpn-2.3.2/src/openvpn/init.c src/src/openvpn/init.c
--- openvpn-2.3.2/src/openvpn/init.c	2013-05-31 14:00:25.000000000 +0200
+++ src/src/openvpn/init.c	2014-02-21 19:11:33.623032976 +0100
@@ -1273,6 +1273,10 @@
     {
       in_addr_t tun_local = 0;
       in_addr_t tun_remote = 0; /* FKS */
+      in_addr_t dns_ip[2] = { 0 };
+      int dns_count;
+      struct env_item *ei;
+
       const char *detail = "SUCCESS";
       if (c->c1.tuntap)
 	tun_local = c->c1.tuntap->local;
@@ -1284,11 +1288,62 @@
       tun_remote = htonl (c->c1.link_socket_addr.actual.dest.addr.in4.sin_addr.s_addr);
       if (flags & ISC_ERRORS)
 	detail = "ERROR";
-      management_set_state (management,
-			    OPENVPN_STATE_CONNECTED,
-			    detail,
-			    tun_local,
-			    tun_remote);
+
+      dns_count = 0;
+      ei = NULL;
+      if (c->c2.es)
+	      ei = c->c2.es->list;
+
+      while (ei) {
+	      const char *p;
+	      char buf[64];
+	      int ret;
+
+	      ret = snprintf(buf, sizeof (buf), "foreign_option_");
+
+	      p = ei->string;
+	      ei = ei->next;
+
+	      if (strncmp(p, buf, ret))
+		      continue;
+	      p += ret;
+
+	      while (*p && *p != '=')
+		      p++;
+
+	      if (!*p)
+		      continue;
+	      p++;
+
+	      if (strncmp(p, "dhcp-option ", 12))
+		      continue;
+
+	      p += 12;
+	      while (*p && *p == ' ')
+		      p++;
+
+	      if (strncmp(p, "DNS ", 4))
+		      continue;
+
+	      p += 4;
+	      while (*p && *p == ' ')
+		      p++;
+
+	      if (inet_aton(p, &dns_ip[dns_count]) == 0)
+		      continue;
+
+	      dns_count++;
+	      if (dns_count == 2)
+		      break;
+      }
+      management_set_state_full (management,
+				 OPENVPN_STATE_CONNECTED,
+				 detail,
+				 tun_local,
+				 tun_remote,
+				 ntohl(dns_ip[0]),
+				 ntohl(dns_ip[1]),
+				 TUN_MTU_SIZE (&c->c2.frame));
       if (tun_local)
 	management_post_tunnel_open (management, tun_local);
     }
@@ -3347,6 +3402,16 @@
   else if (c->mode == CM_CHILD_TCP)
     do_event_set_init (c, false);
 
+
+#ifdef ENABLE_MANAGEMENT
+  if (management)
+	  management_set_state (management,
+				OPENVPN_STATE_WILL_CONNECT,
+				c->options.ce.remote,
+				(in_addr_t)0,
+				(in_addr_t)0);
+#endif
+
   /* initialize HTTP or SOCKS proxy object at scope level 2 */
   init_proxy (c, 2);
 
diff -aur openvpn-2.3.2/src/openvpn/manage.c src/src/openvpn/manage.c
--- openvpn-2.3.2/src/openvpn/manage.c	2013-05-31 14:00:25.000000000 +0200
+++ src/src/openvpn/manage.c	2014-02-21 18:37:58.624495609 +0100
@@ -154,6 +154,8 @@
       return "RESOLVE";
     case OPENVPN_STATE_TCP_CONNECT:
       return "TCP_CONNECT";
+    case OPENVPN_STATE_WILL_CONNECT:
+      return "WILL_CONNECT";
     default:
       return "?";
     }
@@ -2229,11 +2231,14 @@
 }
 
 void
-management_set_state (struct management *man,
+management_set_state_full (struct management *man,
 		      const int state,
 		      const char *detail,
 		      const in_addr_t tun_local_ip,
-		      const in_addr_t tun_remote_ip)
+                      const in_addr_t tun_remote_ip,
+		      const in_addr_t tun_dns1_ip,
+                      const in_addr_t tun_dns2_ip,
+                      unsigned int tun_mtu)
 {
   if (man->persist.state && (!(man->settings.flags & MF_SERVER) || state < OPENVPN_STATE_CLIENT_BASE))
     {
@@ -2248,7 +2253,10 @@
       e.string = detail;
       e.local_ip = tun_local_ip;
       e.remote_ip = tun_remote_ip;
-      
+      e.dns1_ip = tun_dns1_ip;
+      e.dns2_ip = tun_dns2_ip;
+      e.tun_mtu = tun_mtu;
+
       log_history_add (man->persist.state, &e);
 
       if (man->connection.state_realtime)
@@ -2267,6 +2275,18 @@
     }
 }
 
+void
+management_set_state (struct management *man,
+		      const int state,
+		      const char *detail,
+		      const in_addr_t tun_local_ip,
+		      const in_addr_t tun_remote_ip)
+{
+	return management_set_state_full(man, state, detail,
+					 tun_local_ip, tun_remote_ip,
+					 0, 0, 0);
+}
+
 static bool
 env_filter_match (const char *env_str, const int env_filter_level)
 {
@@ -3219,6 +3239,12 @@
     buf_printf (&out, ",%s", print_in_addr_t (e->local_ip, IA_EMPTY_IF_UNDEF, gc));
   if (flags & LOG_PRINT_REMOTE_IP)
     buf_printf (&out, ",%s", print_in_addr_t (e->remote_ip, IA_EMPTY_IF_UNDEF, gc));
+  if (flags & LOG_PRINT_REMOTE_IP)
+    buf_printf (&out, ",%s", print_in_addr_t (e->dns1_ip, IA_EMPTY_IF_UNDEF, gc));
+  if (flags & LOG_PRINT_REMOTE_IP)
+    buf_printf (&out, ",%s", print_in_addr_t (e->dns2_ip, IA_EMPTY_IF_UNDEF, gc));
+  if (flags & LOG_PRINT_REMOTE_IP)
+    buf_printf (&out, ",%d", e->tun_mtu);
   if (flags & LOG_ECHO_TO_LOG)
     msg (D_MANAGEMENT, "MANAGEMENT: %s", BSTR (&out));
   if (flags & LOG_PRINT_CRLF)
diff -aur openvpn-2.3.2/src/openvpn/manage.h src/src/openvpn/manage.h
--- openvpn-2.3.2/src/openvpn/manage.h	2013-05-31 14:00:25.000000000 +0200
+++ src/src/openvpn/manage.h	2014-02-21 18:19:25.434288127 +0100
@@ -89,6 +89,9 @@
   const char *string;
   in_addr_t local_ip;
   in_addr_t remote_ip;
+  in_addr_t dns1_ip;
+  in_addr_t dns2_ip;
+  unsigned int tun_mtu;
   union log_entry_union u;
 };
 
@@ -472,12 +475,23 @@
 
 #define OPENVPN_STATE_CLIENT_BASE   7  /* Base index of client-only states */
 
+#define OPENVPN_STATE_WILL_CONNECT  12 /* call after choosing remote */
+
 void management_set_state (struct management *man,
 			   const int state,
 			   const char *detail,
 			   const in_addr_t tun_local_ip,
 			   const in_addr_t tun_remote_ip);
 
+void management_set_state_full (struct management *man,
+				const int state,
+				const char *detail,
+				const in_addr_t tun_local_ip,
+				const in_addr_t tun_remote_ip,
+				const in_addr_t tun_dns1_ip,
+				const in_addr_t tun_dns2_ip,
+				unsigned int tun_mtu);
+
 /*
  * The management object keeps track of OpenVPN --echo
  * parameters.
