導入
このブログのキャッチコピーは「未来の自分のための技術メモ、時々あなたのためのヒント。」ですが、今回はネットワーク管理の現場で非常に役立つ、少し高度な「ヒント」です。
自社のWebサーバーを運用していると、こんな課題に直面したことはありませんか?
「社内のPCから自社サイトにアクセスすると、わざわざインターネットを経由するので遅い。でも、社外の人はもちろんインターネット経由で見れなければ困る…」
同じドメイン名(例: my-company.com
)なのに、アクセスする場所によって、案内するサーバーの住所(IPアドレス)を変えたい。そんな願いを叶えてくれるのが、DNSの 「スプリットDNS(Split-Horizon DNS)」という技術です。
この記事では、DNSサーバーの定番ソフト「BIND」を使って、この賢い仕組みを構築する方法を解説します。
スプリットDNSとは? 二つの顔を持つDNSサーバー
スプリットDNSは、DNSサーバーが問い合わせてきた相手のIPアドレスを見て、「内(社内)の人」か「外(社外)の人」かを見分け、それぞれに別の案内をする仕組みです。
- 社内の人からの問い合わせ:「server.my-company.comはどこ?」→「192.168.1.10ですよ」(社内用のプライベートIP)
- 社外の人からの問い合わせ:「server.my-company.comはどこ?」→「203.0.113.10ですよ」(公開用のグローバルIP)
これにより、社内トラフィックを効率化しつつ、外部へのサービス提供も両立できる、非常に「機能的」なネットワークが実現できます。
構築の核となる「view」機能
この仕組みを実現するのが、BINDの設定ファイルnamed.conf
にある**view
**という機能です。view
を使うと、「内部向けの設定」と「外部向けの設定」を完全に分離して記述できます。
named.confの編集例
// ... (options設定などは省略) ...
#-- 内部向けビュー
view "internal" {
# この設定が適用される相手を指定します (例: 社内ネットワーク)
match-clients { 192.168.1.0/24; localhost; };
# 内部向けの案内図(ゾーンファイル)を指定します
zone "my-company.com" {
type master;
file "my-company.db.internal";
};
};
#-- 外部向けビュー
view "external" {
# 上記以外、すべての人に適用されます
match-clients { any; };
# 外部向けの案内図(ゾーンファイル)を指定します
zone "my-company.com" {
type master;
file "my-company.db.external";
};
};
2種類の「案内図(ゾーンファイル)」を用意する
次に、view
で指定した2種類の案内図(ゾーンファイル)を作成します。ここで案内するIPアドレスが変わります。
内部向けの案内図 (my-company.db.internal)
こちらには、サーバーのプライベートIPアドレスを記述します。
; ... (SOAレコードなど共通設定は省略) ...
@ IN A 192.168.1.10 ; my-company.com
server IN A 192.168.1.10 ; server.my-company.com
外部向けの案内図 (my-company.db.external)
こちらには、サーバーのグローバルIPアドレスを記述します。
; ... (SOAレコードなど共通設定は省略) ...
@ IN A 203.0.113.10 ; my-company.com
server IN A 203.0.113.10 ; server.my-company.com
まとめ
今回は、BINDのview
機能を使って、内部向けと外部向けで応答を変えるスプリットDNSの構築方法をご紹介しました。
少し設定が複雑に見えるかもしれませんが、ネットワークのセキュリティとパフォーマンスを両立させる上で非常に強力なテクニックです。特に、社内システムと公開サーバーが混在するような環境では、この考え方が大いに役立ちます。
この記事が、あなたのネットワーク設計の「ヒント」になれば幸いです。
コメント