aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSelva Nair2016-11-29 19:39:32 -0500
committerGert Doering2016-11-30 19:54:27 +0100
commit788e5e4a08e0df7206d17e9cbc135764d6fc385f (patch)
tree43f94d809eaa49f5ba9b36214c275cd5fc90a311
parent997795353916ffcb413a2da02dc7f210fd621954 (diff)
downloadopenvpn-788e5e4a08e0df7206d17e9cbc135764d6fc385f.zip
openvpn-788e5e4a08e0df7206d17e9cbc135764d6fc385f.tar.gz
Force 'def1' method when --redirect-gateway is done through service
The service deletes all added routes when the client process (openvpn) exits, causing the re-instated default route to disappear. Fix by rewriting "--redirect-gateway" to "--redirect-gateway def1" when routes are set using interactive service. Only the behaviour on Windows with intereactive service is affected. Trac: #778 Signed-off-by: Selva Nair <selva.nair@gmail.com> Acked-by: Gert Doering <gert@greenie.muc.de> Message-Id: <1480466372-2396-1-git-send-email-selva.nair@gmail.com> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg13307.html Signed-off-by: Gert Doering <gert@greenie.muc.de>
-rw-r--r--Changes.rst6
-rw-r--r--src/openvpn/options.c22
2 files changed, 28 insertions, 0 deletions
diff --git a/Changes.rst b/Changes.rst
index aa80c10..1343034 100644
--- a/Changes.rst
+++ b/Changes.rst
@@ -79,6 +79,12 @@ New interactive Windows service
files under %USERPROFILE%\\OpenVPN\\config for use with the
interactive service.
+redirect-gateway
+ if no flags are given, and the interactive service is used, "def1"
+ is implicitly set (because "delete and later reinstall the existing
+ default route" does not work well here). If not using the service,
+ the old behaviour is kept.
+
redirect-gateway ipv6
OpenVPN has now feature parity between IPv4 and IPv6 for redirect
gateway including the handling of overlapping IPv6 routes with
diff --git a/src/openvpn/options.c b/src/openvpn/options.c
index eac8023..038fcd3 100644
--- a/src/openvpn/options.c
+++ b/src/openvpn/options.c
@@ -2526,6 +2526,22 @@ options_postprocess_mutate_ce (struct options *o, struct connection_entry *ce)
}
+#ifdef _WIN32
+/* If iservice is in use, we need def1 method for redirect-gateway */
+static void
+remap_redirect_gateway_flags (struct options *opt)
+{
+ if (opt->routes
+ && opt->route_method == ROUTE_METHOD_SERVICE
+ && opt->routes->flags & RG_REROUTE_GW
+ && !(opt->routes->flags & RG_DEF1))
+ {
+ msg (M_INFO, "Flag 'def1' added to --redirect-gateway (iservice is in use)");
+ opt->routes->flags |= RG_DEF1;
+ }
+}
+#endif
+
static void
options_postprocess_mutate_invariant (struct options *options)
{
@@ -2555,6 +2571,8 @@ options_postprocess_mutate_invariant (struct options *options)
options->tuntap_options.ip_win32_type = IPW32_SET_MANUAL;
options->ifconfig_noexec = false;
}
+
+ remap_redirect_gateway_flags (options);
#endif
#if P2MP_SERVER
@@ -5707,6 +5725,10 @@ add_option (struct options *options,
goto err;
}
}
+#ifdef _WIN32
+ /* we need this here to handle pushed --redirect-gateway */
+ remap_redirect_gateway_flags (options);
+#endif
options->routes->flags |= RG_ENABLE;
}
else if (streq (p[0], "remote-random-hostname") && !p[1])