Кто-то ответил на мой предыдущий вопрос описав, как создать новую таблицу маршрутизации с исходной политикой маршрутизации:
echo 13 eth3 >> /etc/iproute2/rt_tables
ip route add default via 10.20.0.1 table eth3
ip rule add from 10.20.0.2 lookup eth3
Как мне сделать так, чтобы эти "ip" команды сохранялись после перезагрузки? Я предполагаю, что есть несколько подходящих строк, которые нужно добавить в /etc/network/interfaces
. Это сразу (добавление "добавляемых" строк в интерфейс) или есть другой способ сделать это?
iface eth3 inet static
address 10.20.0.2
netmask 255.255.255.0
up ip route add default via 10.20.0.1 table eth3
up ip rule add from 10.20.0.2 lookup eth3
down ip rule del from 10.20.0.2 lookup eth3
down ip route del default via 10.20.0.1 table eth3
(Я использую Ubuntu 12.04).
Разные администраторы делают это по-разному.
В основном я использую Debian, и я считаю, что «наиболее правильный», верный, определяемый как наиболее очевидный, интегрированный и документированный способ сделать это, - это добавить post-up
директивы к вашему /etc/network/interfaces
файл, как вы это сделали. Если вы сделаете это, убедитесь, что вы не обманываете и просто вкладываете все свои up
или post-up
директивы под одним интерфейсом. Попросите каждый интерфейс добавить соответствующие ему маршруты.
Другой способ, который я обычно видел, - это пользовательский сценарий инициализации, очень похожий на тот, который опубликовал @mgorven.
Я написал сценарий if-up, который автоматически делает это для каждого интерфейса без обратной связи. (Я только что изменил его, чтобы работать с интерфейсами, отличными от DHCP, без определенного шлюза, поэтому он может содержать ошибки.) Таблицы маршрутизации должны быть созданы заранее.
/etc/network/if-up.d/source-route
:
#!/bin/sh
set -e
if [ "$METHOD" = loopback ]; then
exit 0
elif [ "$METHOD" = dhcp ]; then
IF_ADDRESS="$(echo "$IP4_ADDRESS_0" | cut -d'/' -f1)"
IF_GATEWAY="$(echo "$IP4_ADDRESS_0" | cut -d' ' -f2)"
elif [ "$METHOD" = static]; then
if [ ! "$GATEWAY" ]; then
IF_GATEWAY="$(echo "$IF_ADDRESS" | cut -d. -f1-3).1"
fi
fi
ip route flush table "$IFACE"
ip route add default via "$IF_GATEWAY" table "$IFACE"
ip rule del lookup "$IFACE" || true
ip rule add from "$IF_ADDRESS" lookup "$IFACE"