SNAT
將ip源地址轉換成另外的地址
SNAT,是源地址轉換,其作用是將ip數據包的源地址轉換成另外一個地址。
SNAT,可能有人覺得奇怪,好好的為什麼要進行ip地址轉換啊,為了弄懂這個問題,我們要看一下區域網用戶上公網的原理,假設內網主機A(192.168.2.8)要和外網主機B(61.132.62.131)通信,A向B發出IP數據包,如果沒有SNAT對A主機進行源地址轉換,A與B主機的通訊會不正常中斷,因為當路由器將內網的數據包發到公網IP后,公網IP會給你的私網IP回數據包,這時,公網IP根本就無法知道你的私網IP應該如何走了。所以問它上一級路由器,當然這是肯定的,因為從公網上根本就無法看到私網IP,因此你無法給他通信。為了實現數據包的正確發送及返回,網關必須將A的址轉換為一個合法的公網地址,同時為了以後B主機能將數據包發送給A,這個合法的公網地址必須是網關的外網地址,如果是其它公網地址的話,B會把數據包發送到其它網關,而不是A主機所在的網關,A將收不到B發過來的數據包,所以內網主機要上公網就必須要有合法的公網地址,而得到這個地址的方法就是讓網關進行SNAT(源地址轉換),將內網地址轉換成公網址(一般是網關的外部地址),所以大家經常會看到為了讓內網用戶上公網,我們必須在routeros的firewall中設置snat,俗稱IP地址欺騙或偽裝(masquerade)。
如何區分SNAT和DNAT
從定義來講它們一個是源地址轉換,一個是目標地址轉換。都是地址轉換的功能,將私有地址轉換為公網地址。
要區分這兩個功能可以簡單的由連接發起者是誰來區分:
內部地址要訪問公網上的服務時(如web訪問),內部地址會主動發起連接,由路由器或者防火牆上的網關對內部地址做個地址轉換,將內部地址的私有IP轉換為公網的公有IP,網關的這個地址轉換稱為SNAT,主要用於內部共享IP訪問外部。
當內部需要提供對外服務時(如對外發布web網站),外部地址發起主動連接,由路由器或者防火牆上的網關接收這個連接,然後將連接轉換到內部,此過程是由帶有公網IP的網關替代內部服務來接收外部的連接,然後在內部做地址轉換,此轉換稱為DNAT,主要用於內部服務對外發布。
在配置防火牆或者路由acl策略時要注意這兩個NAT一定不能混淆。
基礎網路配置:AX3000(config)#vlan 10
AX3000(config-vlan:10)#untagged ethernet 1 to 2
AX3000(config-vlan:10)#router-interface ve 10
AX3000(config-vlan:10)#exit
AX3000(config)#int ve 10
AX3000(config-if:ve10)#ip add 192.168.222.101 255.255.255.0
AX3000(config-if:ve10)#exit
添加伺服器:
AX3000(config)#slb server S1 192.168.222.11
AX3000(config-real server)#port 80 tcp
AX3000(config-real server-node port)#slb server S2 192.168.222.12
AX3000(config-real server)#port 80 tcp
AX3000(config-real server-node port)#exit
AX3000(config-real server)#exit
添加伺服器組:
AX3000(config)#slb service-group S_80_HTTP_G tcp
AX3000(config-slb svc group)# member S1:80
AX3000(config-slb svc group)# member S2:80
AX3000(config-slb svc group)#end
創建SNAT地址池:
AX3000(config)#ip nat pool SNAT 192.168.222.102 192.168.222.102 netmask /24
添加虛擬伺服器:
AX3000(config)# slb virtual-server ⅥP 192.168.222.100
AX3000(config-slb vserver)#port 80 http
AX3000(config-slb vserver-vport)#service-group S_80_HTTP_G
AX3000(config-slb vserver-vport)#source-nat pool SNAT
AX3000(config-slb vserver-vport)#end
觀察會話:
AX3000#show session | in 192.168.222.100
Tcp 192.168.222.244:59414 192.168.222.100:80 192.168.222.11:80 192.168.222.102:2070 600 2 NS
伺服器看到的源地址是我們創建的SNAT池地址,說明會話從A10返回了,工作正常。