How to selectively route traffic for one specified IP adddress through the VPN tunnel (not all traffic)

vpn

Goal: To selectively route traffic over a VPN, so that general browsing/downloads goes via the normal primary connection, with my business VPN traffic going over the VPN.

I have tried a similar method mentioned here, but no matter how I changed the details it didn't work.

The VPN works, I can connect and route all traffic over it, so that is not the issue.

Home IP: 192.168.34.X

IP from VPN: 192.168.1.X

IP's (via VPN) trying to access in the internal network: 10.4.X.X, 196.220.X.X

How to selectively route traffic for one specified IP adddress through the VPN tunnel (not all traffic)?

Best Answer

  • Step 1, create two plain text files named ip-up and ip-down in /etc/ppp and make the two files executable:

    $ sudo touch /etc/ppp/ip-{up,down}
    $ sudo chmod +x /etc/ppp/ip-{up,down}
    

    Step 2, modify the file ip-up, add the following:

    #!/bin/sh
    export PATH="/bin:/sbin:/usr/sbin:/usr/bin"
    
    OLDGW=`netstat -nr | grep '^default' | grep -v 'ppp' | sed 's/default *\([0-9\.]*\) .*/\1/'`
    
    if [ ! -e /tmp/pptp_oldgw ]; then
        echo "${OLDGW}" > /tmp/pptp_oldgw
    fi
    
    dscacheutil -flushcache
    route add 10.4.0.0/24 "${OLDGW}"
    

    Step 3, modify the ip-down, add the following:

    #!/bin/sh
    export PATH="/bin:/sbin:/usr/sbin:/usr/bin"
    
    if [ ! -e /tmp/pptp_oldgw ]; then
            exit 0
    fi
    
    ODLGW=`cat /tmp/pptp_oldgw`
    
    route delete 10.4.0.0/24 "${OLDGW}"
    rm /tmp/pptp_oldgw