Следующая команда проверит открытые соединения tcp и выведет список адресатов за пределами локальной сети:
$ netstat -4ntu | tail -n +3 | cut -c45-65 | cut -d: -f1 | grep -v '192.168.99' | grep -v '192.168.1' 214.236.220.101 63.171.235.16 174.63.61.132 159.47.216.178 62.59.197.29 139.47.218.150 56.4.17.22 204.63.49.5 155.9.79.196 144.31.207.66
Таким образом, нам просто нужно перебрать этот список и указать конкретные маршруты к основному маршрутизатору, прежде чем изменять маршрут по умолчанию:
for i in $(netstat -4nt | tail -n +3 | cut -c45-65 | cut -d: -f1 |grep -v '192\.168\.99' | grep -v '192\.168\.1') ; do echo route add -host $i gw 192.168.1.99; done
(Я оставил там команду «echo», чтобы вы могли видеть, что она делает, вы можете удалить ее, когда вы действительно хотите это сделать.
Затем измените ваш маршрут по умолчанию:
$ route add -net 0.0.0.0 gw 192.168.1.1 dev tap0
Поскольку добавленные маршруты более конкретны, они будут выбраны в качестве предпочтения к маршруту по умолчанию. Очевидно, вы можете поместить это в сценарий, чтобы сделать это проще.