Inicial > NetBSD > Usando (e criando um roteador com) NetBSD

Usando (e criando um roteador com) NetBSD

O princípio. Senta que lá vem história!

Há muitas coisas que realmente adoro. E, uma delas, são os servidores. Máquinas preparadas para o funcionamento 24×7, com pouquíssimo downtime. Ahh, os servidores!  ^-^’  O gerenciamento, a instalação, configuração, os testes, e os uptimes são coisas muito legais de se acompanhar no dia-a-dia. Pra quem gosta, claro. E, como sysadmin, é legal ter algo para brincar nas horas vagas.

Então, em casa, possuo um HP Vectra VL5/100. Não é um servidor, mas sim um desktop construído em 1996 com uma incrível configuração: Pentium 166, 96MB Ram (em pentes EDO!) e funcionando perfeitamente. Ganhei-a de um amigo que estava se desfazendo de suas velharias tecnológicas, e preparei a máquina para executar a função de um servidor doméstico. É basicamente um roteador, controlado por porta serial e cabo RS-232!

Assim, quando o ganhei, troquei o HD por um cartão Compact Flash de 2GB espetado na IDE através de um adaptador (R$60,00 no total, pelo ML), substituindo o velho e barulhento Quantum Fireball de 4GB. Retirei o fan do processador e coloquei um dissipador de cobre, do meu finado Athlon XP, bem como uma melhora na circulação de ar. Essa máquina veio com Windows Millenium, e coloquei o sistema operacional Linux assim que o recebi. Mas, por ser bem velho, a única coisa que funcionou nele foi o Slackware 11. Instalada em Maio de 2008, sobreviveu até alguns dias atrás com pouquíssimo downtime.

Os problemas

Quando instalei-o, originalmente, queria utilizar o Vectra com FreeBSD. Porém, o sistema nem bootava, indicando alguma incompatibilidade feia com a controladora IDE do rapaz. Foi até tolerável, até por que, pior que configurar um ADSL PPPoE com modem bridgeado no FreeBSD é só configurar esse mesmo ADSL PPPoE com modem bridgeado no Solaris. O Slackware 11 funcionou muito bem enquando durou.

Porém, para acelerar o longo processo de boot, com mais de um minuto e trinta segundos, havia retirado a verificação do sistema de arquivos ReiserFS, o que garantiria a rapidez no caso de um reboot inesperado. Não me causou problemas durante seis meses, até o momento que mudei de casa.

Na casa nova, a rede elétrica é monofásica, e qualquer coisa estava provocando a reinicialização do Vectra. Em menos de um mês o sistema de arquivos já estava destruído, e numa bela manhã, o sistema operacional já não bootou mais. Basicamente um fsck.reiserfs –rebuild-tree resolveria o problema. Mas, pelo gabinete ser desktop (e o monitor ficar em cima), e a máquina não ter cdrom nem disquete, o trabalho seria o mesmo de uma reinstalação.

Então, tive um lapso de vontade de testar novamente o NetBSD no Vectra. Sem motivo ou razão aparente. No segundo semestre da faculdade, havia instalado o NetBSD em várias máquinas velhas de um laboratório que não possuia internet. Utilizava mesmo para idiotices, e nunca havia explorado nem o gerenciamento de pacotes do sistema operacional. Será que funcionaria nessa máquina? Afinal, o FreeBSD não funcionou, mas não custaria nada tentar.

E eis que veio o NetBSD!

Testei dias antes numa máquina virtual, no trabalho, e como me diverti! Unix _É_ o sistema. (E que o Open Group não me leia). É ótimo editar um rc.conf, ler os manuais bem elaborados e diretos que os desenvolvedores de sistemas BSDs criam, bem como seus handbooks. Decidi-me a instalar o NetBSD no Vectra. A instalação foi horrivelmente rápida, e o sistema estava instalado na velha carroça menos de 30 minutos depois.

Informações básicas sobre o sistema

1) Gerenciamento de pacotes

O NetBSD possui o pkgsrc, ferramenta de gerenciamento de pacotes semelhante ao Ports, do FreeBSD, e ao Portage, do Gentoo Linux. Porém, numa máquina com 166MHz e 2GB de armazenamento físico, nem cogitei a instalação compilação de qualquer programa através do pkgsrc.

Então, os repositórios do NetBSD também possuem pacotes pré-compilados para o sistema operacional. Óbvio que não garante a mesma otimização, mas quebra o galho e é muito fácil de gerenciar. Para isso, no NetBSD, os comandos são o pkg_add, pkg_info, pkg_delete, pkg_view e pkg_admin. Sintaxe mais limpa impossível: pkg_add (nomedopacote).

Os pacotes são buscados através do caminho absoluto (ou relativo), ou então através da variável de ambiente $PKG_PATH. Como a máquina não tem cdrom, setei-a apenas para o FTP do NetBSD com os pacotes atualizados:

export PKG_PATH=ftp://ftp.netbsd.org/pub/NetBSD/packages/4.0/i386/All

A resolução de dependências é automática e eficaz, não como o horror do dpkg utilizado no Debian Linux.

Por ele instalei o bash, rp-pppoe (que não funcionou), o screen, apache, samba, pciutils, wget, vim (:split > ALL!) e irssi. Assim como o pkg-get do Solaris, os programas instalados pelo pkg_add ficam localizados numa hierarquia separada do resto do sistema: /usr/pkg/(whattever).

2) Configurações a nível de sistema

Fora os arquivos de configuração (que são iguais em todos os Unices/Linuces), uma coisa que eu nunca fui muito fã no Linux são as configurações na /proc. Funciona bem, mas organização do diretório não é muito prática. Assim como no FreeBSD, o NetBSD utiliza o comando sysctl. O sysctl -a mostra todas as configurações de sistema em execução naquele momento. Para que as configurações possam ser carregadas automaticamente, basta editar o arquivo /etc/sysctl.conf. O sysctl usa MIBs, assim como as de SNMP.

As configurações de inicialização, também como o FreeBSD e como várias distribuições Linux (como o Arch), são realizadas no arquivo /etc/rc.conf. Os scripts ficam no diretório /etc/rc.d. E, os exemplos como de praxe, ficam em /etc/defaults/rc.conf. Boa parte das configurações são realizadas somente nesses dois arquivos.

Os arquivos de exemplo também ficam localizados em /usr/share/examples e /usr/pkg/share/examples.

Configuração do Roteador

E enfim, a configuração de um roteador no NetBSD. Todos os programas necessários para a criação já estavam disponíveis após a instalação, bastou configurá-los: DHCPD, PPPOECTL e Packet Filter. A configuração do DHCPD é simplíssima como em qualquer sistema operacional, nem vou explicar aqui.

a) Definindo o IP fixo da interface de rede interna:

ifconfig ex1 inet 192.168.1.1 netmask 255.255.255.0 up

Para subir automaticamente durante o boot, basta adicionar ao /etc/rc.conf:

ifconfig_ex1=”192.168.1.1 netmask 255.255.255.0″

b) Configuração do PPPoE

Primeiramente é preciso criar o dispositivo virtual que utilizará o pppoe. Isso pode ser feito com os seguintes comandos:

ifconfig pppoe0 create
ifconfig pppoe0 inet 0.0.0.0 0.0.0.1 down

Após isso, é necessário vincular o dispositivo físico ao virtual:

ifconfig ex0 plumb
ifconfig ex0 up
pppoectl -e ex0 pppoe0

Então a linha de conexão. A senha é real, pois se trata da operadora GVT, e não é única.

pppoectl pppoe0 myauthproto=pap ‘myauthname=turbonet@turbonet’ ‘myauthsecret=gvt25’ hisauthproto=none

O status pode ser acompanhado pelo comando pppoectl pppoe0. Após a conexão, subir a interface:

ifconfig pppoe0 up

Para conectar automaticamente durante o boot, basta criar o arquivo /etc/ifconfig.pppoe0 com o seguinte conteúdo:

create
! /sbin/ifconfig ex0 up
! /sbin/pppoectl -e ex0 $int
! /sbin/pppoectl $int myauthproto=pap ‘myauthname=turbonet@turbonet’ ‘myauthsecret=gvt25’ hisauthproto=none
0.0.0.0 0.0.0.1 up

E adicionar os seguintes ítens ao /etc/rc.conf:


ifwatchd=YES
ipnat=YES

c) Habilitar o roteamento de pacotes

sysctl -w net.inet.ip.forwarding=1

Para ativar a cada boot, basta editar o /etc/sysctl.conf e adicionar o mesmo parâmetro ao final do arquivo.

d) Criação do ipnat.conf

Adicionar as linhas a seguir no arquivo /etc/ipnat.conf

map pppoe0 192.168.1.0/24 -> 0/32 portmap tcp/udp 40000:60000 mssclamp 1440
map pppoe0 192.168.1.0/24 -> 0/32

Os dois parâmetros estabelecem o nat das redes informadas através do dispositivo virtual pppoe0.

Novamente, para serem carregados durante o boot, basta adicionar no /etc/rc.conf:

ipnat=YES

Estado final do arquivo /etc/rc.conf:

#       $NetBSD: rc.conf,v 1.96 2000/10/14 17:01:29 wiz Exp $
#
# see rc.conf(5) for more information.
#
# Use program=YES to enable program, NO to disable it. program_flags are
# passed to the program on the command line.
#

# Load the defaults in from /etc/defaults/rc.conf (if it’s readable).
# These can be overridden below.
#
if [ -r /etc/defaults/rc.conf ]; then
. /etc/defaults/rc.conf
fi

hostname=”Vectra.timm.net”
sshd=yes
ifconfig_ex1=”192.168.1.1 netmask 255.255.255.0″
#defaultroute=”192.168.1.2″
ifwatchd=YES
ipnat=YES
dhcpd=YES  dhcpd_flags=”ex1″ #Definir interface para o sinal DHCP
smbd=YES
nmbd=YES
samba=YES
apache=NO
pf=YES
pf_rules=”/etc/pf.conf”
clear_tmp=YES

# If this is not set to YES, the system will drop into single-user mode.
#
rc_configured=YES

# Add local overrides below
#
wscons=YES

Reboot para testar se tudo vai subir automaticamente, e está pronto seu roteador em NetBSD! 🙂

Pendengas

a) Uma coisa que eu realmente não gosto nos Unices (independente da família) é a nomenclatura dos dispositivos de rede. No Linux, independente do tipo, é sempre ethX, wlanX, pppX. No Unix não, e no NetBSD não é diferente. Minhas duas 3Coms, contidas no Vectra, são as ex0 e ex1. Placas de rede de outro modelo obterão nomenclaturas diferentes, mas não mudará no contexto do artigo.

b) Meu console serial, infelizmente, agora só funciona quando quer. O arquivo /etc/ttys está corretamente configurado, e não se trata de problema no cabo RS-232 ou nos adaptadores. O pessoal do canal #netbsd, da FreeNode, bem que tentou. Mas não deu certo.

c) Me adaptar a utilizar o vmstat no lugar do free… 😛

Conclusões

Sério. Esse Vectra nunca foi tão rápido em toda a sua (longa) existência. O NetBSD é um sistema operacional leve, enxuto e eficaz, e não tão repleto de cacarias como o FreeBSD. Isso pode garantir alguns anos a mais na existência deste velho guerreiro, apesar de continuar cogitando a aquisição de um Pentium 3 (Dell, Compaq, HP ou outro montado) para executar a mesma função quando este vier a óbito! 😀

Porém, também é interessante para aqueles que reclamam sem conhecer. O NetBSD não é tão fácil como o Linux no quesito usuabilidade, afinal é um Unix de verdade. (Novamente, que o Open Group não me leia).  Recomendo para todo e qualquer geek (e aos usuários Windows também, pra aprenderem a não recalmar  😀 ) a utilização deste sistema operacional, se possível em máquina pré-histórica equivalente. Vale a pena e é uma excelente chance de aprendizado.

E sim. Cogito seriamente em adotá-lo como desktop.

Stay safe!
Lucas Timm.

UPDATE: Vivendo e aprendendo. Não sabia que o Linux também tinha sysctl…

Categorias:NetBSD Tags:,
  1. Erick
    15 de dezembro de 2008 às 10:50 pm

    “Porém, também é interessante para aqueles que reclamam sem conhecer. O NetBSD não é tão fácil como o Linux no quesito usuabilidade, afinal é um Unix de verdade.”

    Isso é pré-conceito bobo. O Mac OS X é um Unix de verdade (certificado até) e nem por isso deixa de ser fácil ou peca na usabilidade.

  2. 15 de dezembro de 2008 às 10:57 pm

    Tecnicamente falando, até o Windows deve ser mais Unix que o Mac OS X. A diferença é que a Apple comprou o título de Unix do OpenGroup. Afinal, o Darwin é uma porra louca: Micro-kernel Mach com subsistema BSD formando o XNU (XNU is Not Unix). Não tem a maioria dos arquivos de configuração, sendo realizadas essas unicamente pela GUI, com uma estrutura de diretórios from hell…

    De Unix mesmo, o Mac OS X só possui os algoritmos de gerenciamento e alguns conceitos 🙂

  3. Eduardo
    18 de dezembro de 2008 às 10:03 am

    Timm, você também teve uma encheção de saco com os packages do NetBSD? Aqui o 4.0.1 invoca com os pacotes do 4.0 STABLE.

  4. Avelino Bego
    17 de dezembro de 2009 às 11:46 am

    Lucas, usei muito tempo o Slack. Hoje estou de Ubuntu.
    Como foi a experiência com o NetBSD?
    O que você colocaria como diferença entre ele e o FreeBSD?
    Vale a pena como Desktop?

    Sou desenvolvedor Java e “curioso” de Python e Ruby….

    Abraços.

    • 17 de dezembro de 2009 às 12:09 pm

      Como desktop ele possui as mesmas limitações que o FreeBSD. Ou seja, o calcanhar de aquiles é a inexistência de aplicativos proprietários comuns e aplicativos mais… complexos. VMware e plugin do Flash, por exemplo. Sun xVM, que apesar de open source a recém está saindo pro FreeBSD, coisas assim. Teria que usar emulação binária a partir do Linux, e as coisas ficam meio feias.

      Quanto a diferença entre o FreeBSD e o NetBSD, o que me atraiu no NetBSD é o fato dele ser bem mais simples que o FreeBSD. Existem muitas semelhanças entre ambos, em parte com o Linux também. O NetBSD também é mais rápido e mais leve que o FreeBSD, ou seja, é um sistema operacional COMPLETO (sim Linux, estou falando pra você) mais leve, mais estável e mais puritano que o FreeBSD. O NetBSD também tem suporte nativo ao Xen, com grande estabilidade. Mas um problema comum a ambos é também a questão da compatibilidade de hardware.

      Meu Vectra continua sendo meu roteador, e rodando o NetBSD, e pretendo mantê-lo enquanto puder. 🙂

      Abraço,
      Lucas Timm.

  1. 13 de novembro de 2014 às 11:02 pm

Deixe um comentário