This was a hard article to figure out the title for! Put simply, your mac book has a route table and if you want to move a specific IP address or dns from one interface to another, then follow the steps below:
First find the IP address of the website that you want to re-route the traffic for:
$ nslookup web.whatsapp.com
Server: 100.64.0.1
Address: 100.64.0.1#53
Non-authoritative answer:
web.whatsapp.com canonical name = mmx-ds.cdn.whatsapp.net.
Name: mmx-ds.cdn.whatsapp.net
Address: 102.132.99.60
We want to re-route traffic the traffic from: 102.132.99.60 to the default interface. So first lets find out which interface this traffic is currently being routed to?
$ route -n get web.whatsapp.com
route to: 102.132.99.60
destination: 102.132.99.60
gateway: 100.64.0.1
interface: utun0
flags: <UP,GATEWAY,HOST,DONE,WASCLONED,IFSCOPE,IFREF>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 34 21 0 1400 0
So this is currently going to a tunnelled interface called utun0 on gateway 100.64.0.1.
Ok, so I want to move if off this tunnelled interface. So lets first display the kernel routing table. The -n option forces netstat to print the IP addresses. Without this option, netstat attempts to display the host names.
$ netstat - rn | head -n 5
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 126 100.64.0.1.64770 136.226.216.14.https ESTABLISHED
tcp4 0 0 100.64.0.1.64768 whatsapp-cdn-shv.https ESTABLISHED
tcp4 0 0 100.64.0.1.64766 52.178.17.3.https ESTABLISHED
Now we want to re-route whatsapp to the default interface. So lets get the IP address of the default interface.
$ netstat -nr | grep default
default 192.168.8.1 UGScg en0
default fe80::%utun1 UGcIg utun1
default fe80::%utun2 UGcIg utun2
default fe80::%utun3 UGcIg utun3
default fe80::%utun4 UGcIg utun4
default fe80::%utun5 UGcIg utun5
default fe80::%utun0 UGcIg utun0
We can see that our en0 interface is on IP address: 192.168.8.1. So lets re-route the traffic from Whatsapp’s ip address to this interace’s IP address:
$ sudo route add 102.132.99.60 192.168.0.1
route: writing to routing socket: File exists
add host 102.132.99.60: gateway 192.168.8.1: File exists
Now lets test if we are routing via the correct interface:
$ route -n get 102.132.99.60
route to: 102.132.99.60
destination: 102.132.99.60
gateway: 192.168.8.1
interface: utun6
flags: <UP,GATEWAY,HOST,DONE,STATIC>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1400 0
Finally delete the route and recheck the routing:
$ sudo route delete 102.132.99.60
delete host 102.132.99.60
$ route -n get 102.132.99.60
route to: 102.132.99.60
destination: 102.132.99.60
gateway: 100.64.0.1
interface: utun6
flags: <UP,GATEWAY,HOST,DONE,WASCLONED,IFSCOPE,IFREF>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1400 0