isc-dhcp option82

1

Eu tenho uma pergunta sobre a configuração correta do isc-dhcp. Eu quero conceder endereços IP aos usuários com base na porta do switch. Para isso eu uso os switches da série DLink DES-3200. Tudo funciona bem, mas recentemente decidi alugar uma sub-rede específica para todos os usuários desconhecidos, ou seja, não especificados explicitamente no arquivo dhcpd.conf. Aqui está um exemplo de configuração:     # dhcpd.conf

default-lease-time 30;
max-lease-time 60;
authoritative;
log-facility local7;
option domain-name-servers 8.8.8.8;

include "/usr/local/etc/dhcpd/dhcpd.classes";

shared-network "clients"
{
    subnet 10.5.20.0 netmask 255.255.255.0 {}
    include "/usr/local/etc/dhcpd/dhcpd.networks";
}

dhcpd.classes

class "10.5.20.4_2" { match if ( substring(option agent.remote-id,2,15)="10.5.20.4" and binary-to-ascii(10, 16, "",  substring(option agent.circuit-id, 4, 2)) = "2" ); }
class "10.5.20.4_1" { match if ( substring(option agent.remote-id,2,15)="10.5.20.4" and binary-to-ascii(10, 16, "",  substring(option agent.circuit-id, 4, 2)) = "1" ); }
class "10.5.20.2_1" { match if ( substring(option agent.remote-id,2,15)="10.5.20.2" and     binary-to-ascii(10, 16, "",  substring(option agent.circuit-id, 4, 2)) = "1" ); }
class "10.5.20.2_3" { match if ( substring(option agent.remote-id,2,15)="10.5.20.2" and binary-to-ascii(10, 16, "",  substring(option agent.circuit-id, 4, 2)) = "3" ); }
class "10.5.20.2_2" { match if ( substring(option agent.remote-id,2,15)="10.5.20.2" and binary-to-ascii(10, 16, "",  substring(option agent.circuit-id, 4, 2)) = "2" ); }
class "10.5.20.2_4" { match if ( substring(option agent.remote-id,2,15)="10.5.20.2" and binary-to-ascii(10, 16, "",  substring(option agent.circuit-id, 4, 2)) = "4" ); }

dhcpd.networks

subnet 172.30.20.0 netmask 255.255.255.0
{
   option subnet-mask 255.255.255.0;
   option routers 172.30.20.1;
    pool {range 172.30.20.3; allow members of "10.5.20.4_2"; }
    pool {range 172.30.20.2; allow members of "10.5.20.4_1"; }
}
subnet 172.30.160.0 netmask 255.255.255.0
{
   option subnet-mask 255.255.255.0;
   option routers 172.30.160.1;
    pool {range 172.30.160.3; allow members of "10.5.20.2_1"; }
    pool {range 172.30.160.4; allow members of "10.5.20.2_3"; }
    pool {range 172.30.160.10; allow members of "10.5.20.2_2"; }
    pool {range 172.30.160.12; allow members of "10.5.20.2_4"; }
}

Então, se adicionar adicionar, digamos:

subnet 172.20.111.0  netmask 255.255.255.0 {
                        option routers 172.20.111.1;
                        max-lease-time 60;
                        min-lease-time 30;
                        range 172.20.111.10  172.20.111.20 ;
                        }

no final do arquivo dhcpd.networks (que eu incluo na cláusula 'clients' de rede compartilhada, veja acima), todos os meus clientes começam a obter endereços IP a partir do intervalo 172.20.111.0, independentemente de terem uma classe especificada para seus porta.

Existe uma maneira de fazer o servidor dhcpd primeiro olhar as declarações de classe e, em seguida, a sub-rede?

    
por Alec T 29.05.2012 / 12:13

3 respostas

1

Depois de ler man dhcpd.conf e brincar por aí, consegui atingir meu objetivo fazendo as seguintes alterações em meu arquivo dhcpd.networks:

subnet 172.20.111.0  netmask 255.255.255.0 {
    pool {
        option routers 172.20.111.1;
        max-lease-time 60;
        min-lease-time 30;
        range 172.20.111.10  172.20.111.20 ;
        deny members of "10.5.20.4_1";
        deny members of "10.5.20.4_2";
        deny members of "10.5.20.2_1";
        #  .... etc
}

}

Agora funciona do jeito que eu quero, embora não tenha certeza se vai escalar bem.

    
por 01.06.2012 / 14:08
1

Você escreve que adicionou a nova sub-rede no final do arquivo dhcpd.conf. Você precisa adicioná-lo ao shared-network , caso contrário o dhcpd não considerará essas redes como alternativas.

    
por 29.05.2012 / 15:40
1

Apenas uma adição a esse antigo, mas ainda válido, encadeamento. Ele simplifica a seção da sub-rede, mas adiciona uma linha por IP fixo.

class "FastIP"{
      match pick-first-value (option agent.circuit-id);
}

class como antes:

class "IP-10.1.2.3" {
       match if option agent.circuit-id = "YourOp82Value";
}

Adicione isto para cada valor de Op82 para excluir o cliente IP fixo do pool livre: subclasse "FixedIP" "YourOp82Value";

Na sub-rede:

deny members of "FixedIP";
pool { 
        allow members of "IP-10.1.2.3" ; 
        range 10.1.2.3 10.1.2.3;
}

Dessa forma, você não precisa aglomerar a seção da sub-rede com muitas linhas de negação. Um fará.

    
por 15.10.2014 / 11:17

Tags