Home networking Mac OS OpenVPN local traffic not routed via VPN

Mac OS OpenVPN local traffic not routed via VPN

1
Mac OS OpenVPN local traffic not routed via VPN

When using Tunnelblick, or Viscosity in Mac OS X (both use OpenVPN underneath), my local traffic was not routed via the VPN.

This happened despite enabling the options “route all traffic through VPN”, or adding push "redirect-gateway def1" to my VPN server options as suggested by https://askubuntu.com/questions/462533/route-all-traffic-through-openvpn

After some research, I found out what is happening, and I’ve come up with a temporary fix. I believe the root cause is a bug either on Mac OS X, or on OpenVPN, but this solution circumvents it.

First, disconnected from your VPN, your routing table should look like this:

netstat -nr

Routing tables

Internet:
Destination        Gateway            Flags        Netif Expire
default            192.168.1.1        UGSc           en0
127                127.0.0.1          UCS            lo0
127.0.0.1          127.0.0.1          UH             lo0

After connecting to the VPN, running netstat -nr yields:

netstat -nr

Routing tables

Internet:
Destination Gateway Flags Netif Expire
0/1 10.0.8.1 UGSc utun10
default 192.168.1.1 UGSc en0
10.0.8/24 10.0.8.2 UGSc utun10
10.0.8.2 10.0.8.2 UH utun10

The problem is that the default route goes through 192.168.1.1, and not 10.0.8.1.
This latter being our VPN gateway.

One solution to this is to explicitly add a route via the VPN gateway to individual local clients.
For instance, to access 192.168.1.112, a local client in the remote network, we run:

sudo route add 192.168.1.112 10.0.8.1

You can add as many clients as needed, and also add groups of them with IP/Masks. After this, you should be able to access local clients in the remote network.