DHCP-SNOOPING

DHCP-SNOOPING 是用來限制DHCP被非預期的裝置發放或取得動態IP。

在一個複雜的環境,沒有辦法充分掌握是否有非預期的裝置被接上到廣域網路之中。
DHCP的IP取得是先搶先贏,同時存在兩個DHCP-SERVER的話,並「不能保證」裝置能拿到正確的SERVER所發的IP。萬一另外一台的SERVER所發的是不能上網,就會讓本來預期可以取得動態IP上網的裝置無法上網。

DHCP_SNOOPING 的啟用 (只在vlan 1啟用。Aruba 2930)

dhcp-snooping
dhcp-snooping vlan 1

啟用 DHCP-SNOOPING,最基本的機制為「Trust」跟「Untrust」的觀念。
架構中的DHCP-SERVER接在 1 Port,那就在 1 Port 設定 Trust,代表從這一Port來的DHCP-SERVER的回應是核可的。啟用DHCP-SNOOPING後,所有的Port預設是Untrust,因此從其他的傳來的DHCP-SERVER回應將會被Drop。

如果有兩層機制,DHCP-SERVER在上層的第一台,對第二台來說DHCP-SERVER在其Uplink,所以第二台要Trust Uplink Port。

在LAB的環境,所有的設備可以被操作,但是現實之中,卻是各家廠牌設備各家廠商維護,使用者也可能使環境有變動而造成狀況。所以,為了要減少使用者的不便與困擾,用最少的設備(僅能掌握的)做最嚴謹的設定去限制,就能減少狀況發生。

這邊要提DHCP進行的流程:

  1. DHCP-Clinet 會發出 DHCPDISCOVER 其為UDP,Port 67,然後廣播出去,請求IP。
  2. DHCP- Server收到後會發出 DHCPOFFER 其為UDP,Port 68,然後廣播出去回應Clinet。
  3. DHCP-Clinet 收到後會發出DHCPREQUEST,裡面包含其拿的IP,讓其發放的Server知道IP被取用。
  4. DHCP-Server收到後會發出DHCPACK,讓Clinet知道Server已經收到回應,這時DHCP已完成。

除了現成的DHCP-SNOOPING,我們也可以下Access Control List(ACL)去針對UDP 68做條件許可,一樣可以達到DHCP-SNOOPING的功能。

如果是IP ACL,可以用:(Aruba 2930為例)

ip access-list extended DHCP_SNOOPING_IPACL
10 permit udp Host DHCP-SERVER-IP eq 68 any
20 deny udp any eq 68 any
30 permit ip any any
exit

然後綁在設備連接的Interface上,方向為Out(資料從Switch出去)。

如果是MAC ACL,可以用

mac-access-list extended DHCP_SNOOPING_MACACL
10 deny host Untrust-DHCP-Server-MAC any any
200 permit any any any
exit

然後綁在設Interface上。可以依照非法DHCP-SERVER數量去新增更多Deny,這個方法不建議用。

ACL是最硬派的方法,因此可以用於很多的Switch上。

DHCP-SNOOPING也可以針對DHCP-SERVER IP去下指令去列為合法的DHCP-SERVER清單,做起來相對ACL更簡單,實際運作也是採取IP ACL的方式。
dhcp-snooping authorized-server DHCP-SERVER-IP

依照DHCP-SERVER的運作方式,如果Server具有二個網段,要去指定其在DHCP網段的IP位置,如IP分享器有Public IP跟Private IP,要是採取用IP去指定合法DHCP-SERVER,那IP就得用其Private IP。

在使用Aruba 2930的時候,如果有多層Switch架構,發現最下層的Client會拿不到DHCP IP,因為Switch會去把Client的DHCPDISCOVERY添加DHCP OPTION 82,同時Switch預設是會丟棄從Untrust Port(Client)傳來帶有OPTION82,因此上層Switch會去Drop Client的DHCPDISCOVERY,使得Client拿不到DHCP IP。

要記得,如果有啟用DHCP-SNOOPING,也要順便設定OPTION 82,不然會有問題。基本上就是不要用DHCP OPTION 82,把OPTION 82的關掉

no dhcp-snooping option 82