다음과 같은 방법으로 로컬 네트워크에서 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;
}
}
}