メニュー 閉じる

DNS サーバーを設定する話

DNS サーバーを設置して名前解決をしたい。

ローカル接続同士の名前解決を、現在hostsに書き込んで対応してますが、
めんどくさいので、DNS サーバーを立てて名前解決をしたい。

WindowsServerでも出来そうな雰囲気ですが、Active Directroyと統合する・・・みたいなことを聞いてくる。
ひとまず分けて使用したい。統合はいろいろとわきまえてからというのが良いかなと思います。

どちらにせよ、まずは基本的にDNSだけ欲しいっス。ってことでCentOSを使っていきたいと思います。

調べたところ、CentOSのDNSは「BIND」というサービスの様です。etcフォルダ内にNamedってフォルダがあってそれが本体。
ひと昔前はこのNamedフォルダから起動していた様ですが、最近はBIND-chroot(※)するのがセキュリティの観点から良いそうです。

※BIND-chroot:ルートフォルダを変更することで、侵入されても被害を最小限に食い止めるというセキュリティ対策。

このサイトが分かり安いと思いました。

bind-chrootでDNSサーバ構築時にハマりやすいポイント

https://mseeeen.msen.jp/bind-chroot-important-point/

やり方としては、etc/ named.conf の設定をしてから、var/named/my.net.zone ファイルを設定し、BIND-chrootを起動したら良さそうな雰囲気。

BIND 9のセキュリティ対策 (1/2)

https://www.atmarkit.co.jp/ait/articles/0309/09/news001.html

いやち、そんな単純ではないな。なんか結構大変そうだ。というか理解できん。
…普通にやろう。ローカルだし。初心者は基本からやるべきだ。うん。

というわけで、ローカル環境向けにBIND-chroot はなしでDNS サーバーを設定してみます。

導入の流れ

  1. bind のインストール
  2. named.confの設定
  3. ゾーンファイルの設定
  4. ファイアウォールoff
  5. 起動

BINDのインストール

BIND = Named

CentOSインストール時に「DNSサーバ」にチェック入れてあるので導入済みです。namedフォルダや、named.confが既にある状態。

「named.conf」の設定

// named.conf

// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS

// server as a caching only nameserver (as a localhost DNS resolver only).

この「resolver」とは名前解決をするサーバーの事らしい。各ドメインに問い合わせて自分で名前解決出来るのは「フルサービス・リゾルバ」、問い合わせだけするのは「スタブ・リゾルバ」。

// See /usr/share/doc/bind*/sample/ for example named configuration files.

サンプルとして、一式「bind」関連のファイルが入ってました。ただし、わかりやすいとは言い難いかな。

後日追記: 大変有り難い資料でした。ゾーンファイルを作成する時に、改行や空白の問題(と思われます)でエラーが止まらず、結局このサンプルをベースに作成する事で上手く出来ました。

// See the BIND Administrator’s Reference Manual (ARM) for details about the

// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

私みたいなのは、そうでしょうね。ごもっともです。

options {

  listen-on port 53 { 127.0.0.1; };

ここに自分のネットワークのIPアドレスを入れておけば良い気がする。

  listen-on-v6 port 53 { ::1; };

IP6だから無視。コメントアウトしても良いと思う。

  directory      “/var/named”;

 dump-file      “/var/named/data/cache_dump.db”;

  statistics-file “/var/named/data/named_stats.txt”;

  memstatistics-file “/var/named/data/named_mem_stats.txt”;

  recursing-file  “/var/named/data/named.recursing”;

  secroots-file   “/var/named/data/named.secroots”;

  allow-query     { localhost; };

問い合わせを許可する種類のくだりと思われる。気になるけど、ローカルで使うだけならこのままで良い気がする。

後日追記: localnets を入れないと、自分自身しか見えない様子です。

    /*

 – If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.

リゾルーションしない設定に出来るんですね。

  – If you are building a RECURSIVE (caching) DNS server, you need to enable    recursion.

 – If your recursive DNS server has a public IP address, you MUST enable access  control to limit queries to your legitimate users. Failing to do so will  cause your server to become part of large scale DNS amplification  attacks. Implementing BCP38 within your network would greatly   reduce such attack surface

以下、Google翻訳。とても綺麗に訳せてる…

– 再帰DNSサーバーにパブリックIPアドレスがある場合は、アクセス制御を有効にしてクエリを正規のユーザーに制限する必要があります。これを怠ると、サーバーが大規模なDNS増幅攻撃の一部になる可能性があります。ネットワーク内にBCP38を実装すると、このような攻撃対象を大幅に削減できます。

  */

  recursion yes;

ここはしない設定にする。→no

  dnssec-enable yes;

  dnssec-validation yes;

/* Path to ISC DLV key */

bindkeys-file “/etc/named.iscdlv.key”;

managed-keys-directory “/var/named/dynamic”;

pid-file “/run/named/named.pid”;

session-keyfile “/run/named/session.key”;

};

logging {

        channel default_debug {

                file “data/named.run”;

                severity dynamic;

        };

};

zone “.” IN {

              type hint;

「type」はどうすれば?

              file “named.ca”;

このファイル内でIPと端末名をマッピングすると思われる。拡張子の種類がいくつかある。

「/etcディレクトリ下」
named.conf : 基本設定ファイル。ほかの設定ファイルの場所はこのファイルで指定。
「/var/namedディレクトリ下 」
named.ca : キャッシュ用
example.zone : 正引き用ゾーンファイル
example.rev : 逆引き用ゾーンファイル
local.zone :「ループバック」と呼ばれる、ホスト自身内で通信を行うための特殊なアドレスのための正引き用
local.rev : ループバックの逆引き用
「/var/run/namedディレクトリ」
named.pid : プロセスID(PID)を記録するファイル

「すべての基礎、マスター・ゾーンサーバの設定」
https://www.atmarkit.co.jp/ait/articles/0301/25/news004.html

追加するのは、.zoneと、問題があれば .rev。

参考にしている下記のサイトはマスターの記述のみ。正引きゾーンファイルだけ?

named.conf
+zone “my.net” IN {
+ type master;
+ file “my.net.zone”;
+};

「CentOS 7: bindをインストールして内部ネットワーク向けにDNSサーバを立ち上げる」
https://www.hiroom2.com/

とりあえずcacheサーバはコメントアウトで、マスター/正引きのゾーンファイルを配置する。

};

include “/etc/named.rfc1912.zones”;

include “/etc/named.root.key”;

この辺りはどのサイトもさわってない感じ。
インクルードだから、さわるなら読み込み先か。
このままで良いよね。

とりあえず、こんな感じになりました。

//
// named.conf
//

options {
     listen-on port 53 { 
             127.0.0.1; 
             192.168.56.0/24; 
            };
 directory   "/var/named";

 dump-file  "/var/named/data/cache_dump.db";

 statistics-file "/var/named/data/named_stats.txt";

 memstatistics-file "/var/named/data/named_mem_stats.txt";

 recursing-file  "/var/named/data/named.recursing";

 secroots-file "/var/named/data/named.secroots";

 allow-query { 
      localhost; localnets;
     };

 recursion no; 

 dnssec-enable yes; 

 dnssec-validation yes; 

/* Path to ISC DLV key */ 
 bindkeys-file "/etc/named.iscdlv.key"; 

 managed-keys-directory "/var/named/dynamic"; 

 pid-file "/run/named/named.pid"; 

 session-keyfile "/run/named/session.key";

};

logging {
         channel default_debug {
                 file "data/named.run";
                 severity dynamic;
               };
        };

/*
zone "." IN {
     type hint;
     file "named.ca";
 };
*/
 
zone "linux-server.net" IN {
     type master;
     file "named.linuxserver.zone";
 };
 
zone "testmail.com" IN {
     type master;
     file "named.testmail.zone";
 };

 zone "co.jp" IN {
     type master;
     file "named.cojp.zone";
 }; 

 include "/etc/named.rfc1912.zones";
 include "/etc/named.root.key";

ゾーンファイル

$TTL 1D

キャッシュする時間の指定。


@ IN SOA @ rname.invalid. (

最初の@は固定。SOA に続く「@」はDNSサーバ名が入る。自分自身がDNSサーバーなら@で可。「rname.invalid.」は、管理者のメールアドレスを書くとの事。「rname.」は「rname@」。最後の「.」はフルネームで書いても必要との事(誤植じゃなくて)。フォレストだからとの事。

0 ; serial

ここのシリアル値で設定に変更があったが否かを判断している。内容を変更したら、ここの番号も更新する。

1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum

この辺りのパラメータこのままで良いと思われ。

NS @

NS はDNSサーバーを示す。ここの表記が実際に読み込まれるらしい。
自身がDNSの場合は「@」で良さそう。

MX IN mail

メールサーバーがあるドメインならMX レコードをここに。ちなみに「mail. ~」ってサービスを指しているんですよね。(って理解するとスッキリするから。)

A 127.0.0.1
AAAA ::1

最後に DNS サーバーのAレコードを書く。AAAA は削除した。

pc1          IN      A      192.168. *. *

ここで、端末名とIP を紐付け。ここでDNSサーバーのAレコードを書いても良さそうです。メールサーバーが別マシンの場合はここでAレコードを記述すると思われます。

ドメインのDNSサーバ名を指定する

https://sample.atmarkit.jp/flinux/0301/25/dns-record.html

ゾーンファイル 設定の参考

ゾーンファイルの作成内部ネットワークのネットワークアドレスは192.168.11.0/24、DNSサーバを立ち上げるマシンのアドレスは192.168.11.70、内部ネットワークのクライアントは192.168.11.128です。内部ネットワーク名はmy.netです。

自身が持つ192.168.11.70をcentos-7-serverというホスト名でNSとして登録し、内部ネットワーク内にある192.168.11.128のマシンをcentos-7-clientというホスト名で登録します。

つまり、サーバとクライアントで2つのCentOSがある状態です。

内部ネットワーク内にある他のマシンを登録するにはAレコードを適時追加していきます。

・ゾーンファイル

$ sudo cat /var/named/my.net.zone
$TTL 86400
@ IN SOA my.net root.my.net
( 2016050204
3600
900
604800
86400 )

@ IN NS centos-7-server
centos-7-server IN A 192.168.11.70
centos-7-client IN A 192.168.11.128

「CentOS 7: bindをインストールして内部ネットワーク向けにDNSサーバを立ち上げる」
https://www.hiroom2.com/

$TTL 86400 (1)

@ IN SOA dns.example.jp. root.example.jp. ( (2)
     2002122001 ; serial (3)
3600 ; refresh 1hr (3)
900 ; retry 15min (3)
604800 ; expire 1w (3)
86400 ; min 24hr (3) ) (4)

IN NS dns.example.jp. (5)
dns IN A 192.168.10.1 (6)
pc1 IN A 192.168.10.11
pc2 IN A 192.168.10.12
pc3 IN A 192.168.10.13
pc4 IN A 192.168.10.14
pc5 IN A 192.168.10.15

(以下省略)

/var/named/example.zone
(1) TTLに86400秒(1日)を指定
(2) ここからSOAレコード
(3) これらの値はマスター・ゾーンサーバとスレーブ・ゾーンサーバ間でやりとりする際に使用される。次回以降に説明
(4) ここまでがSOAレコード
(5) NSレコード
(6) Aレコード

「すべての基礎、マスター・ゾーンサーバの設定 」
https://www.atmarkit.co.jp/ait/articles/0301/25/news004_2.html

なんか、ゾーンファイルの書式がサイト毎で違うんだけど、
そもそものフォーマットはどうなっているんだろう…という感じですが、

ゾーンファイルは、こういった「柔軟な運用」を可能にするために、
非常に多くの 省略記述 ができるようになっているのが特徴(お便利サーバー.com より)」

なのだそうです。

あとは同じ要領で逆引きを作成・・・は動作に問題があってからという事で。

CentOSってどうやって端末名定義したら良い?

/etc/hostname のファイル内の値がそのままHostname に反映されます。
CentOS 6 とは編集するファイルが違うので要注意

CentOS 7 の Hostname を変更する
https://qiita.com/notakaos/items/d18ab37bce2b25b2d5b0

設定ファイルはこんな感じで作成。

  • 管理したいネットワーク名
    • 192.168.56.102 xxxxx.co.jp (Windchill サーバー)
    • 192.168.56.109 linux-server.net
    • 192.168.56.109 testmail.com (mail サーバー)
---------------------------------
linux-server.net
---------------------------------  
$TTL 1D
 @    IN SOA  @  admin (
                     2019082823  ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H )    ; minimum
     NS  @
     A   127.0.0.1
---------------------------------
testmail.com
--------------------------------- 
$TTL 1D
 @    IN SOA  @  admin (
               2019082823  ; serial
                1D  ; refresh
                1H  ; retry
                1W  ; expire
                3H )    ; minimum
 NS  @ 
 MX 10 mail.
 A   192.168.56.109
---------------------------------
co.jp
---------------------------------
$TTL 1D
 @    IN SOA @ admin (
                2019082823  ; serial
                 1D  ; refresh
                 1H  ; retry
                 1W  ; expire
                3H )    ; minimum
 NS  @
 A   127.0.0.1
 wc111m010mssql in a 192.168.56.102

ドメインの数だけゾーンファイルを作りました。
DNSを示す部分は書き方を悩んだけど、ドメインの数だけDNSもあれば良いじゃね?って事で全部一緒にしてます。管理する端末や、メールサーバーがあればそのレコードを書き込むってことで落ち着きました。
逆引きは今のところ問題ないので、現状は無しで。

ゾーンファイルを作成するのに、下記のチェックコマンドが凄い役立ちました。

/usr/sbin/named-checkconf -z “$NAMEDCONF”

記述に問題が無ければ、こんな感じ。

最初はネットのサンプルからコピって編集していたんですが結局「空白」等の問題なのかエラーが出まくり。ググりながらつぶしても一向に消えないので、 /usr/share/doc/bind*/sample/ for example named のサンプルをベースに書き足しました。

メールサーバーの件。

ここだけAレコードにIPアドレスを入れています。そうしないとメールサーバーの疎通ができませんでした。hostsで名前解決する場合はOKなのにDNSにするとダメだったんで、ipconfig でDNSキャッシュを調べたら、メールサーバーのIPアドレスが入っていたので、なんとなく設定してみたところ通りました。

 MX 10 mail.
 A   192.168.56.109

なんとなく原因がわかったような、わからないような。

named 起動

systemctl enable named

こんな感じのメッセージ。
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.

systemctl start named

うまく起動すれば、何もレスポンスないです。エラーがある時は、エラーが出た旨のメッセージが表示されます。

ステータスをチェック。

systemctl status named.service -l

ファイアウォール off

まあ、ホストオンリー環境なんで、全面オフで。

systemctl stop firewalld

動作確認

digとかhostコマンド、pingや実際にWindchill に接続したり、メール送ってみたりして確認。

namedの起動と動作確認。

https://www.atmarkit.co.jp/ait/articles/0301/25/news004_3.html

pingで端末同士の疎通を確認。そのほかにもWindchill 接続できるかなど思いついた範囲で動作確認。通常の使用範囲ではちゃんとお互いに hosts に記載なしで疎通できてます。

Posted in Linux Server, Server

関連投稿

1件のコメント

  1. ピンバック:テスト用のローカルなメールサーバーが欲しい – .zapping

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です