【ネットワーク入門】BINDのview機能で作る、賢い「内向き/外向きDNSサーバー」

サーバー構築

導入

このブログのキャッチコピーは「未来の自分のための技術メモ、時々あなたのためのヒント。」ですが、今回はネットワーク管理の現場で非常に役立つ、少し高度な「ヒント」です。

自社の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の構築方法をご紹介しました。

少し設定が複雑に見えるかもしれませんが、ネットワークのセキュリティとパフォーマンスを両立させる上で非常に強力なテクニックです。特に、社内システムと公開サーバーが混在するような環境では、この考え方が大いに役立ちます。

この記事が、あなたのネットワーク設計の「ヒント」になれば幸いです。

コメント

タイトルとURLをコピーしました