Cisco IOS で DHCP サーバを構成する

2017.08.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、ももんが大好きのトランです。みなさんいかがお過ごしでしょうか?
きょうは、Cisco IOSでDHCPサーバを構成する方法についてご紹介したいと思います。

目標

ここに、単一のインターネット接続を複数のクライアントで共有するために設置したCisco IOSルータがあります。このルータは、以下のようにEthernet0からプロバイダへ接続して、DHCPでIPアドレスを取得し、そのIPアドレスでマスカレードするためにPer-session NAT (PAT)を実行しています。よくあるブロードバンドルータです。

Unbenannt-4

今回は、このネットワークへ接続したクライアントでプラグアンドプレイのIP設定を実現するためにDHCPサーバを構成する方法についてご紹介します。

(注意: 既に運用中のネットワークで勝手にDHCPサーバを置くと大変なことになります。必ず物理的に隔離されたネットワークで試すようにしてください。)

設定内容

早速やってみましょう。DHCPサーバを構成する前に、必要に応じてプールから除外したいIPアドレスを登録します。ルータ自身のIPアドレスは自動的に除外されるため、この設定は一部のIPアドレスを他のネットワークアプライアンスで使用したい場合などに行います。

ip-10-132-146-1#configure terminal 
Enter configuration commands, one per line.  End with CNTL/Z.
ip-10-132-146-1(config)#ip dhcp ?                
  excluded-address           Prevent DHCP from assigning certain addresses
          
ip-10-132-146-1(config)#ip dhcp excluded-address 10.0.0.1 10.0.0.31

クライアントID (DHCP Option 61) やMACアドレスを使った静的なアドレス割り当てを構成したい場合は、以下のページでConfiguring DHCP Static Mappingを参照します。

IP Addressing: DHCP Configuration Guide, Cisco IOS Release 15M&T - Configuring the Cisco IOS DHCP Server [Support] - Cisco

続いて以下の要領でDHCPプールを作成しますが、DHCPサーバを実行するためのインターフェイスを特に指定していないことに注目してください。Cisco IOSでは、リクエストを受け取ったインターフェイスのIPアドレスとサブネットをもとに使用するDHCPプールを決定します。

ip-10-132-146-1(config)#ip dhcp pool ?
  LINE  Pool name

ip-10-132-146-1(config)#ip dhcp pool 10-0-0-0
ip-10-132-146-1(dhcp-config)#?
DHCP pool configuration commands:
  import               Programatically importing DHCP option parameters

ip-10-132-146-1(dhcp-config)#import ?  
  all  all DHCP options

ip-10-132-146-1(dhcp-config)#import all
ip-10-132-146-1(dhcp-config)#network 10.0.0.0 255.255.255.0
ip-10-132-146-1(dhcp-config)#default-router 10.0.0.1
ip-10-132-146-1(dhcp-config)#exit
ip-10-132-146-1(config)#do show ip dhcp pool          

Pool 10-0-0-0 :
 Utilization mark (high/low)    : 100 / 0
 Subnet size (first/next)       : 0 / 0 
 Total addresses                : 254
 Leased addresses               : 0
 Pending event                  : none
 1 subnet is currently in the pool :
 Current index        IP address range                    Leased addresses
 10.0.0.1             10.0.0.1         - 10.0.0.254        0

単一のDHCPプールをサービスするための設定は以上ですが、import allというコマンドに注目してください。import allは、ルータ自身がDHCPクライアントとして取得したDHCPオプション (DNSサーバやTFTPサーバなど) をそのDHCPプールで流用するための機能です。ここでは、ルータ自身がISPのDHCPサーバから取得したDNSアドレスが«インポート»されています。

ip-10-132-146-1(config)#do show ip dhcp import

Address Pool Name: 10-0-0-0
Domain Name Server(s): 198.51.100.79 198.51.100.151

ip-10-132-146-1(config)#do show dhcp ?
  lease   Show DHCP Addresses leased from a server
  server  Show DHCP Servers we know about

ip-10-132-146-1(config)#do show dhcp server 
   DHCP server: ANY (255.255.255.255)
    Leases:   136
    Offers:   1      Requests: 68     Acks : 68     Naks: 0
    Declines: 0      Releases: 0     Query: 0     Bad: 0
    Forcerenews: 0      Failures: 0
    DNS0:   198.51.100.79,   DNS1:  198.51.100.151
    Subnet: 255.255.255.0

作成したDHCPプールで異なるDNSサーバを通知したい場合、以下の要領で登録します。この場合、import allでインポートされたDNSサーバは無視されます。

ip-10-132-146-1(config)#ip dhcp pool 10-0-0-0
ip-10-132-146-1(dhcp-config)#?           
DHCP pool configuration commands:
  dns-server           DNS servers
          
ip-10-132-146-1(dhcp-config)#dns-server 64.6.64.6 64.6.65.6 
ip-10-132-146-1(dhcp-config)#exit

以上でDHCPサーバが構成できました。クライアントのIP設定をDHCPに変更して、正しい設定が適用されることを確認しましょう!

余談

ところで、現代のOSはDHCPオプションを通して得られたリソース (今回はDNSサーバ) が実際に使用可能であるか確認してからシステムに反映させるよう作られているようです (macOS Sierraで確認)。以上の設定が正しく行われていても、ルーティングなど他の設定に不備がある場合はDHCPクライアントでDNSサーバが反映されないことがある点に注意してください。

おわりに

いかがでしたか? 今回は、Cisco IOSでDHCPサーバを構成する方法についてご紹介しました。次回はCBAC (コンテキストベース アクセス制御) を構成してみたいと思います。お楽しみに!

したっけまた?