はい、できます。DNS でこれを実現するには、主に 2 つの方法があります (「BIND」構成の例を使用します)。
- DNAME (委任名) レコードの使用
- BIND 構成でのゾーン ファイルのオーバーロード
最初のオプションは、それがどこで発生し、どのように設定されたかの痕跡を残します。2 番目のオプションは実装が最も簡単ですが、慎重な計画が必要であり、ゾーンの使用に制限を課します。
DNAME メソッド
「bad.com」内のすべてのホストを「good.com」に移動させたいとしましょう。最初に「named.conf」でゾーンを設定します。
// Malicious external domain, redirected to "good.com"
zone "bad.com" in {
type master;
file "security/good.com";
check-names ignore;
};
「good.com」のゾーン ファイル(リダイレクト先のゾーンであることを思い出してください)は次のようになります。
; Name: security/good.com
; Date: 2/19/2016
; Purpose: General-use redirection to "good.com" using DNAME
$TTL 3600
@ IN SOA dns.good.com. admin.dns.com. (
2016021900
7200
600
2592000
3600 )
IN NS dns1.good.com.
IN NS dns2.good.com.
IN DNAME good.com.
ネーム サーバーをリロードすると、「bad.com」ゾーンの DNS クエリはすべて「good.com」に委任されます。
> nslookup www.bad.com
Server: dns1.good.com
Address: 10.9.8.7#53
bad.com dname = good.com.
www.bad.com canonical name = www.good.com.
Name: www.good.com
Address: 10.1.2.3
SOA、NS、および DNAME レコードを囲む単一の「@」を使用して、ゾーン ファイルのデフォルトの動作を意図的に使用しました。リダイレクトしたいかもしれません:
// Malicious external domain, redirected to "good.com"
zone "bad.com" in {
type master;
file "security/good.com";
check-names ignore;
};
// Another malicious external domain, redirected to "good.com"
zone "worse.com" in {
type master;
file "security/good.com";
check-names ignore;
};
// Yet another malicious external domain, redirected to "good.com"
zone "evil.com" in {
type master;
file "security/good.com";
check-names ignore;
};
あなたはアイデアを得る...
DNAME 委任がクエリ結果にどのように表示されるかに注意してください。これが気に入らない人もいるかもしれませんが、これは 2 番目の方法で解決できます。
ゾーン ファイルのオーバーロード方法
実際には、これについてはすでに上で説明しました。私たちが行っているのは、デフォルトのレコードでゾーン ファイルを再利用することだけであり、ゾーン名を明示的に参照することはありません。この例では、「ディレクトリ」オプションを使用しますが、すべてのゾーン ファイルを「ゾーン」というフォルダーに配置し、ファイル名にゾーン名と同じ名前を付けます(「db.xxxx」は好きではありません)。
$TTL 14400
@ IN SOA dns.good.com. admin.good.com. (
2016021900 ; Serial No.
1800 ; Refresh
600 ; Retry
604800 ; Expire
3600 ) ; Minimum
IN NS dns1
IN NS dns2
IN MX 10 mail
IN A 10.11.12.13
; A records
dns1 IN A 10.9.8.7
dns2 IN A 10.9.8.6
mail IN A 10.9.8.5
files IN A 10.9.8.4
; CNAME records
www IN CNAME @
ftp IN CNAME files
「named.conf」ファイルの要素は次のとおりです。
zone "good.com" in {
type master;
file "zones/good.com";
check-names ignore;
notify yes;
};
ここで、ドメイン「goodness.com」を本質的に「good.com」にしたいとします。「named.conf」で「good.com」ファイルを再利用するだけですが、オーバーロードされたゾーン名を指定します。
zone "goodness.com" in {
type master;
file "zones/good.com";
check-names ignore;
notify yes;
};
「goodness.com」のレコードをクエリすると、「good.com」ゾーンのレコードになります。
> nslookup files.good.com
Server: dns1.good.com
Address: 10.9.8.7#53
Name: files.good.com
Address: 10.9.8.4
> nslookup files.goodness.com
Server: dns1.good.com
Address: 10.9.8.7#53
Name: files.goodness.com
Address: 10.9.8.4
上記のように、ゾーン ファイル内のゾーン名を明示的に参照してはならず、代わりに "@" デフォルトの参照を使用し、ゾーン内の A レコードを参照する CNAME レコードのターゲットとして完全修飾ドメイン名を使用しないでください。
この方法の欠点は、"$ORIGIN" ディレクティブの使用に十分注意する必要があり、"$GENERATE" ディレクティブの使用が非常に困難になることです。さらに、サーバーに関する限り、これらは別個のゾーンであるため、権限のあるサーバーの 2 倍のメモリを占有します。
とにかく、これは DNS を使用してあるゾーンのレコードを別のゾーンにリダイレクトする 2 つの方法を示しているはずです。