次の方法でローカルネットワークで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;
}
}
}