고정 ipv6 주소가 있는 동안 ipv4에 대한 바인드 등록을 사용하도록 dhcpd를 구성하는 방법은 무엇입니까?

고정 ipv6 주소가 있는 동안 ipv4에 대한 바인드 등록을 사용하도록 dhcpd를 구성하는 방법은 무엇입니까?

다음과 같은 방법으로 로컬 네트워크에서 IPv6를 구성했습니다 radvd. 라우팅 가능한 IPv6 블록을 알리고 모든 컴퓨터가 자동으로 블록을 구성합니다.

dhcpd를 통해 NAT 블록에 IPv4를 할당하고 이름을 업데이트했습니다.

내 문제는 호스트의 IPv6 주소(변경되지 않음)에 대해 AAAA 레코드를 설정할 때 dhcpd의 A 레코드에 대한 이름 업데이트를 거부하기 시작한다는 것입니다.

이름 지정 시 다음 오류가 보고됩니다.

'name not in use' prerequisite not satisfied (YXDOMAIN)

dhcpd는 다음 오류를 보고합니다:

Has an A record but no DHCID, not mine

AAAA지정된 업데이트를 수행할 때 dhcpd가 이 기록을 무시하도록 어떻게 설득할 수 있습니까 ?

답변1

다음 행을 추가하십시오 /etc/dhcp/dhcpd.conf.

update-conflict-detection false;

답변2

여기서 답을 찾았어요http://www.gelato.unsw.edu.au/IA64wiki/IPv6DDNS

기본적으로 dhcpd에는 이벤트에 대한 후크를 추가하는 방법이 있으므로 IPv4 등록 시 표준 MAC 기반 IPv6 주소를 생성하고 등록하는 스크립트를 호출합니다.

고쳐 쓰다: (저는 ICH DHCP 4.1을 사용하고 있습니다)

"커밋 시" 후크를 사용하면 기존 동적 업데이트가 삭제되므로 이를 "커밋 시" 섹션에 복사해야 합니다. 이제 내 모습은 다음과 같습니다.

on commit {
    if (not static) {
        # Setup IPv6 Address
        set new-ddns-fwd-name = pick-first-value(ddns-hostname, host-decl-name);
        if (exists host-name and option host-name ~~ "^[a-z0-9.-]+$") {
                set new-ddns-fwd-name = option host-name;
        } elsif (exists dhcp-client-identifier and option dhcp-client-identifier ~~ "^[a-z0-9.-]+$") {
                set new-ddns-fwd-name = substring(option dhcp-client-identifier, 1, 50);
        } elsif (new-ddns-fwd-name = "") {
                set new-ddns-fwd-name = binary-to-ascii (16, 8, "-",
                                 substring (hardware, 1, 6));
        }
        set ddns-fwd-name = new-ddns-fwd-name;
        execute ("/opt/bin/ddns-ipv6", ddns-fwd-name, ucase(
                binary-to-ascii(16, 8, ":", substring(hardware, 1, 6))),
                binary-to-ascii(10, 8, ".", leased-address));
        unset new-ddns-fwd-name;

        switch (ns-update (not exists (IN, A, ddns-fwd-name, null),
                           add (IN, A, ddns-fwd-name, leased-address,
                                lease-time / 2))) {
        default:
            unset ddns-fwd-name;
            break;

        case NOERROR:
            set ddns-rev-name =
                concat (binary-to-ascii (10, 8, ".", reverse (1, leased-address)), ".", 
                        pick (config-option server.ddns-rev-domainname,
                              "in-addr.arpa."));

            switch (ns-update (delete (IN, PTR, ddns-rev-name, null),
                               add (IN, PTR, ddns-rev-name, ddns-fwd-name, lease-time / 2)))
            {
            default:
                unset ddns-rev-name;
                on release or expiry {
                    execute ("/opt/bin/ddns-ipv6", "-d",  pick-first-value(ddns-hostname, host-decl-name));
                    switch (ns-update (delete (IN, A, ddns-fwd-name,
                                           leased-address))) {
                    case NOERROR:
                       unset ddns-fwd-name;
                       break;
                    }
                    on release or expiry;
                }
                break;

            case NOERROR:
                on release or expiry {
                    execute ("/opt/bin/ddns-ipv6", "-d",  pick-first-value(ddns-hostname, host-decl-name));
                    switch (ns-update (delete (IN, PTR, ddns-rev-name, null))) {
                    case NOERROR:
                        unset ddns-rev-name;
                        break;
                    }
                    switch (ns-update (delete (IN, A, ddns-fwd-name,
                                           leased-address))) {
                    case NOERROR:
                        unset ddns-fwd-name;
                        break;
                    }
                    on release or expiry;
                }
            }
            break;
        }
   }
}

관련 정보