como você inclui variáveis nos arquivos de configuração do Bind9?

2

Estou tentando criar um script de instalação automática, já que tenho que executar essa tarefa de instalação em vários servidores.

Eu configurei todos os arquivos de configuração do bind9 com minhas variáveis e pensei que teria funcionado se as variáveis fossem configuradas, no entanto, quando o serviço de ligação é iniciado, erros indicam que as variáveis não são reconhecidas.

Por exemplo, um dos erros exibidos em / var / log / syslog:

dns_rdata_fromtext: /etc/bind/db.override:16: near ''$IP'': bad dotted quad

meu arquivo de configuração:

;The Variables here are NIC and IP
; BIND data file for overridden IPs
;
$TTL  86400
@   IN  SOA ns1 root (
            2012100401  ; serial
            604800      ; refresh 1w
            86400       ; retry 1d
            2419200     ; expiry 4w
            86400       ; minimum TTL 1d
            )

; need atleast a nameserver
    IN  NS  ns1
; specify nameserver IP address
ns1 IN  A   $IP                ; external IP from $NIC
; provide IP address for domain itself
@   IN  A   $IP                ; external IP from $NIC
; resolve everything with the same IP address as ns1
*   IN  A   $IP                 ; external IP from $NIC

Eu pesquisei pela Internet e não consigo encontrar uma solução que reflita o que estou tentando fazer aqui. Eu não sou um shell scripting pro e notei bind e outro programa estou implementando variáveis em ambos não parecem processar variáveis quando eles estão incluídos em arquivos de configuração como eu fiz acima.

    
por RCG 24.09.2014 / 02:27

1 resposta

1

Você não pode fazer o que está tentando fazer aqui com arquivos de configuração de vinculação. A variável $IP não pode ser definida como uma variável de ambiente.

Normalmente, o que é feito para uma situação como esta é usar um script ou um mecanismo de modelagem que pode expandir essas variáveis (elas são tecnicamente chamadas de macros, na maior parte do tempo), onde o mecanismo de modelagem expandirá o arquiva enquanto eles estão sendo implantados.

Um com o qual eu estou mais familiarizado é chamado de Cheetah . Ele é usado por um sistema de provisionamento que eu costumava usar para implantar sistemas, chamado Cobbler . Existem muitos desses sistemas, como o Puppet , Chef , cfengine , Sal , etc .

Exemplo de modelo de chita

Aqui está um exemplo muito simples que ilustra algumas das sintaxes básicas da Cheetah.

Fonte: link

  <html>
    <head><title>$title</title></head>
    <body>
      <table>
        #for $client in $clients
        <tr>
          <td>$client.surname, $client.firstname</td>
          <td><a href="mailto:$client.email">$client.email</a></td>
        </tr>
        #end for
      </table>
    </body>
  </html>

Aqui, as macros $client.email , $client.firstname e $title serão expandidas pelo Cheetah com valores reais no tempo de execução. Esses mecanismos são razoavelmente capazes, até mesmo a capacidade de realizar loops, como o $client acima.

Mas se suas necessidades forem escassas, eu montaria um script de shell para expandir essas macros $IP no tempo de implantação. Você pode usar sed ou bash para construir um script que não seria muito difícil de fazer.

Você finalmente estará jogando esse tipo de jogo:

Exemplo

$ IP=1.2.3.4
$ sed -i "s/\$IP/$IP/g" sample.conf 

$ cat sample.conf
;The Variables here are NIC and IP
; BIND data file for overridden IPs
;
$TTL  86400
@   IN  SOA ns1 root (
            2012100401  ; serial
            604800      ; refresh 1w
            86400       ; retry 1d
            2419200     ; expiry 4w
            86400       ; minimum TTL 1d
            )

; need atleast a nameserver
    IN  NS  ns1
; specify nameserver IP address
ns1 IN  A   1.2.3.4                ; external IP from $NIC
; provide IP address for domain itself
@   IN  A   1.2.3.4                ; external IP from $NIC
; resolve everything with the same IP address as ns1
*   IN  A   1.2.3.4                 ; external IP from $NIC
    
por 24.09.2014 / 03:31