Brincando com vnet em Jail no FreeBSD
Este tutorial é uma serie de dicas e comando para gerenciar Jails com o novo esquema de emulação de rede que ainda esta experimental no FreeBSD. Mas já é possível usar as features que o mesmo oferece e criar um ambiente totalmente personalizado com firewall e ferramentas de diagnósticos de rede dentro de uma jail.
Uma ótima definição sobre Jail esta disponível no Wikipedia no endereço:
http://pt.wikipedia.org/wiki/FreeBSD_jail
Para iniciar-mos o tutorial, precisamos como pre-requisito que você conheça como recompilar o kernel do FreeBSD, tarefa ao qual existem bons documentos disponíveis, a começar pelo o Handbook.
No kernel precisaremos das seguintes entradas no arquivo de configuração:
options LIBALIAS options IPFIREWALL options IPFIREWALL_NAT options IPFIREWALL_FORWARD options IPFIREWALL_DEFAULT_TO_ACCEPT options DUMMYNET options HZ=1000 options VIMAGE
Assim que configurar o kernel, faca a recompilação do mesmo e reinicie o servidor.
No exemplo que estou citando aqui, estou usando um FreeBSD 8.1-RELEASE, para o mesmo eu apenas recompilei o kernel com as opções acima, fica ao seu critério configurar o FreeBSD, o importante que as opções citadas acima possam estar disponíveis no kernel.
Feito isso, podemos iniciar a configuração do FreeBSD, para agilizar a visualização do mesmo, eu preparei um vídeo com as alterações. Abaixo do vídeo deixei disponível os comandos para que possam ser anotadas com mais facilidade.
Utilizando ZFS, vamos criar o ambiente da Jail
zfs create tank/jails zfs set mountpoint=/usr/jails tank/jails zfs create tank/jails/jail_teste
Se voce executou um “make world” no seu sistema, muito provavelmente você tem os binários disponíveis no diretório “/usr/src”, então, use-o para criar o ambiente da Jail:
cd /usr/src make installworld distribution DESTDIR=/usr/jails/jail_teste
Senão, configure a Jail usando o utilitário sysinstall conforme mostra o vídeo.
Vamos iniciar a Jail e configurar a rede:
mount -t devfs devfs /usr/jails/centreon/dev jail -c vnet host.hostname=jail_test.server path=/usr/jails/jail_teste persist ifconfig bridge0 create ifconfig epair create ifconfig bridge0 addm em0 addm epair0a up # sendo em0 sua interface de rede real ifconfig epair0a up jls JID IP Address Hostname Path 1 - jail_teste.server /usr/jails/jail_teste ifconfig epair0b vnet 1
Agora precisamos entrar na Jail e configura-la:
jexec 1 /bin/csh Configure a loopback: # ifconfig lo0 127.0.0.1/8 up Configure o ip na interface: # ifconfig epair0b 192.168.4.231/24 up # route add default 192.168.4.3 add net default: gateway 192.168.4.3 # echo 'nameserver 8.8.8.8' > /etc/resolv.conf # Teste a conectividade... # ping google.com PING google.com (64.233.163.104): 56 data bytes 64 bytes from 64.233.163.104: icmp_seq=0 ttl=55 time=16.151 ms 64 bytes from 64.233.163.104: icmp_seq=1 ttl=55 time=18.904 ms ^C --- google.com ping statistics --- 2 packets transmitted, 2 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 16.151/17.527/18.904/1.377 ms
É isso… agora basta trabalhar dentro da sua Jail conforme um FreeBSD normal e usando os recursos de rede mais facilmente.
Abraços
Ola,
nao precisa instalar o kernel dentro da jail.
Como deixar no rc.conf para dar boot na configuracao da jail + vnet?
Thiago
>> nao precisa instalar o kernel dentro da jail.
Leia o Link da Wikipedia nas referências
“…porque apenas arquivos e processos estão dentro da Jail, mas o núcleo que está em funcionamento é um só, economizando processamento gerando apenas um uso maior de memória física (RAM) de acordo com os processos iniciados nas jails…”
Ah, e excelente artigo. Trabalho com Red Hat + XEN aqui no trampo, e ando me interessando muito com este conceito de Jail dentro do FreeBSD =D
@Thiago Damas
Pessoal, a instalação do kernel dentro da Jail foi uma necessidade em relação a alguns processos que fazem uso de rede (ex.: sshd) que lêem algumas coisas no kernel, ainda não tive tempo de pesquisar o motivo, mas o mesmo foi solucionado disponibilizando o diretorio /boot/kernel para os mesmos