[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