本文部分圖片來自:
http://wiki.deliberant.com/faq/wireless-bridge-routing-arpnat/
https://wiki.openwrt.org/doc/howto/clientmode
MAT的原理
MAT(MAC Address Translation)也叫做ARP-NAT,和IP網絡中的NAT原理是差不多的。下面簡稱MAT。
NAT的存在就是為了讓內網的多台機器共享一個公網的IP地址。類似的,MAT可以讓Ethernet中多台機器共享一個MAC地址。但是這個共享是一個結果,而不是目的。
為什么要使用MAT
這是WiFi網絡中僅有的現象。WiFi網絡最常見的AP的設計就是為了透傳Ethernet包。它在Ethernet的(DA,SA)基礎上加入了WiFi專用的MAC地址,也就是WiFi的MAC地址包裹在Ethernet地址之外。
對於AP來說,包裹了AP的MAC地址BSSID,也就是在無線網絡中的AP收發的802.11包是(DA,SA,BSSID)的形式。
對於WDS來說,包裹了兩個WDS設備的MAC地址(TA,RA),也就是形成了(DA,SA,TA,RA)的形式。
那么對於WiFi網絡中STA的包,只是加入了BSSID而已,並沒有加入它自身的WiFi設備地址,最終結果來看它並沒有WiFi的MAC地址,而是將自己的Ethernet地址拿來使用做為WiFi的地址了。
所以為了透傳Ethernet包,在僅有鏈路層工作的情況下(不使用NAT),下面的組網方式就行不通了,而需要MAT的幫助。
MAT的原理
MAT的基本原理:
l 不影響IP層,也就是數據包的IP地址不會變化
l MAT對於內部設備在MAC層上的通訊是透明的。也就是是否有MAT設備存在,內部設備所收發的數據包的地址沒有什么不同。
l MAT對於外部設備來說,屏蔽了所有內部設備,以它自身來替代。也就是內部設備發出的包的源MAC會被替代成MAT設備的MAC。隨之而來的,就是MAT收到的數據包的目標MAC會被替換成對應內部設備的MAC。
MAT的主要問題:
l ARP-NAT緩存可能超時,這樣會導致網絡連接立刻被中斷
l ARP-NAT緩存可能會溢出,這樣會導致網絡連接出現問題
l 其他未知問題
MAT的工作流程
如圖設備A作為STA,連接到AP,電腦連接到設備A。設備A內部對STA接口Ethernet接口做驅動級別的處理轉發。實際上如果設備A再放出一個WiFi AP,電腦的無線網卡連上它,原理也是一樣的。
DHCP流程
電腦發出DHCP discover,設備A更改SA,AP返回offer包之后,設備A更改DA返回給電腦。這里MAT可能要在DHCP包出去之前將broadcast flag給置上,不然AP可能會根據幀體的MAC地址直接單播數據包給電腦,這樣會行不通,因為電腦沒有和AP連接。所以這里AP回復的是廣播的DHCP offer,MAT只要轉發廣播,沒有必要修改DA。
因為DHCP流程中電腦還沒有IP地址,所以在設備A端的MAT依據是DHCP包內部的MAC地址信息來轉發。MAT不會修改DHCP包幀體里面的數據。
DHCP結束之后,MAT的驅動應該已經記住了IP-MAC的對應關系。
ARP流程
ARP的包體里面會攜帶IP地址和MAC地址,MAT除了在發送的時候改變SA,接收的時候改變DA之外,
它同時會在發送的時候改變ARP幀體的SA,接收的時候改變ARP幀體的DA。對於MAT設備來說,根據ARP幀體的IP地址來判斷哪個設備就可以了。
另外抓包發現電腦還會廣播“免費”ARP,告訴別人自己的MAC地址和IP地址的對應關系。MAT也毫不猶豫地將它的SA和幀體的SA替換成自己的MAC地址。
所以這最終的效果就是MAT設備擁有多個IP地址,雖然這不是真的。
數據包流程
數據包的流程很簡單,就是MAT設備修改電腦數據包包的SA發出去給AP,AP回來的發修改DA再轉發給電腦。
基本流程如下圖所示,其中MAT將SA替換成SA1,將DA替換回DA1.