需求是这样,现在有一个vpn,我可以通过这个vpn翻墙,但同时我需要访问内网,换言之,就是需要白名单或者黑名单翻墙的机制。mac上使用vpn很方便,偏好设置中就可以直接弄,但是没找到合适的黑白名单机制,没办法,只能另辟蹊径,通过iptable来指定不同的ip走不同的网卡。
-
通过
ifconfig
找到vpn使用的虚拟网卡名以及非vpn的时候使用的网卡lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 options=3<RXCSUM,TXCSUM> inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 nd6 options=1<PERFORMNUD> en5: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=4<VLAN_MTU> ether 00:0e:c6:c3:12:d6 inet 10.60.90.42 netmask 0xffffff00 broadcast 10.60.90.255 media: autoselect (100baseTX <full-duplex,flow-control>) status: active utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280 inet 192.168.3.45 --> 192.168.3.45 netmask 0xffffffff
上边en5是非vpn时走的网卡,utun0是通过vpn走的虚拟网卡。
-
通过
netstat -r
查看routing table
验证一下在非vpn时,走的都是en5这个卡,vpn时,走的utun0这个卡。
-
开启vpn,所有流量都默认会走utun0的卡,使用
route add
来指定特定ip走en5这个卡route add -net <destination subnet> -netmask <subnet mask> -interface en5
,其中destination subnet
与subnet mask
来确定哪些流量走的卡如,我要所有10起头的都走en5,则
route add -net 10.0.0.0 -netmask 255.0.0.0 -interface en5
即可。 -
再次时候用
netstat -r
查看routing table
验证