This is needed so that we can access hosts behind the VPN.
The route might already be setup if VPN server is the same
as nameserver or similar.
---
Hi,

this should add the missing OpenVPN route that Daniel reported.
I noticed that I had the route automagically setup in my test
network, but that was because I had my OpenVPN server in the same
host as nameserver. This meant that I had the route already
setup and everything seemed to work properly.

Daniel, please test and ack if ok.

Cheers,
Jukka

 src/connection.c |   34 +++++++++++++++++++++++++---------
 1 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/src/connection.c b/src/connection.c
index 8b1b689..7b71298 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -832,15 +832,31 @@ int __connman_connection_gateway_add(struct 
connman_service *service,
        }
 
        if (service_type == CONNMAN_SERVICE_TYPE_VPN) {
-               if (type == CONNMAN_IPCONFIG_TYPE_IPV4 &&
-                                       new_gateway->ipv4_gateway != NULL)
-                       set_vpn_routes(new_gateway->ipv4_gateway,
-                               service, gateway, type, peer);
 
-               else if (type == CONNMAN_IPCONFIG_TYPE_IPV6 &&
-                                       new_gateway->ipv6_gateway != NULL)
-                       set_vpn_routes(new_gateway->ipv6_gateway,
-                               service, gateway, type, peer);
+               if (type == CONNMAN_IPCONFIG_TYPE_IPV4) {
+                       if (new_gateway->ipv4_gateway != NULL)
+                               set_vpn_routes(new_gateway->ipv4_gateway,
+                                       service, gateway, type, peer);
+
+                       /*
+                        * Special route to VPN server via gateway. This
+                        * is needed so that we can access hosts behind
+                        * the VPN. The route might already exist depending
+                        * on network topology.
+                        */
+                       connman_inet_add_host_route(active_gateway->index,
+                                       gateway,
+                                       active_gateway->ipv4_gateway->gateway);
+
+               } else if (type == CONNMAN_IPCONFIG_TYPE_IPV6) {
+                       if (new_gateway->ipv6_gateway != NULL)
+                               set_vpn_routes(new_gateway->ipv6_gateway,
+                                       service, gateway, type, peer);
+
+                       connman_inet_add_ipv6_host_route(active_gateway->index,
+                                       gateway,
+                                       active_gateway->ipv6_gateway->gateway);
+               }
 
        } else {
                if (type == CONNMAN_IPCONFIG_TYPE_IPV4 &&
-- 
1.7.5.4

_______________________________________________
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman

Reply via email to