wiki:TipAndDoc/network/dhcpd

Version 21 (modified by mitty, 12 years ago) (diff)

--

DHCPd

  • 標準はISC DHCPd
  • Ubuntuでは「udhcpd」という組み込み機器向け由来のDHCPdも選択できる。

logging

  • log-facility でsyslogへのログ出力を変更できる
  • Ubuntu:/etc/dhcp3/dhcpd.conf
    # Use this to send dhcp log messages to a different log file (you also
    # have to hack syslog.conf to complete the redirection).
    log-facility local7;
    
  • syslog.conf
    local7.* -/var/log/dhcpd.log
    
  • CentOSでは、local7はデフォルトでbootログ用に使われているようなので、変えた方が良いかもしれない。
    • /etc/syslog.conf
      # Save boot messages also to boot.log
      local7.*                                                /var/log/boot.log
      
    • /var/log/boot.log
      Jul  1 16:43:03 VM-centos5 NET[3471]: /sbin/dhclient-script : updated /etc/resolv.conf
      Jul  1 16:43:08 VM-centos5 NET[3562]: /sbin/dhclient-script : updated /etc/resolv.conf
      Jul  1 16:47:13 VM-centos5 NET[3692]: /sbin/dhclient-script : updated /etc/resolv.conf
      (snip)
      

Ubuntu

  • aptitude install dhcp3-server
    • clientは標準ではdhcp3-client

configure

  • /etc/default/dhcp3-server
    # On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
    #       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
    INTERFACES=""
    
    • ListenするIFを指定
  • /etc/dhcp3/dhcpd.conf についてはman dhcpd.conf

warning with dhcp3

CentOS

  • yum install dhcp
    • clientは標準ではdhclient

configure

  • /etc/sysconfig/dhcpd
    # Command line options here
    DHCPDARGS=
    
  • /etc/dhcpd.conf についてはman dhcpd.conf

searching multiple domains

  • setting the DNS search string

    option domain-search domain-list;

    This was added in 3.1.0.
    (snip)
    You can configure 'option domain-name "example.com sales.example.com";', and on many Unixish systems, this will become a 'search' string in /etc/resolv.conf. But it doesn't work as expected on many non-unixish systems (they parse the spaces as part of the domain name).

multiple domain-name on same subnet

  • Debian GNU/Linux 6.0.4 (squeeze)
  • ドメインはlocal.mitty.jpとdhcp.mitty.jp
    • local -> static assign
    • dhcp -> dynamic assign
  • host {...} で定義されたものがlocalに、それ以外はdhcpへ
  • /23のサブネットを用いて、localとdhcpで192.168.0.0と192.168.0.1に分ける
    • 普通に/24が2個のサブネットにしてしまうと、local<->dhcp間のデータがdefault routeで中継されてしまいうまくない
  • /etc/dhcp/dhcpd.conf
    ddns-update-style interim;
    
    option domain-name "dhcp.mitty.jp";
    option domain-name-servers 192.168.0.254;
    
    default-lease-time 172800;
    max-lease-time 2678400;
    
    authoritative;
    
    log-facility local7;
    
    subnet 192.168.0.0 netmask 255.255.254.0 {
    	option routers 192.168.0.254;
    	option ntp-servers 192.168.0.254;
    	option broadcast-address 192.168.0.255;
    	option domain-search "local.mitty.jp", "dhcp.mitty.jp";
    	
    	pool {
    		allow unknown-clients;
    		option domain-name "dhcp.mitty.jp";
    		range 192.168.1.100 192.168.1.199;
    		default-lease-time 7200;
    		max-lease-time 86400;
    		ddns-updates on;
    	}
    	
    	pool {
    		deny unknown-clients;
    		option domain-name "local.mitty.jp";
    		range 192.168.0.100 192.168.0.199;
    		ddns-updates off;
    		
    		include "/etc/dhcp/dhcpd.conf.d/local.mitty.jp";
    	}
    }
    
    • poolを使って、allow/deny unknown-clientsで選別する

      The unknown-clients flag is used to tell dhcpd whether or not to dynamically assign addresses to unknown clients. Dynamic address assignment to unknown clients is allowed by default. An unknown client is simply a client that has no host declaration.

    • include (host設定)をpoolの中に記述すること。globalのoption domain-name "dhcp.mitty.jp";が適用されてしまう
  • /etc/dhcp/dhcpd.conf.d/local.mitty.jp
    (snip)
    
    host dhclient {
    	hardware ethernet 00:0C:29:73:3D:94;
    	fixed-address 192.168.0.250;
    }
    
    host winxp2 {
    	hardware ethernet 00:50:56:26:9b:1c;
    	fixed-address 192.168.0.2;
    }
    
  • /etc/bind/named.conf.local
    (snip)
    
    zone "local.mitty.jp" {
    	type master;
    	file "db.local.mitty.jp";
    };
    
    zone "0.168.192.in-addr.arpa" {
    	type master;
    	file "db.192.168.0";
    };
    
    zone "dhcp.mitty.jp" {
    	type master;
    	file "db.dhcp.mitty.jp";
    	allow-update {
    		127.0.0.1;
    		192.168.0.254;
    	};
    };
    
    zone "1.168.192.in-addr.arpa" {
    	type master;
    	file "db.192.168.1";
    	allow-update {
    		127.0.0.1;
    		192.168.0.254;
    	};
    };
    
    • 以下のファイルを適宜作っておく
      • /var/cache/bind/db.192.168.0
      • /var/cache/bind/db.192.168.1
      • /var/cache/bind/db.dhcp.mitty.jp
      • /var/cache/bind/db.local.mitty.jp

test

  • dhclient -> 00:0c:29:73:3d:94
  • dhclient2 -> 00:50:56:25:13:28
  • winxp -> 00:0c:29:f0:16:80
  • winxp2 -> 00:50:56:26:9b:1c
  • 上記/etc/dhcp/dhcpd.conf.d/local.mitty.jpの通り、dhclient, winxp2が設定されている

dhcpd

  • mitty@dhcpd:~$ tailf /var/log/syslog
    May  5 14:08:43 dhcpd dhcpd: DHCPDISCOVER from 00:0c:29:73:3d:94 via eth0
    May  5 14:08:43 dhcpd dhcpd: DHCPOFFER on 192.168.0.250 to 00:0c:29:73:3d:94 via eth0
    May  5 14:08:43 dhcpd dhcpd: DHCPREQUEST for 192.168.0.250 (192.168.0.254) from 00:0c:29:73:3d:94 via eth0
    May  5 14:08:43 dhcpd dhcpd: DHCPACK on 192.168.0.250 to 00:0c:29:73:3d:94 via eth0
    
    
    May  5 14:09:59 dhcpd dhcpd: DHCPDISCOVER from 00:50:56:25:13:28 via eth0
    May  5 14:10:00 dhcpd dhcpd: DHCPOFFER on 192.168.1.100 to 00:50:56:25:13:28 via eth0
    May  5 14:10:00 dhcpd dhcpd: DHCPREQUEST for 192.168.1.100 (192.168.0.254) from 00:50:56:25:13:28 via eth0
    May  5 14:10:00 dhcpd dhcpd: DHCPACK on 192.168.1.100 to 00:50:56:25:13:28 via eth0
    
    
    May  5 14:10:33 dhcpd dhcpd: DHCPDISCOVER from 00:0c:29:f0:16:80 via eth0
    May  5 14:10:34 dhcpd dhcpd: DHCPOFFER on 192.168.1.101 to 00:0c:29:f0:16:80 (winxp) via eth0
    May  5 14:10:34 dhcpd named[1098]: client 192.168.0.254#60107: updating zone 'dhcp.mitty.jp/IN': adding an RR at 'winxp.dhcp.mitty.jp' A
    May  5 14:10:34 dhcpd named[1098]: client 192.168.0.254#60107: updating zone 'dhcp.mitty.jp/IN': adding an RR at 'winxp.dhcp.mitty.jp' TXT
    May  5 14:10:34 dhcpd dhcpd: Added new forward map from winxp.dhcp.mitty.jp to 192.168.1.101
    May  5 14:10:34 dhcpd named[1098]: client 192.168.0.254#41458: updating zone '1.168.192.in-addr.arpa/IN': deleting rrset at '101.1.168.192.in-addr.arpa' PTR
    May  5 14:10:34 dhcpd named[1098]: client 192.168.0.254#41458: updating zone '1.168.192.in-addr.arpa/IN': adding an RR at '101.1.168.192.in-addr.arpa' PTR
    May  5 14:10:34 dhcpd dhcpd: added reverse map from 101.1.168.192.in-addr.arpa. to winxp.dhcp.mitty.jp
    May  5 14:10:34 dhcpd dhcpd: DHCPREQUEST for 192.168.1.101 (192.168.0.254) from 00:0c:29:f0:16:80 (winxp) via eth0
    May  5 14:10:34 dhcpd dhcpd: DHCPACK on 192.168.1.101 to 00:0c:29:f0:16:80 (winxp) via eth0
    
    
    May  5 14:13:23 dhcpd dhcpd: DHCPDISCOVER from 00:50:56:26:9b:1c via eth0
    May  5 14:13:23 dhcpd dhcpd: DHCPOFFER on 192.168.0.2 to 00:50:56:26:9b:1c via eth0
    May  5 14:13:23 dhcpd dhcpd: DHCPREQUEST for 192.168.0.2 (192.168.0.254) from 00:50:56:26:9b:1c via eth0
    May  5 14:13:23 dhcpd dhcpd: DHCPACK on 192.168.0.2 to 00:50:56:26:9b:1c via eth0
    

dhclient

  • -> local.mitty.jp
  • @dhcpd:~$ ssh 192.168.0.250
  • @dhclient:~$ cat /etc/resolv.conf
    domain local.mitty.jp
    search local.mitty.jp local.mitty.jp. dhcp.mitty.jp.
    nameserver 192.168.0.254
    
  • @dhclient:~$ /sbin/ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:0c:29:73:3d:94
              inet addr:192.168.0.250  Bcast:192.168.0.255  Mask:255.255.254.0
    
    (snip)
    
  • @dhclient:~$ ip route
    192.168.0.0/23 dev eth0  proto kernel  scope link  src 192.168.0.250
    default via 192.168.0.254 dev eth0
    
  • @dhclient:~$ ping winxp
    PING winxp.dhcp.mitty.jp (192.168.1.101) 56(84) bytes of data.
    64 bytes from winxp.dhcp.mitty.jp (192.168.1.101): icmp_req=1 ttl=128 time=3.98 ms
    64 bytes from winxp.dhcp.mitty.jp (192.168.1.101): icmp_req=2 ttl=128 time=0.471 ms
    64 bytes from winxp.dhcp.mitty.jp (192.168.1.101): icmp_req=3 ttl=128 time=0.353 ms
    ^C
    
    (snip)
    

dhclient2

  • -> dhcp.mitty.jp
  • @dhcpd:~$ ssh 192.168.1.100
  • @dhclient2:~$ cat /etc/resolv.conf
    domain dhcp.mitty.jp
    search dhcp.mitty.jp local.mitty.jp. dhcp.mitty.jp.
    nameserver 192.168.0.254
    
  • @dhclient2:~$ /sbin/ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:50:56:25:13:28
              inet addr:192.168.1.100  Bcast:192.168.0.255  Mask:255.255.254.0
    
    (snip)
    
  • @dhclient2:~$ ip route
    192.168.0.0/23 dev eth0  proto kernel  scope link  src 192.168.1.100
    default via 192.168.0.254 dev eth0
    
  • @dhclient2:~$ ping dhclient
    PING dhclient.local.mitty.jp (192.168.0.250) 56(84) bytes of data.
    64 bytes from dhclient.local.mitty.jp (192.168.0.250): icmp_req=1 ttl=64 time=0.928 ms
    ^C
    
    (snip)
    

Windows

  • winxp.dhcp.mitty.jp
  • winxp2.local.mitty.jp
  • winxp.dhcp -> *.local.mitty.jpは名前解決出来ない
  • winxp2.local -> *.dhcp.mitty.jpは名前解決出来ない
  • 対応案
    • Windowsを使わない
    • TCP/IP 詳細設定 > DNS から手動で設定する

multiple subnet with multiple interfaces

  • dhcpd: Interface eth0 matches multiple shared networks « そこはかと

    IPエイリアスで別サブネットのIPアドレスを持たせているサーバーでdhcpdを動かしたい場合、下記のように単純にsubnetを1つ増やすだけではdhcpdからInterface eth0 matches multiple shared networksと怒られる。 そんな時はshared-network宣言で囲うといい。

Attachments (5)

Download all attachments as: .zip