quinta-feira, 18 de dezembro de 2008

Configurando um servidor DHCP

O servidor DHCP é o primeiro a ser acessado pela estação. Ela "acorda" sem saber quem é, e o DHCP responde entregando as configurações da rede e dizendo qual Kernel ou cliente PXE a estação deve carregar e em qual compartilhamento de rede (no servidor) onde está o sistema a ser carregado por ela. Antes de mais nada, verifique se o pacote "dhcp3-server" está instalado:

# apt-get install dhcp3-server

Em seguida, vamos à configuração do arquivo "/etc/dhcp3/dhcpd.conf", onde vai a configuração do servidor DHCP.

A configuração do DHCP para o LTSP é mais complexa do a que vimos no capítulo sobre compartilhamento da conexão, por isso é importante prestar atenção. O arquivo é dividido em duas sessões, a primeira é a "shared-network WORKSTATIONS", onde vão as configurações gerais do servidor, enquanto a sessão "group" contém a configuração de cada estação.

O arquivo possui uma formatação bastante estrita, onde cada linha de configuração deve terminar com um ";" e cada sessão começa com um "{" e termina com um "}". Se o servidor DHCP se recusa a iniciar com o comando "/etc/init.d/dhcp3-server restart", reportando um erro no arquivo de configuração, provavelmente você esqueceu algum ponto e vírgula ou esqueceu de fechar alguma sessão. Como em outros arquivos, você pode usar tabs, espaços e quebras de linha para organizar o arquivo da forma que achar melhor.

shared-network WORKSTATIONS {}

subnet 192.168.0.0 netmask 255.255.255.0 {

default-lease-time 21600;
max-lease-time 21600;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name-servers 192.168.0.1;

deny unknown-clients;
# range 192.168.0.100 192.168.0.201;

option root-path "192.168.0.10:/opt/ltsp/i386";
next-server 192.168.0.10;

}

}

group {

use-host-decl-names on;

# terminal 1:
host ws001 {
hardware ethernet 00:E0:7D:B2:E5:83;
fixed-address 192.168.0.11;
filename "lts/2.6.17.3-ltsp-1/pxelinux.0";
}

# terminal 2:
host ws002 {
hardware ethernet 00:D0:09:A2:9B:8D;
fixed-address 192.168.0.12;
filename "lts/2.6.17.3-ltsp-1/pxelinux.0";
}


Na primeira parte do arquivo, você deve fornecer as configurações da rede, como a máscara de sub-rede, o endereço do default gateway e o DNS do provedor. O default dos arquivos de configuração que criei é usar a faixa de IP's 192.168.0.x, onde o servidor de terminais é configurado para usar o endereço 192.168.0.10.

Se você preferir usar esses endereços, seu trabalho será bem menor. Caso contrário, preste atenção para substituir todas as referências ao servidor (192.168.0.10) pelo endereço IP correto, modificando também os endereços dos terminais (192.168.0.11 a 192.168.0.18) por endereços dentro da mesma faixa de endereços usada pelo servidor.

Logo abaixo vem a opção onde você deve fornecer o endereço IP usado pelo servidor LTSP. Ela diz que o cliente deve usar a pasta "/opt/ltsp/i386" do servidor "192.168.0.10" como diretório raiz.

Note que o "/opt/ltsp/i386" representa a pasta de instalação do LTSP, que é montada pelos clientes como diretório-raiz durante o boot. Não se esqueça de verificar e alterar esta configuração se tiver instalado o LTSP em outra pasta ou estiver utilizando outro endereço IP no servidor.

A opção "deny unknown-clients" faz com que o servidor DHCP aceite apenas os clientes do terminal server, sem conflitar com um servidor DHCP já existente. Caso prefira que o servidor DHCP atribua endereços também para os demais micros da rede (que não estão cadastrados como terminais), comente a linha "deny unknown-clients" e descomente a linha abaixo, informando a faixa de endereços que será usada pelos clientes que não estejam cadastrados como terminais. Você pode usar os endereços de .11 a .50 para os terminais e de .100 a .200 para os demais micros, por exemplo.

range 192.168.0.100 192.168.0.201;

Lembre-se que a linha "range" conflita com a "deny unknown-clients", você deve sempre usar uma ou outra, nunca ambas ao mesmo tempo.


A seguir vem a configuração dos terminais, onde você deve fornecer o endereço MAC de cada um. O "fixed-address 192.168.0.11;" é o endereço IP que o servidor DHCP dará para cada terminal, vinculado ao endereço MAC da placa de rede e o arquivo que ele carregará durante o boot, como em:

host ws001 {
hardware ethernet 00:E0:7D:B2:E5:83;
fixed-address 192.168.0.11;
filename "lts/2.6.17.3-ltsp-1/pxelinux.0";
}

Esta configuração pode ser repetida ad-infinitum, uma vez para cada terminal que adicionar, mudando apenas o nome do terminal (ws001), o MAC da placa e o IP que será usado por ele.

O cliente PXE é capaz de carregar apenas arquivos pequenos, de no máximo 32k. Por isso, antes de carregar o Kernel é necessário carregar um bootstrap, o arquivo pxelinux.0, que se responsabiliza por obter a configuração via DHCP e carregar o Kernel, dando início ao boot.

Os arquivos de boot são instalados por padrão dentro da pasta "/tftpboot". Você verá uma pasta separada para cada Kernel disponível, como em: "2.6.17.3-ltsp-1".

A pasta contém um conjunto completo, como respectivo Kernel, um arquivo initrd, o arquivo pxelinux.0 e um arquivo de configuração para ele, o "pxelinux.cfg/default". Esse arquivo contém instruções que serão executadas pela estação ao carregar o arquivo pxelinux.0, incluindo a localização do Kernel e do arquivo initrd correspondente.

No LTSP 4.1 estavam disponíveis dois Kernels diferentes, um da série 2.4 (mais leve) e outro da série 2.6. No LTSP 4.2 voltou a ser usado um único Kernel unificado (o 2.6.17.3-ltsp-1), que, além de mais atualizado, é extremamente otimizado, a ponto de consumir menos memória que o Kernel da série 2.4 usado pelo LTSP 4.1.

Note que a versão do Kernel usada e conseqüentemente o nome da pasta mudam a cada versão do LTSP. Lembre-se de sempre verificar a versão incluída na sua instalação e alterar a configuração de forma apropriada.


Esta configuração para clientes PXE funciona também para clientes que dão boot usando os discos do Etherboot. Isso permite que você unifique a configuração dos clientes, facilitando as coisas.

Em versões antigas do LTSP era necessário trabalhar com dois tipos de configuração diferentes, uma para os clientes PXE e outra para os clientes Etherboot. Como disse, isso não é mais necessário nas versões atuais, mas, apenas a título de desencargo, aqui vai um exemplo da configuração para clientes Etherboot:

host ws005 {
hardware ethernet 00:E0:7D:AB:E3:11;
fixed-address 192.168.0.15;
filename "lts/vmlinuz-2.6.17.3-ltsp-1";
}

Veja que a mudança é o arquivo de Kernel que será carregado. Ao invés de carregar o bootstrap pxelinux.0, a estação passa a carregar o Kernel diretamente.


Depois de configurar o arquivo, reinicie o servidor DHCP:

# /etc/init.d/dhcp3-server restart

Dê boot em algum dos clientes para testar. Com o DHCP funcionando, eles devem receber a configuração da rede e parar no ponto em que tentam carregar a imagem de boot via TFTP:



Se houver algum erro com o DHCP, revise a configuração antes de continuar. Não deixe que os erros se acumulem, caso contrário você vai acabar perdendo bem mais tempo.

Uma observação importante relacionada à configuração da rede: nunca use um alias (criado através do comando ifconfig eth0:1) para criar o endereço IP indicado nos arquivos de configuração do LTSP. Por exemplo, se nos arquivos o endereço IP do servidor é "192.168.0.10", é preciso que este seja o endereço IP real da placa de rede, seja a eth0 ou eth1. Se precisar criar uma segunda placa de rede virtual (para acessar a internet, por exemplo), configure a placa de rede principal para usar o endereço IP indicado nos arquivos de configuração e use o alias para criar o outro endereço. Nesse caso, a eth0 (para os clientes LTSP) ficaria com o IP "192.168.0.10" e a eth0:1 (para o resto da rede) ficaria com, por exemplo, "10.0.0.1".


Espero que tenha gostado. :-)