[FUG-BR] [patch] add support setfib(1) in rc.d/routing

Danton Dorati danton em freebsdbrasil.com.br
Quarta Setembro 2 18:36:13 BRT 2009


 Para aqueles que já estão familiarizados com o novo recurso de poder 
manipular várias (no total 16) tabelas de roteamento (fib)
no FreeBSD aqui vai um patch, mesmo que ainda não oficial (já foi 
submetido um PR para adicionar esse recurso),
para poder manipular através do rc.conf, rotas defaults de cada tabela 
(defaultrouter_fibN) e rotas estáticas (static_routes_fibN),
onde "N" é número da tabela de roteamento que deseja manipular 
(lembrando que a primeira fib é a 0).

# fetch -o /usr/src/rc.d-routing_man-rc.conf.patch 
"http://www.freebsd.org/cgi/query-pr.cgi?prp=132476-1-txt&n=/patch.txt"
# patch -d /usr/src -p0 < /usr/src/rc.d-routing_man-rc.conf.patch
# cp -p /etc/rc.d/routing /etc/rc.d/routing.old
# cp /usr/src/etc/rc.d/routing /etc/rc.d
# chmod +x /etc/rc.d/routing
# cp -p /usr/share/man/man5/rc.conf.5.gz 
/usr/share/man/man5/rc.conf.5.gz.old
# gzip -cn /usr/src/share/man/man5/rc.conf.5 > 
/usr/share/man/man5/rc.conf.5.gz

Para mais informações do novo recurso.
# man rc.conf

Obs.: Eu mesmo fiz alguns testes, inclusive com servidores em produção, 
ou seja rebootei as máquinas e usei os comandos:

Muita atenção em executar esses comandos em máquinas remotas.
# /etc/netstart
# /etc/rc.d/routing (stop|start|restart)

 Acredito que esse Problem Report ainda não foi "committado", pois 
quando se deixa de usar a forma padrão para atribuir
uma rota default na fib 0 e passa a usar especificando a tabela de 
roteamento (defaultrouter_fib0="IP"), ou seja ignorando
defaultrouter="IP", a máquina fica sem rota de saída para internet. Ou 
seja o uso dessa opção ainda é necessário (obrigatório)
caso queira que continue tendo conectividade com o mundo externo 
(nuvem). No entanto é bem simples de corrigir esse pequeno
"bug" (patch do patch). Basta adicionar o seguinte no arquivo 
/etc/rc.d/routing na função "static_start()":

Logo abaixo de "_fibs_num=`sysctl -n net.fibs`"

        if [ -z "${defaultrouter}" ] || [ "${defaultrouter}" = "NO" ] && 
[ -n "${defaultrouter_fib0}" ]; then
                defaultrouter=${defaultrouter_fib0}
        fi
        if [ -z "${defaultrouter}" ] || [ "${defaultrouter}" = "NO" ] && 
[ -z "${defaultrouter_fib0}" ]; then
                defaultrouter="NO"
        fi

Ficando parecido com esse trecho:

...
static_start()
{
        _fibs_num=`sysctl -n net.fibs`
        if [ -z "${defaultrouter}" ] || [ "${defaultrouter}" = "NO" ] && 
[ -n "${defaultrouter_fib0}" ]; then
                defaultrouter=${defaultrouter_fib0}
        fi
        if [ -z "${defaultrouter}" ] || [ "${defaultrouter}" = "NO" ] && 
[ -z "${defaultrouter_fib0}" ]; then
                defaultrouter="NO"
        fi
        if [ -n "${static_routes}" ]; then
                static_routes_fib0=${static_routes}
        fi
        if [ -n "${defaultrouter}" ]; then
                defaultrouter_fib0=${defaultrouter}
        fi

        # Setup static routes. This should be done before router discovery.
...




-- 
Atenciosamente,
Danton Dorati

http://www.freebsdbrasil.com.br
Telefone/Fax: (31) 3516 0800
FreeBSD Brasil - FreeBSD Brasil LTDA
Avenida Getulio Vargas, 54 - 3º andar
Funcionarios - Belo Horizonte.

"Happiness is nothing more than good health and a bad memory."



Mais detalhes sobre a lista de discussão freebsd