Иногда бывает необходимо отвести трафик одного или нескольких машин внутри локальной сети через другой шлюз.Например нам надо что бы кто то вышел в мир по другому каналу и другому IP адресу соответственно.Ну или там что б любители ютуба и порнухи не нагружали основной канал в рабочее время.И соответственно мы имеем например один основной канал быстрого и хорошего провайдера,и второй канал ADSL — так,больше как резерв.Вот сейчас через этот второй канал и будет пробрасывать юзера в нашей сети.
Делается это довольно просто.Для начала создадим таблицу с именем например adsl:
echo «10 adsl» >> /etc/iproute2/rt_tables
Теперь укажим дефолтный шлюз для новой таблицы(IP адрес нашего модема):
ip route add default via 46.x.x.x table adsl
Теперь отводим трафик с локальной машины с адресом 192.168.0.30:
ip rule add from 192.168.0.30 table adsl pref 10
Проверим: ip r s t adsl
должно показать одну только запись дефолтного маршрута,а нам надо заполнить ее как и дефолтную.Смотрим
ip r l
видим например
195.5.х.х dev ppp0 proto kernel scope link src 46.х.х.х
193.х.х.х/27 dev eth0 proto kernel scope link src 193.х.х.х
192.168.3.0/24 dev eth4 proto kernel scope link src 192.168.3.1
192.168.2.0/24 dev eth2 proto kernel scope link src 192.168.2.2
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.2
192.168.0.0/24 dev eth3 proto kernel scope link src 192.168.0.1
193.х.х.0/24 via 46.х.х.х dev ppp0
default via 193.х.х.х dev eth0
Затем дописываем в новую таблицу такие же правила как и в дефолтной,все,кроме последнего default. Например первое правило:
ip route add table adsl 195.5.х.х dev ppp0 proto kernel scope link src 46.х.х.х и так далее
Так можно разводить сколько угодно клиентов или подсетей через разные шлюзы.
Готово! Теперь в течении минуты у нашего клиента соединения сбросятся и восстановятся уже через новый маршрут.Что б было быстрее можно сделать(но лучше не делайте)
ip route flush cache