目录

DHCP Server
固定 IP
DHCP Relay
DHCP Snooping
IP Source Guard

DHCP Server

今天讨论一下怎样把 Cisco 设定成 DHCP Server。用以下这个网络为例,我们会把 R1 设定成 DHCP Server,而 R2 则会成为 DHCP Client,设定完成後 R2 的 e0/0 应可自动完成 IP 设定。

dhcp

首先在 R1 用 ip dhcp pool <word> 进入 DHCP Server Pool 设定模式,<word> 是为这个 Pool 定义的名字。

R1(config)#ip dhcp pool POOL_1
R1(dhcp-config)#

然後填写各项 DHCP Server 需要的设定。

hostname R1
!
ip dhcp pool POOL_1
   network 192.168.12.0 255.255.255.0       //要派出去的 IP 范围
   default-router 192.168.12.1              //Default Gateway
   dns-server 192.168.12.101 192.168.12.102 //DNS Server
   lease 7                                  //租用天数,预设为1天

为了保留一些 IP 不派出去,我们可以用 ip dhcp excluded-address <IP> 进行设定,第一行的意思是保留 192.168.12.1,第二行的意思是保留 192.168.12.101 至 192.168.12.102。

R1(config)#ip dhcp excluded-address 192.168.12.1
R1(config)#ip dhcp excluded-address 192.168.12.101 192.168.12.102

另外,当然要在 e0/0 设定好 IP。

hostname R1
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0

然後,把 R2 的 e0/0 的 IP Address 设定成 DHCP。

hostname R2
!
interface Ethernet0/0
 ip address dhcp

R2 的 e0/0 成功取得 IP 了。

R2#show interfaces ethernet 0/0 | i Internet
  Internet address is 192.168.12.2/24

在 R1 用 show ip dhcp binding 看看现时 IP 分配情况。最难懂是 Client-ID/Hardware address/User name 一栏,那串奇怪的数字是什麽呢?

R1#show ip dhcp binding
Bindings from all pools not associated with VRF:
IP address          Client-ID/              Lease expiration        Type
                    Hardware address/
                    User name
192.168.12.2        0063.6973.636f.2d63.    Mar 08 2002 01:06 AM    Automatic
                    6330.382e.3266.3430.
                    2e30.3030.302d.4574.
                    302f.30

原来这是一串 Hex code ,只要把他转回文字,就可以破解出来了!

HEX00636973636f2d636330382e326634302e303030302d4574302f30
String   c i s c o - c c 0 8 . 2 f 4 0 . 0 0 0 0 - E t 0 / 0

迷底解开了,那串文字是 cisco-cc08.2f40.0000-Et0/0,意思 192.168.12.2 这个 IP 是派给了一只 Cisco 的产品,MAC address 是 cc08.2f40.0000 的 Et0/0 这个 interface 上。

固定 IP

就和一般 DHCP Server 一样,Cisco 也可以根据不同的 Client 来设定 IP (Static IP),首先我们设定另一个 DHCP Pool,用 host <ip> <mask> 指令来设定要派的 IP,假设我们要派出的 IP 是 192.168.12.201。然後再用 client-identifier 来指定 client,把刚才看到的字串放进去就可以。

hostname R1
!
ip dhcp pool STATIC
   host 192.168.12.201 255.255.255.0
   client-identifier 0063.6973.636f.2d63.6330.382e.3266.3430.2e30.3030.302d.4574.302f.30

然後 DHCP Binding Table 就会出现了一条 Manual 的纪录,而且 Lease Time 是 Infinite (无限)。

R1#show ip dhcp binding
Bindings from all pools not associated with VRF:
IP address          Client-ID/              Lease expiration        Type
                    Hardware address/
                    User name
192.168.12.201      0063.6973.636f.2d63.    Infinite                Manual
                    6330.382e.3266.3430.
                    2e30.3030.302d.4574.
                    302f.30

在 R2 把 e0/0 重开,得到的 IP 是 192.168.12.201,即我们刚才指定的 IP。

R2(config-if)#shutdown
R2(config-if)#no shutdown
R2(config-if)#end
R2#show interfaces ethernet 0/0 | i Internet
  Internet address is 192.168.12.201/24

DHCP Relay

由於 DHCP 是靠 broadcast 传送的,如果 DHCP Server 与 DHCP Client 不在同一个网段,就无法连接了。这时候我们可以使用 DHCP Relay (或称为 IP Helper),帮助 DHCP Client 的 Broadcast 送到 DHCP Server。以下图这个网络为例,R1 是 DHCP Server,R3 是 DHCP Client,我们要在 R2 设定 DHCP Relay。

dhcp

Step 1: 设定 IP Address

hostname R1
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0
hostname R2
!
interface Ethernet0/0
 ip address 192.168.12.2 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.23.2 255.255.255.0

Step 2: R1 DHCP 设定

hostname R1
!
ip dhcp excluded-address 192.168.23.1 192.168.23.10
!
ip dhcp pool POOL_2
   network 192.168.23.0 255.255.255.0
   default-router 192.168.23.2

Step 3: Routing

IP Helper 的原理是当 R2 e0/1 收到 R3 的 DHCP broadcast 时,就会以 unicast 传送给 R1 e0/0,因此 R2 e0/1 必需能到达 R1 e0/0,反之亦然。在这个例子中,我们简单地用使用 Static Route 达成。

hostname R1
!
ip route 192.168.23.0 255.255.255.0 192.168.12.2

试试 PING 一下,OK了!

R2#ping 192.168.12.1 source 192.168.23.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.23.2
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/20/28 ms

Step 4: IP Helper

主角出场,用 ip helper-address <ip>,ip 就填上 DHCP Server 的 IP。

hostname R2
!
interface Ethernet0/1
 ip address 192.168.23.2 255.255.255.0
 ip helper-address 192.168.12.1

於是 R3 成功从 DHCP 取得 IP了!

R3(config)#int ethernet 0/0
R3(config-if)#ip address dhcp
R3(config-if)#no shutdown
R3(config-if)#end
R3#show interface ethernet 0/0 | i Internet
  Internet address is 192.168.23.11/24

DHCP Snooping

由於传统 DHCP 没有提供认证,网络上可能有人自设虚假的 DHCP Server,派出不当的 IP Address,为了防止此问题发生,可以在 Host 与 Server 之间的 Switch 设定 DHCP Snooping。请看以下网络,R1 是 DHCP Client 提出 DHCP Request,R2 是受信任的 DHCP Server,而 R3 则是虚假的。

dhcp

要启动 DHCP Snooping,首先在 SW 用指令 ip dhcp snooping,然後为 vlan 10 开启 dhcp snooping,指令是 ip dhcp snooping vlan 10ip dhcp snooping 是总制,ip dhcp snooping vlan 是为个别 vlan 做 snooping 设定。

SW(config)#ip dhcp snooping
SW(config)#ip dhcp snooping vlan 10

然後有一个比较特别的设定就是要关掉 Option 82。Option 82 为 DHCP Server 提供更多的资讯让 Server 判断要派出什麽 IP Address,启动 DHCP Snooping 後 Switch 会预设为 DHCP Request 加上 Option 82,然而 Cisco DHCP Server 预设无法为带有 Option 82 的 Request 派 IP Address,为方便实验进行,请把 Snooping 的 Option 82 关掉。

SW(config)#no ip dhcp snooping information option

最後,在连着合法 DHCP Server 的 Interface 上设定 Trust。

SW(config)#int fastEthernet 0/2
(config-if)#ip dhcp snooping trust

确认 FastEthernet 0/2 已开了 Trust,并且 Option 82 已经关掉。

SW#show ip dhcp snooping
Switch DHCP snooping is enabled
DHCP snooping is configured on following VLANs:
10
DHCP snooping is configured on the following Interfaces:

Insertion of option 82 is disabled
   circuit-id format: vlan-mod-port
    remote-id format: MAC
Option 82 on untrusted port is not allowed
Verification of hwaddr field is enabled
Interface                    Trusted     Rate limit (pps)
------------------------     -------     ----------------
FastEthernet0/2              yes         unlimited

於是 Client 从 DHCP Server 得到的 IP Address 就被记录下来了。由於 Fa0/3 是 untrust,R3 的 DHCP Reply 是会被忽略的。

SW#show ip dhcp snooping binding
MacAddress          IpAddress        Lease(sec)  Type           VLAN  Interface
------------------  ---------------  ----------  -------------  ----  --------------------
00:16:46:8F:C3:C1   172.16.10.3      85973       dhcp-snooping   10    GigabitEthernet1/0/1
Total number of bindings: 1

IP Source Guard

开启了 DHCP Snooping 後,我们还可以利用 DHCP Snooping Binding Table 去做一个进阶的保安设定,就是 IP Source Guard。IP Source Guard 可检查 Host 使用的 IP Address 是否之前从 DHCP 得到的 IP,如果正确才允许 Port 传送,避免 Host 手动更改 IP Address。设定指令为:

SW(config)#int fastEthernet 0/1
SW(config-if)#ip verify source

检查设定:

SW#show ip verify source
Interface  Filter-type  Filter-mode  IP-address       Mac-address        Vlan
---------  -----------  -----------  ---------------  -----------------  ----------
Fa0/1      ip           active       172.16.10.3      permit-all         10

如要进一步对 Mac Address 也作出限制,则可在指令後面加上 Keyword port-security,前题是 Switch Port 必需启用了 Port Security。有关 Port Security 的设定可参考本文

SW(config)#int fastEthernet 0/1
SW(config-if)#switchport port-security SW(config-if)#ip verify source port-security

检查设定时会见到 Filter-type 变成 ip-mac,代表正检查 IP Address 及 MAC Address。

TEST01#show ip verify source
Interface  Filter-type  Filter-mode  IP-address       Mac-address        Vlan
---------  -----------  -----------  ---------------  -----------------  ----------
Fa0/1      ip-mac       active       172.16.10.3      0016.468f.c3c1     10