查看單個文章
舊 2006-09-13, 06:27 AM   #3 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

How to :使用ARP命令來綁定IP和MAC卡位址
How to :使用ARP命令來綁定IP和MAC卡位址

 

前言:我本來沒有想過寫關於ARP綁定的文章,坦白的說一句,在你理解ARP工作的原理時,這其實比較簡單。只是看到最近論壇很多人在問關於綁定IP和MAC卡位址的問題,所以才決定寫這個文章,希望能一勞永逸。

作為企業級的路由防火牆,ISA Server並沒有提供對於MAC卡位址的控制功能。不過,你可以使用Windows的命令ARP來實現IP位址和MAC卡位址的綁定。這篇文章介紹了Windows下ARP協議工作的原理,以及如何使用ARP命令來靜態綁定IP位址和MAC卡位址。

 

ISA Server中沒有提供對於MAC卡位址的控制功能,Why?這是因為MAC卡位址只能在本機網路中使用,當資料包跨越路由器時,資料包中主機的源MAC卡位址就會被路由器的出站接頭的MAC卡位址所代替,這個時候,使用MAC卡位址來進行控制就不適用了。所以只要是企業級的硬體或者軟件防火牆,都基本沒有提供對MAC卡位址的控制功能。

不過微軟也早就考慮到了這點,在Windows中,如果你安裝了TCP/IP網路協議元件,那麼你就可以執行命令ARP。ARP命令的作用是檢視本機的ARP快取記憶體、靜態綁定IP位址和MAC卡位址和刪除靜態綁定項。其實綁定IP位址和MAC卡位址的本意是為了減少ARP廣播流量,只是可以利用這一功能來控制IP位址的使用。

在這裡我還是先簡單的描述一下Windows下ARP協議的工作原理。ARP協議(Address Resolve Protocol,位址解析協議)工作在TCP/IP協議的第二層-資料鏈路層,用於將IP位址轉換為網路接頭的硬體位址(媒體訪問控制位址,即MAC卡位址)。無論是任何高層協議的通訊,最終都將轉換為資料鏈路層硬體位址的通訊。每台主機都具有一個用於快取記憶體MAC卡位址的ARP快取記憶體列表,你可以使用命令ARP -a或ARP -g來檢視當前的ARP快取記憶體列表。此ARP快取記憶體列表是動態更新的,預定情況下,當其中的快取記憶體項超過兩分鐘沒有活動時,此快取記憶體項就會超時被刪除。你可以使用ARP -s來靜態綁定IP位址和MAC卡位址,不過在Windows server 2003和XP以前的Windows系統中,就算你設置了靜態MAC卡位址綁定項,同樣會通過接收其他主機的資料包而更新已經綁定的項。在Windows server 2003和XP中,靜態綁定的項不會被動態更新,直到TCP/IP協議停止為止,例如重啟電腦。如果要創建永久的靜態MAC卡位址綁定項,你可以寫一個腳本文件來執行ARP靜態綁定,然後使用計劃任務在啟動電腦時執行該腳本即可。

例如A主機的IP位址為192.168.0.1,它現在需要與IP為192.168.0.8的主機(主機B)進行通訊,那麼將進行以下動作:

A主機查詢自己的ARP快取記憶體列表, 如果發現具有對應於目的IP位址192.168.0.8的MAC卡位址項,則直接使用此MAC卡位址項構造並發送乙太網資料包,如果沒有發現對應的MAC卡位址項則繼續下一步;

A主機發出ARP解析請求廣播,目的MAC卡位址是FF:FF:FF:FF:FF:FF,請求IP為192.168.0.8的主機回復MAC卡位址;

B主機收到ARP解析請求廣播後,回復給A主機一個ARP應答資料包,其中包含自己的IP位址和MAC卡位址;

A接收到B主機的ARP回復後,將B主機的MAC卡位址放入自己的ARP快取記憶體列表,然後使用B主機的MAC卡位址作為目的MAC卡位址,B主機的IP位址(192.168.0.8)作為目的IP位址, 構造並發送乙太網資料包;

如果A主機還要發送資料包給192.168.0.8, 由於在ARP快取記憶體列表中已經具有IP位址192.168.0.8的MAC卡位址,所以A主機直接使用此MAC卡位址發送資料包,而不再發送ARP解析請求廣播;當此快取記憶體位址項超過兩分鐘沒有活動(沒有使用)後,此ARP快取記憶體將超時被刪除。

預定情況下ARP快取記憶體的超時時限是兩分鐘,你可以在註冊表中進行修改。可以修改的鍵值有兩個,都位於

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

修改的鍵值:

鍵值1:ArpCacheLife,類型為Dword,單位為秒,預定值為120

鍵值2:ArpCacheMinReferencedLife,類型為Dword,單位為秒,預定值為600

注意:這些鍵值預定是不存在的,如果你想修改,必須自行創建;修改後重啟電腦後生效。

如果ArpCacheLife的值比ArpCacheMinReferencedLife的值大,那麼ARP快取記憶體的超時時間設置為ArpCacheLife的值;如果ArpCacheLife的值不存在或者比ArpCacheMinReferencedLife的值小,那麼對於未使用的ARP快取記憶體,超時時間設置為120秒;對於正在使用的ARP快取記憶體,超時時間則設置為ArpCacheMinReferencedLife的值。


下图是我们的试验网络结构,ISA Server作为一个边缘防火墙,内部局域网(192.168.0.0/24)通过ISA Server接入Internet。在这个试验中,我将在ISA Server上绑定内部客户True的IP地址192.168.0.8和MAC地址,这样,当True不在线时,另外一个内部客户Fake就算修改自己的IP地址为True的IP地址192.168.0.8,也不能通过ISA Server来上网。

http://www.isacn.org/pic/arp/arp.jpg

各计算机的TCP/IP设置如下,本次试验不涉及DNS解析,各服务器的DNS服务器设置为空,在试验之前已经确认了网络连接工作正常:
ISA 2004 Firewall:
LAN Interface:
IP:192.168.0.1/24
DG:None
MAC:00:03:47:F4:FC:E7
 
True(将离线):
IP:192.168.0.8/24
DG:192.168.0.1
MAC:00:0D:60:C3:05:34
 
Fake(将修改IP地址为192.168.0.8):
IP:192.168.0.8/24
DG:192.168.0.1
MAC:00:060:06:05:47
 
 
首先,我在ISA Server上使用ARP -S来绑定True的IP地址和MAC地址,运行命令:
ARP -s 192.168.0.8 00-0D-60-C3-05-34
然后执行ARP -a来查看ARP缓存列表,结果如下图所示。你可以看到在ARP缓存列表中IP地址192.168.0.8的类型为static,这表明它是静态项。此时,我们在ISA Server上的绑定就成功了。

http://www.isacn.org/pic/arp/arp01.jpg


現在我們在客戶機Fake上,將自己的IP位址修改為192.168.0.8,然後Ping ISA Server:
C:\Documents and Settings\admin>ipconfig /all
Windows IP Configuration
Host Name . . . . . . . . . . . . : anonymous
Primary Dns Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Unknown
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
Ethernet adapter 區域連線:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Intel(R) PRO/100 VE Network Connection
Physical Address. . . . . . . . . : 00-06-D0-06-05-47
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 192.168.0.8
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.0.1
DNS Servers . . . . . . . . . . . : 192.168.0.1
C:\Documents and Settings\admin>ping 192.168.0.1 -n 2
Pinging 192.168.0.1 with 32 bytes of data:
Request timed out.
Request timed out.
Ping statistics for 192.168.0.1:
Packets: Sent = 2, Received = 0, Lost = 2 (100% loss),
 
Ping超時,Why?從Sniffer上捕獲的資料包可以更清楚的進行說明:
下圖是捕獲的資料包,它描述了Fake(192.168.0.8) Ping 192.168.0.1的全部過程:

http://www.isacn.org/pic/arp/arp03.jpg

由於Fake(00:060:06:05:47)沒有192.168.0.1的MAC卡位址,所以Fake發送ARP位址解析請求廣播,詢問192.168.0.1的MAC卡位址是什麼;
ISA Server(00:03:47:F4:FC:E7)使用ARP應答回復Fake(00:060:06:05:47),告訴Fake自己的IP位址(192.168.0.1)和MAC卡位址;
獲得192.168.0.1的MAC卡位址後,Fake(192.168.0.8)向192.168.0.1發送PING請求資料包;
192.168.0.1向192.168.0.8回復PING回複資料包;
Fake(192.168.0.8)再次向192.168.0.1發送PING請求資料包;
192.168.0.1再次向192.168.0.8回復PING回複資料包;




這一切看起來沒有任何問題?那為什麼Fake的Ping會超時呢?
這一切從表明上看是沒有任何問題,但是仔細看捕獲的資料包的乙太網頭部,你就會發現問題所在:
首先,我們看第三個資料包,Fake(192.168.0.8)向192.168.0.1發送的Ping請求,如下圖所示,Fake以自己的MAC卡位址為源MAC卡位址、192.168.0.1的MAC卡位址(00:03:47:F4:FC:E7)為目的MAC卡位址發送資料包,這沒有任何問題。

http://www.isacn.org/pic/arp/arp04.jpg

 
那麼看看第四個ISA Server回復的Ping回複資料包呢,源MAC卡位址是ISA Server的MAC卡位址(00:03:47:F4:FC:E7),這也沒有問題,但是注意看目的MAC卡位址,00:0D:60:C3:05:34是離線的客戶機True的MAC卡位址。還記得我們在ISA Server上做的IP位址(192.168.0.8)和MAC卡位址綁定嗎?ISA Server直接使用自己ARP快取記憶體中的靜態綁定項來發送資料,而不是使用收到的Ping請求資料包中的源MAC卡位址來作為目的位址。因此,Fake認為此資料包不是發給自己的,不會處理此資料包,所以認為沒有Ping回複資料包,自然就是超時了。

http://www.isacn.org/pic/arp/arp05.jpg

最後說一下,我不推薦大家使用靜態IP位址和MAC卡位址的綁定,這會帶來更多的管理負荷。你可以利用ISA Server強大的身份驗證功能,結合IP位址來進行管理,這樣具有更好的效果。也請不要在論壇問我ARP命令是如何使用的,Windows的幫助是最好的老師。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次