ここでは dns は samba の active directory、dhcpは isc dhcp を使っている

sambaに参加すれば自動的にdnsに登録されるので便利ではあるが、dhcpに登録したら即dnsも引けて欲しい。
そこでdnsmasqを使ってみることにした。

インストール

[root@c ~]# yum install dnsmasq

設定

左側は isc dhcp の設定、右側はdnsmasqの設定
並べてみるとこんな感じでしょうか
「port=0」はdhcpd機能のみ

/etc/dhcp/dhcpd.conf                                           /etc/dnsmasq.conf
                                                               port=0
authoritative;                                                 dhcp-authoritative
option domain-name          "sybyl.local";                     domain=sybyl.local
option domain-name-servers  192.168.0.3, 192.168.0.33;         dhcp-option=option:dns-server,192.168.0.3,192.168.0.33
option routers              192.168.0.1;                       dhcp-option=option:router,192.168.0.1
option subnet-mask          255.255.255.0;                     dhcp-option=option:netmask,255.255.255.0
option broadcast-address    192.168.0.255;
default-lease-time          300;
max-lease-time              720;
range 192.168.0.128 192.168.0.160;                             dhcp-range=192.168.0.128,192.168.0.160,12h
log-facility                local5;                            log-facility=local5
 
host cc {                                                      dhcp-host=00:0c:29:91:bc:44,192.168.0.2,cc
   hardware ethernet 00:0c:29:91:bc:44;
   fixed-address     192.168.0.2;
   option host-name "cc.sybyl.local";
}

リース時間に関しては下記が詳しい
https://forum.openwrt.org/t/dhcp-clients-renewing-early/6367/3

設定-PXEboot

既にtftpサーバを構築していて、tftpをそのまま利用するなら新たに「pxe-service」を加えればいいみたい。
*左側は isc dhcp の設定、右側はdnsmasqの設定を示す。

/etc/dhcp/dhcpd.conf                                           /etc/dnsmasq.conf
 
host client {                                          
   hardware ethernet 00:0c:29:c6:03:b4;                        dhcp-host=00:0c:29:c6:03:b4;192.168.0.83:client
   fixed-address     192.168.0.83;
   option host-name  "client";
   filename          "/pxeboot/pxelinux.0";                    pxe-service=x86PC, "Install Linux", /pxeboot/pxelinux, 192.168.0.3
   next-server       192.168.0.3;
}

dnsmasqにはtftpサーバ機能を持っているので、それを利用してPXEbootを有効にするには
まず既存のtftpサービスを停止して、

[root@c ~]# systemctl stop tftp.socket
[root@c ~]# systemctl disable tftp.socket

dnsmasq.confを書き換えて、
*左側は isc dhcp の設定、右側はdnsmasqの設定を示す。

/etc/dhcp/dhcpd.conf                                           /etc/dnsmasq.conf 
 
host client {                                          
   hardware ethernet 00:0c:29:c6:03:b4;                        dhcp-host=00:0c:29:c6:03:b4;192.168.0.83:client
   fixed-address     192.168.0.83;
   option host-name  "client";
   filename          "/pxeboot/pxelinux.0";                    dhcp-boot=pxelinux.0
                                                               tftp-root=/var/lib/tftpboot/pxeboot
   next-server       192.168.0.3;                              enable-tftp
}

dnsmasqのrestartを行う

[root@c ~]# systemctl restart dnsmasq

設定-PXEboot-UEFI

上記はBIOSなマシンのPXEbootでしたが、UEFIベースのマシンでは下記のようにする

/etc/dhcp/dhcpd.conf                                           /etc/dnsmasq.conf 
 
host client {                                          
   hardware ethernet 00:0c:29:c6:03:b4;                        dhcp-host=00:0c:29:c6:03:b4;192.168.0.83:client
   fixed-address     192.168.0.83;
   option host-name  "client";
   filename          "/pxeboot/pxelinux.0";
   filename          "/pxeboot/grubx64.efi";
                                                               dhcp-match=set:bios, option:client-arch, 0       #x86-32
                                                               dhcp-match=set:efi-x86_64, option:client-arch, 7 #EFI x86-64
                                                               dhcp-boot=tag:bios,/pxeboot/pxelinux.0,192.168.0.3
                                                               dhcp-boot=tag:efi-x86_64,/pxeboot/grubx64.efi,192.168.0.3
   next-server       192.168.0.3;
}

ここのマシンのMACアドレスで定まる定義ファイル「grub.cfg-01-00-0c-29-c6-03-b4」は、tftpサービスで「/」になる場所に置く必要がある。
tftp.tftp.serviceで
「ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot」
なら
「/var/lib/tftpboot/grub.cfg-01-00-0c-29-c6-03-b4」に配置する。

DNS

dnsmasqはdhcpの役割だけでなく、DNSの機能も持つ。ここではDNSの設定方法を記す

留意
当初「dhcp-host」のエントリーのみでDNSも引いてくれると思ったのですが、間違いみたい...
きちんと「/etc/hosts」にも登録する必要があるようでした...

「/etc/hosts」にエントリーを書くか、別のファイルに書いても構わない。その際は

addn-hosts=/etc/dnsmasq.conf.hosts

として、「/etc/dnsmasq.conf.hosts」にエントリーを書く。
その際、「/etc/hosts」の内容を無視したいのなら追加で

no-hosts

としておく。これで/etc/hostsの内容はDNSエントリーには加わらない。

っで、肝心の「/etc/hosts」とか「/etc/dnsmasq.conf.hosts」の中身ですが

127.0.0.1   localhost localhost.localdomain
192.168.0.3   c
192.168.0.10  cc
192.168.0.2  airstation
 :

こんか感じで。
あと、「/etc/dnsmasq.conf」としては

port=53          # port=0ならdhcpdのみ機能します
domain-needed    # domainが付かない名前の解決に上位DNSは使わない
bogus-priv       # 逆引きzoneの解決に上位DNSは使わない

もし既存でsambaのdnsが機能しているのでそれを停止します。

[root@c ~]# vi /opt/samba/etc/smb.conf
 :
- server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate, dns
+ server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
 :

上記のように設定ファイルを修正して

[root@c ~]# systemctl start samba

その後に、dnsmasqを再起動させる

[root@c ~]# systemctl start dnsmasq

実際にdns検索にdnsmasqが使われているかは「lsof」コマンドで確かめる

[root@c ~]# lsof  -i:53
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
dnsmasq 12975 nobody    6u  IPv4 12070267      0t0  UDP *:domain
dnsmasq 12975 nobody    7u  IPv4 12070268      0t0  TCP *:domain (LISTEN)
dnsmasq 12975 nobody    8u  IPv6 12070269      0t0  UDP *:domain
dnsmasq 12975 nobody    9u  IPv6 12070270      0t0  TCP *:domain (LISTEN)
[root@c ~]#

と確かにdnsmasqでdnsサービスは提供されているようである。

ad対応

adのDNSを外すなら、adが持っていたDNS機能をdnsmasqに加える必要がある。
SRVレコードらがそれに該当する

dhcp-option=ip-forward-enable,0
dhcp-option=44,192.168.0.3
dhcp-option=45,192.168.0.3
dhcp-option=netbios-nodetype,8
 
srv-host=_ldap._tcp.sybyl.local,c.sybyl.local,389
srv-host=_kerberos._tcp.sybyl.local,c.sybyl.local,88
srv-host=_ldap._tcp.dc._msdcs.sybyl.local,c.sybyl.local,389
srv-host=_kerberos._tcp.dc._msdcs.sybyl.local,c.sybyl.local,88
srv-host=gc._msdcs.sybyl.local,c.sybyl.local,3268

参照先https://technet.microsoft.com/ja-jp/library/cc985025.aspx

テスト

[saber@c ~]$ nslookup
> set querytype=SRV
> _ldap._tcp.sybyl.local
Server:         127.0.0.1
Address:        127.0.0.1#53
 
_ldap._tcp.sybyl.local  service = 0 0 389 c.sybyl.local.
>
> _kerberos._tcp.sybyl.local
Server:         127.0.0.1
Address:        127.0.0.1#53
 
_kerberos._tcp.sybyl.local      service = 0 0 88 c.sybyl.local.
>
> _ldap._tcp.dc._msdcs.sybyl.local
Server:         127.0.0.1
Address:        127.0.0.1#53
 
_ldap._tcp.dc._msdcs.sybyl.local        service = 0 0 389 c.sybyl.local.
>
> _kerberos._tcp.dc._msdcs.sybyl.local
Server:         127.0.0.1
Address:        127.0.0.1#53
 
_kerberos._tcp.dc._msdcs.sybyl.local    service = 0 0 88 c.sybyl.local.
>
> gc._msdcs.sybyl.local
Server:         127.0.0.1
Address:        127.0.0.1#53
 
gc._msdcs.sybyl.local   service = 0 0 3268 c.sybyl.local.
>
> exit
 
[saber@c ~]$

nicが2つ以上あって、片方のみで使いたい

nicが2つ(eth0とeth1)あって、片方は上位LAN(eth0)、もう片方はローカルLAN(eth1)で、dnsmasqが動くマシンが
ルーター的な役割を持つ場合。内部のローカルLAN(eth1)だけで運用したいなら

interface=eth1

とする。あるいは

except-interface=eth0

とする


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2019-03-10 (日) 18:39:00 (11d)