diff --git a/re6st/ovpn-client.c b/re6st/ovpn-client.c
new file mode 100755
index 0000000000000000000000000000000000000000..0187e3659ea0f4de735ad1a66c6a499d37b972b4
--- /dev/null
+++ b/re6st/ovpn-client.c
@@ -0,0 +1,52 @@
+#include <stdio.h>
+
+int main(int argc, char *argv[])
+{
+  char *p;
+  int pd;
+  char buf[512];
+  int n;
+  char *s, *s1, *s2;
+
+  s = (char*)getenv("script_type");
+  if (s == NULL) {
+    fprintf(stderr, "no script_type\n");
+    return 1;
+  }
+ 
+  if (strcmp(s, "up") == 0)
+    return 0;
+
+  if (argc < 2) {
+    fprintf(stderr, "missing pipe\n");
+    return 1;
+  }
+
+  pd = strtol(argv[1], &p, 10);
+  if (! (*p == 0)) {
+    fprintf(stderr, "invalid pipe %s\n", argv[1]);
+    return 1;
+  }
+
+  /* %(script_type)s %(common_name)s %(OPENVPN_external_ip)s */
+  s1 = (char*)getenv("common_name");
+  s2 = (char*)getenv("OPENVPN_external_ip");
+
+  if ( (s1 == NULL) || (s2 == NULL)) {
+    fprintf(stderr, "missing common_name and OPENVPN_external_ip\n");
+    return 1;
+  }
+
+  n = snprintf(buf, 512, "%s %s %s\n", s, s1, s2);
+  if (n >= 512) {
+    fprintf(stderr, "buffer overflow\n");
+    return 1;
+  }
+
+  if (write(pd, buf, n) == -1) {
+    fprintf(stderr, "write pipe failed\n");
+    return 1;
+  }
+
+  return 0;
+}
diff --git a/re6st/ovpn-server.c b/re6st/ovpn-server.c
new file mode 100755
index 0000000000000000000000000000000000000000..0f22c0ae72ba3564d9a6e5bfc509c9ef9472c519
--- /dev/null
+++ b/re6st/ovpn-server.c
@@ -0,0 +1,95 @@
+#include <stdio.h>
+/*
+if os.environ['script_type'] == 'client-connect':
+    # Send client its external ip address
+    with open(sys.argv[2], 'w') as f:
+        f.write('push "setenv-safe external_ip %s"\n'
+                % os.environ['trusted_ip'])
+
+# Write into pipe connect/disconnect events
+arg1 = sys.argv[1]
+if arg1 != 'None':
+    os.write(int(arg1), '%(script_type)s %(common_name)s %(trusted_ip)s\n'
+                        % os.environ)
+*/
+int main(int argc, char *argv[])
+{
+  char *p;
+  int pd;
+  char buf[512];
+  int n;
+  char *s, *s1, *s2;
+  int fd;
+
+  s = (char*)getenv("script_type");
+  if (s == NULL) {
+    fprintf(stderr, "no script_type\n");
+    return 1;
+  }
+
+  s2 = (char*)getenv("trusted_ip");
+  if (s2 == NULL) {
+    fprintf(stderr, "no trusted_ip\n");
+    return 1;
+  }
+ 
+  if (strcmp(s, "client-connect") == 0) {
+    if (argc < 3) {
+      fprintf(stderr, "missing filename\n");
+      return 1;
+    }    
+    n = snprintf(buf, 512, "push \"setenv-safe external_ip %s\"\n", s2);
+    if (n >= 512) {
+      fprintf(stderr, "buffer overflow\n");
+      return 1;
+    }
+
+    /* O_WRONLY == 1 */
+    fd = open(argv[2], 1);
+    if (fd == -1) {
+      fprintf(stderr, "open %s failed\n", argv[2]);
+      return 1;    
+    }
+
+    if (write(fd, buf, n) == -1) {
+      fprintf(stderr, "write %s failed\n", argv[2]);
+      close(fd);
+      return 1;
+    }
+    close(fd);
+  }
+
+  if (argc < 2) {
+    fprintf(stderr, "missing pipe\n");
+    return 1;
+  }
+
+  if (strcmp(argv[1], "None") == 0)
+    return 0;
+
+  pd = strtol(argv[1], &p, 10);
+  if (! (*p == 0)) {
+    fprintf(stderr, "invalid pipe %s\n", argv[1]);
+    return 1;
+  }
+
+  /* %(script_type)s %(common_name)s %(OPENVPN_external_ip)s */
+  s1 = (char*)getenv("common_name");
+  if (s1 == NULL) {
+    fprintf(stderr, "missing common_name\n");
+    return 1;
+  }
+
+  n = snprintf(buf, 512, "%s %s %s\n", s, s1, s2);
+  if (n >= 512) {
+    fprintf(stderr, "buffer overflow\n");
+    return 1;
+  }
+
+  if (write(pd, buf, n) == -1) {
+    fprintf(stderr, "write pipe failed\n");
+    return 1;
+  }
+
+  return 0;
+}
diff --git a/re6st/plib.py b/re6st/plib.py
index 47454fd227074dd1674409ad0f984f8e7fb8087e..c223e8423d4ff2cb4407e695d89284f4e74dca2a 100644
--- a/re6st/plib.py
+++ b/re6st/plib.py
@@ -2,8 +2,9 @@ import logging, errno, os, sys
 from . import utils
 
 here = os.path.realpath(os.path.dirname(__file__))
-ovpn_server = os.path.join(here, 'ovpn-server')
-ovpn_client = os.path.join(here, 'ovpn-client')
+script_ext = '.exe' if sys.platform == 'cygwin' else ''
+ovpn_server = os.path.join(here, 'ovpn-server' + script_ext)
+ovpn_client = os.path.join(here, 'ovpn-client' + script_ext)
 ovpn_log = None
 
 def openvpn(iface, encrypt, *args, **kw):
diff --git a/re6stnet b/re6stnet
index c0df18a3def107b7e0ec37604181618460de7170..2bf28d661cdacdabba32f2b82aa3dac9363cd92b 100755
--- a/re6stnet
+++ b/re6stnet
@@ -359,7 +359,7 @@ def main():
                         exit(1)
                 t = threading.Thread(target=check_no_default_route)
                 t.daemon = True
-                # t.start()
+                t.start()
 
             if not sys.platform == 'cygwin':
                 ip('route', 'unreachable', *x)