Adicionando permanentemente regras de roteamento de política de origem

5

Alguém respondeu à minha pergunta anterior descrevendo como criar uma nova tabela de roteamento com o roteamento da política de origem:

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

Como faço para que esses comandos "ip" persistam em uma reinicialização? Eu suponho que há algumas linhas apropriadas a serem adicionadas ao /etc/network/interfaces . É isso imediatamente (adicionando "up" linhas para a interface), ou existe outra maneira de fazer isso?

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

(estou no Ubuntu 12.04).

    
por Lorin Hochstein 14.03.2013 / 21:29

2 respostas

4

Diferentes administradores realizam isso de maneiras diferentes.

Estou usando principalmente o Debian e sinto que o "mais correto", sendo o correto definido como a maneira mais óbvia, integrada e documentada de fazer isso, é adicionar post-up diretivas ao seu arquivo /etc/network/interfaces como você feito. Se você fizer isso, certifique-se de não trapacear e colocar todas as diretivas up ou post-up em uma única interface. Peça a cada interface que adicione as rotas adequadas a ela.

A outra maneira que eu já vi isso acontecer é com um script de inicialização customizado muito similar a um @mgorven postou.

    
por 15.03.2013 / 19:13
3

Eu escrevi um script if-up que faz isso automaticamente para cada interface que não seja de loopback. (Acabei de modificá-lo para lidar com interfaces não-DHCP sem um gateway definido, por isso pode ser buggy.) As tabelas de roteamento precisam ser criadas com antecedência.

/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"
    
por 14.03.2013 / 22:23