Назад | Перейти на главную страницу

Постоянное добавление правил маршрутизации исходной политики

Кто-то ответил на мой предыдущий вопрос описав, как создать новую таблицу маршрутизации с исходной политикой маршрутизации:

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"