Bind9 구성 파일에 변수를 포함하는 방법은 무엇입니까?

Bind9 구성 파일에 변수를 포함하는 방법은 무엇입니까?

여러 서버에서 이 설치 작업을 수행해야 하므로 자동 설치 스크립트를 만들려고 합니다.

내 변수를 사용하여 모든 바인드9 구성 파일을 설정했으며 변수가 설정되면 작동할 것이라고 생각했지만 바인드 서비스가 시작되면 변수가 인식되지 않는다는 오류가 발생합니다.

예를 들어 /var/log/syslog에 표시된 오류 중 하나는 다음과 같습니다.

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

내 구성 파일:

;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

온라인으로 검색했지만 여기서 하려는 작업을 반영하는 솔루션을 찾을 수 없습니다. 저는 쉘 스크립팅 전문가가 아니며 바인딩과 다른 프로그램이 둘 다에 변수를 구현하고 있다는 것을 알았습니다. 위에서 했던 것처럼 구성 파일에 변수가 포함될 때 변수를 처리할 수 없는 것 같습니다.

답변1

바인딩 프로필을 사용하면 여기에서 하려는 작업을 수행할 수 없습니다. 이 변수는 $IP환경 변수로 설정할 수 없습니다.

일반적으로 이 경우 스크립트나 템플릿 엔진을 사용하여 이러한 변수를 확장합니다(기술적으로는 매크로라고 부르는 경우가 많습니다). 여기서 템플릿 엔진은 배포되는 동안 파일을 확장합니다.

나에게 더 친숙한 이름은치타. 이는 시스템을 배포하는 데 사용하는 구성 시스템에서 사용됩니다.구두 수선공. 등의 시스템이 많이 있습니다.인형,요리사,CF 엔진,소금, 등.

치타 템플릿 예

이것은 Cheetah의 몇 가지 기본 구문을 보여주는 매우 간단한 예입니다.

원천:http://www.cheetahtemplate.org/examples.html

  <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>

매크로 $client.email, $client.firstname, 및 매크로 $title는 런타임 시 실제 값으로 Cheetah에 의해 확장됩니다. 이러한 엔진은 매우 강력하며 위와 같은 for 루프를 수행할 수도 있습니다 $client.

$IP그러나 요구 사항이 최소화된 경우 배포 시 이러한 매크로를 확장하기 위해 쉘 스크립트를 함께 사용할 것입니다 . 작성하기가 그리 어렵지 않은 스크립트를 사용 sed하거나 작성할 수 있습니다 .bash

결국 다음과 같은 유형의 게임을 플레이하게 됩니다.

$ 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

관련 정보