diff options
author | Arne Schwabe <arne@rfc2549.org> | 2014-07-13 14:28:47 +0200 |
---|---|---|
committer | Gert Doering <gert@greenie.muc.de> | 2014-07-13 15:54:21 +0200 |
commit | 4cc6a2595947a0e2f13b37637899bfc50f8509aa (patch) | |
tree | 2e36fb28ce21ab7419c4367538f211cb97b59727 /src/openvpn/helper.c | |
parent | 97bd862ed5c22956cb4405eabae64cf55cabb0d3 (diff) | |
download | openvpn-4cc6a2595947a0e2f13b37637899bfc50f8509aa.tar.gz openvpn-4cc6a2595947a0e2f13b37637899bfc50f8509aa.tar.xz openvpn-4cc6a2595947a0e2f13b37637899bfc50f8509aa.zip |
Fix server routes not working in topology subnet with --server [v3]
The IPv4 routing code needs an IPv4 address to point a route to, and
in --topology subnet mode, the *server* did not have one set by default.
So we now just default --route-gateway to the next address right after
the server address - the specific address doesn't matter, as the correct
next-hop will not be resolved by the host OS but by the OpenVPN daemon.
All that is needed is "it's in the subnet routed to the tun interface".
Using the server address itself would work on unix, but doesn't work with
the Windows TAP driver (as it does not spoof ARP responses for itself).
Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1405254527-23833-1-git-send-email-gert@greenie.muc.de>
URL: http://article.gmane.org/gmane.network.openvpn.devel/8904
Diffstat (limited to 'src/openvpn/helper.c')
-rw-r--r-- | src/openvpn/helper.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/openvpn/helper.c b/src/openvpn/helper.c index d9eef03..0ed0b2b 100644 --- a/src/openvpn/helper.c +++ b/src/openvpn/helper.c @@ -232,6 +232,8 @@ helper_client_server (struct options *o) * if !nopool: * ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 * push "route-gateway 10.8.0.1" + * if route-gateway unset: + * route-gateway 10.8.0.2 */ if (o->server_defined) @@ -311,8 +313,10 @@ helper_client_server (struct options *o) ifconfig_pool_verify_range (M_USAGE, o->ifconfig_pool_start, o->ifconfig_pool_end); } o->ifconfig_pool_netmask = o->server_netmask; - + push_option (o, print_opt_route_gateway (o->server_network + 1, &o->gc), M_USAGE); + if (!o->route_default_gateway) + o->route_default_gateway = print_in_addr_t (o->server_network + 2, 0, &o->gc); } else ASSERT (0); |