В этом листинге приведены приоритеты всех правил. Мы видим, что правила применяются ко всем пакетам (from all). Мы уже видели таблицу 'main', она выводится командой ip route ls , но таблицы 'local' и 'default' для нас новые.
Если мы хотим сделать что-то интересное, то нужно задать правила, использующие разные таблицы маршрутизации. Это позволит нам переопределить общесистемную таблицу маршрутизации.
За точной семантикой происходящего в ядре, когда есть несколько подходящих правил, обратитесь к документации ip-cref Алексея Кузнецова.
4.1. Простая маршрутизация по источнику.
Давайте опять рассмотрим реальный пример. У меня есть 2 (вообще-то 3, пора бы вернуть их) кабельных модема, подключенных к маршрутизатору Linux с NAT ('masquerading'). Люди с которыми я живу в одном доме, платят мне за использование Internet. Допустим одни из моих соседей ходит только на hotmail и хочет платить меньше. Мне это подходит, но при этом будет использоваться медленный канал.
Быстрое соединение имеет с моей стороны адрес 212.64.94.251, а с другой — 212.64.94.1. Медленное соединение получает динамический адрес, в данном примере это 212.64.78.148, адрес провайдера — 195.96.98.253.
Таблица local:
>[ahu@home ahu]$ ip route list table local
>broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
>local 10.0.0.1 dev eth0 proto kernel scope host src 10.0.0.1
>broadcast 10.0.0.0 dev eth0 proto kernel scope link src 10.0.0.1
>local 212.64.94.251 dev ppp0 proto kernel scope host src 212.64.94.251
>broadcast 10.255.255.255 dev eth0 proto kernel scope link src 10.0.0.1
>broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
>local 212.64.78.148 dev ppp2 proto kernel scope host src 212.64.78.148
>local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
>local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
Много очевидных вещей, но они должны быть где-то указаны. Вот здесь они и заданы. Таблица default — пустая.
Посмотрим теперь на таблицу main:
>[ahu@home ahu]$ ip route list table main
>195.96.98.253 dev ppp2 proto kernel scope link src
>212.64.78.148 212.64.94.1 dev ppp0 proto kernel scope link src 212.64.94.251
>10.0.0.0/8 dev eth0 proto kernel scope link src 10.0.0.1
>127.0.0.0/8 dev lo scope link default via 212.64.94.1 dev ppp0
Создадим новое правило для нашего гипотетического соседа, которое будет называться 'John'. Хотя мы можем работать просто с числами, намного проще и понятней если мы определим названия наших таблиц в файле /etc/iproute2/rt_tables.
># echo 200 John >> /etc/iproute2/rt_tables