NAT原理總結(jié)

1、NAT原理總結(jié)

1.1 NAT的產(chǎn)生

由于網(wǎng)絡(luò)的飛速發(fā)展和網(wǎng)絡(luò)應(yīng)用的極速增多,致使IPv4可用地址空間逐漸枯竭。盡管IPv6可以在根本上解決地址枯竭問(wèn)題,但I(xiàn)Pv4發(fā)展到IPv6還需要一個(gè)過(guò)渡,而這便產(chǎn)生了NAT。

1.2 NAT的作用

IP地址分為公網(wǎng)IP與私網(wǎng)IP。一般情況下,在互聯(lián)網(wǎng)中,公網(wǎng)IP可直接訪問(wèn),私網(wǎng)IP無(wú)法直接訪問(wèn)。而NAT則是將私網(wǎng)IP地址轉(zhuǎn)換為公網(wǎng)IP地址(將IP報(bào)文頭部的私網(wǎng)IP地址改為可以提供訪問(wèn)的公網(wǎng)IP地址),從而實(shí)現(xiàn)用戶上網(wǎng)功能或服務(wù)器在互聯(lián)網(wǎng)上提供服務(wù)。NAT還可以使得一個(gè)公網(wǎng)IP代表多個(gè)不同的內(nèi)網(wǎng)IP,這樣便節(jié)省了IP地址資源。

1.3 NAT的類型與分類

NAT分為靜態(tài)轉(zhuǎn)換、動(dòng)態(tài)轉(zhuǎn)換、端口轉(zhuǎn)換

  1. 靜態(tài)轉(zhuǎn)換:私有地址與公有地址進(jìn)行一對(duì)一的映射。這種一對(duì)一映射無(wú)法緩解可用公有地址短缺的問(wèn)題。
  2. 動(dòng)態(tài)轉(zhuǎn)換:私有地址與公有地址進(jìn)行一對(duì)多的映射。首先建立公有地址地址池,私有地址向外通信時(shí),會(huì)從公有地址地址池中選擇非在用的公有地址進(jìn)行映射,當(dāng)通信結(jié)束時(shí),釋放映射關(guān)系,公有地址重新恢復(fù)到地址池中待用。弊端:若私有地址向外通信,而公有地址地址池中無(wú)可用公有地址時(shí),會(huì)等待公有地址釋放后在進(jìn)行通信。
  3. 端口轉(zhuǎn)換:在大多數(shù)網(wǎng)絡(luò)中,一般都使用的是IP上的某個(gè)端口(如80、443、3389等),所以不需要進(jìn)行全地址映射,只需要私有地址端口映射到公有地址端口上,直接訪問(wèn)公有地址加端口號(hào)的形式便可以。這樣可以使得一個(gè)公有地址可以對(duì)應(yīng)多個(gè)私有地址,從而大大緩解了公有地址緊缺的問(wèn)題。
  4. Easy IP:為小型網(wǎng)絡(luò),一般為家庭、小型網(wǎng)吧、辦公室等內(nèi)部主機(jī)不多的地方。通過(guò)撥號(hào)方式獲取一個(gè)臨時(shí)公網(wǎng)IP地址進(jìn)行外網(wǎng)的訪問(wèn)。

1.4 擴(kuò)展:SNAT與DNAT區(qū)別

  1. SNAT是私網(wǎng)訪問(wèn)外網(wǎng)時(shí),報(bào)文中源IP地址(私網(wǎng)IP地址)轉(zhuǎn)換為公網(wǎng)IP地址過(guò)程。此轉(zhuǎn)換可以使用靜態(tài)、動(dòng)態(tài)等轉(zhuǎn)換方式,且內(nèi)部的多臺(tái)主機(jī)共用同一公網(wǎng)IP地址進(jìn)行外網(wǎng)訪問(wèn)。
  2. DNAT是外網(wǎng)訪問(wèn)私網(wǎng)時(shí),報(bào)文中目的IP地址(公網(wǎng)IP地址)轉(zhuǎn)換為私網(wǎng)IP地址過(guò)程。此轉(zhuǎn)換過(guò)程可以使用靜態(tài)、動(dòng)態(tài)、端口等轉(zhuǎn)換方式。

1.5 實(shí)例

公司(有固定公網(wǎng)IP地址)上網(wǎng)訪問(wèn)某網(wǎng)站簡(jiǎn)易過(guò)程

  1. PC訪問(wèn) www.xxxxxxx.com ,由于存在域名會(huì)通過(guò)DNS服務(wù)器解析域名從而獲得公網(wǎng)IP地址。
  2. PC收到此網(wǎng)站的公網(wǎng)IP地址后,封裝數(shù)據(jù)。源IP為PC的IP地址;目的地址為解析獲得的公網(wǎng)IP地址;目的端口號(hào)為80。并且將此報(bào)文發(fā)送給網(wǎng)關(guān)設(shè)備, 網(wǎng)關(guān)設(shè)備收到數(shù)據(jù)報(bào)文后通過(guò)路由關(guān)系發(fā)送到出口設(shè)備。
  3. 出口設(shè)備配置有NAT轉(zhuǎn)換關(guān)系,將報(bào)文中的源IP地址轉(zhuǎn)換為公網(wǎng)IP地址。重新封裝數(shù)據(jù)報(bào)文后發(fā)出。(這一步為SNAT)
  4. 數(shù)據(jù)報(bào)文到達(dá)公有網(wǎng)絡(luò)上,由于目的IP地址為公網(wǎng)IP地址,通過(guò)公網(wǎng)路由關(guān)系轉(zhuǎn)發(fā)到網(wǎng)站端(服務(wù)端)。
  5. 服務(wù)端收到報(bào)文后,檢查到目的地址為公網(wǎng)IP地址。通過(guò)本端配置的NAT映射關(guān)系,與公網(wǎng)IP地址相匹配的映射關(guān)系中尋找私網(wǎng)IP地址。找到映射關(guān)系后,將目的地址轉(zhuǎn)換為私網(wǎng)IP地址(這一步為DNAT)。在通過(guò)內(nèi)部網(wǎng)絡(luò)路由關(guān)系將數(shù)據(jù)報(bào)文轉(zhuǎn)發(fā)至相應(yīng)的服務(wù)器。
  6. 服務(wù)器將收到的報(bào)文通過(guò)相關(guān)計(jì)算,重新封裝報(bào)文,發(fā)送給用戶PC。原理不變,經(jīng)過(guò)多次數(shù)據(jù)交互。最后用戶PC接收到數(shù)據(jù)報(bào)文,網(wǎng)站就被打開(kāi)了。

2、iptables實(shí)現(xiàn)SNAT和DNAT,并對(duì)規(guī)則持久保存

實(shí)現(xiàn)SNAT和DNAT都需要開(kāi)啟內(nèi)核數(shù)據(jù)轉(zhuǎn)發(fā)功能

[root@localhost ~]# vim /etc/sysctl.conf
# 把下列選項(xiàng)改正1
net.ipv4.ip_forward=0
...
net.ipv4.ip_forward=1

2.1 SNAT

基于nat表的target,適用于固定的公網(wǎng)IP

SNAT選項(xiàng):

  • --to-source [ipaddr[-ipaddr]][:port[-port]]
  • --random

語(yǔ)法:

iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP

范例:

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.122.103

2.2 DNAT

nat表的target,適用于端口映射,即可重定向到本機(jī),也可以支持重定向至不同主機(jī)的不同端口,但不支持多目標(biāo),即不支持負(fù)載均衡功能

DNAT選項(xiàng):

  • --to-destination [ipaddr[-ipaddr]][:port[-port]]

DNAT語(yǔ)法:

iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --todestination InterSeverIP[:PORT]

范例:

[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.122.103 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.6:80

2.3 iptables規(guī)則持久保存:

CentOS 7、8

iptables-save > /PATH/TO/SOME_RULES_FILE

CentOS 6

# 將規(guī)則覆蓋保存至/etc/sysconfig/iptables文件中
service iptables save

2.4 加載規(guī)則

2.4.1 CentOS 7、8 重新載入預(yù)存規(guī)則文件中規(guī)則:
iptables-restore < /PATH/FROM/SOME_RULES_FILE

iptables-restore選項(xiàng)

  • -n, --noflush:不清除原有規(guī)則
  • -t, --test:僅分析生成規(guī)則集,但不提交
2.4.2 CentOS 6:
service iptables  restart       
#會(huì)自動(dòng)從/etc/sysconfig/iptables 重新載入規(guī)則

2.5 開(kāi)機(jī)自動(dòng)重載規(guī)則

2.5.1 用腳本保存各iptables命令;讓此腳本開(kāi)機(jī)后自動(dòng)運(yùn)行
/etc/rc.d/rc.local文件中添加腳本路徑 /PATH/TO/SOME_SCRIPT_FILE

用規(guī)則文件保存各規(guī)則,開(kāi)機(jī)時(shí)自動(dòng)載入此規(guī)則文件中的規(guī)則

在/etc/rc.d/rc.local文件添加

iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
2.5.2 定義Unit File, CentOS 7,8 可以安裝 iptables-services 實(shí)現(xiàn)iptables.service

范例: CentOS 7,8 使用 iptables-services

[root@centos8 ~]# yum -y install iptables-services
 
[root@centos8 ~]# cp /etc/sysconfig/iptables{,.bak}
 
#保存現(xiàn)在的規(guī)則到文件中方法1
 
[root@centos8 ~]# /usr/libexec/iptables/iptables.init save
 
#保存現(xiàn)在的規(guī)則到文件中方法2
 
iptables-save > /etc/sysconfig/iptables
 
#開(kāi)機(jī)啟動(dòng)
 
[root@centos8 ~]# systemctl enable iptables.service 

3、LVS調(diào)度算法總結(jié)

3.1 LVS的結(jié)構(gòu)

LVS由前端的負(fù)載均衡器(Load Balancer,LB)和后端的真實(shí)服務(wù)器(Real Server,RS)群組成。RS間可通過(guò)局域網(wǎng)或廣域網(wǎng)連接。LVS的這種結(jié)構(gòu)對(duì)用戶是透明的,用戶只能看見(jiàn)一臺(tái)作為L(zhǎng)B的虛擬服務(wù)器(Virtual Server),而看不到提供服務(wù)的RS群。當(dāng)用戶的請(qǐng)求發(fā)往虛擬服務(wù)器,LB根據(jù)設(shè)定的包轉(zhuǎn)發(fā)策略和負(fù)載均衡調(diào)度算法將用戶請(qǐng)求轉(zhuǎn)發(fā)給RS。RS再將用戶請(qǐng)求結(jié)果返回給用戶。

3.2 LVS內(nèi)核模型

1.當(dāng)客戶端的請(qǐng)求到達(dá)負(fù)載均衡器的內(nèi)核空間時(shí),首先會(huì)到達(dá)PREROUTING鏈。

2.當(dāng)內(nèi)核發(fā)現(xiàn)請(qǐng)求數(shù)據(jù)包的目的地址是本機(jī)時(shí),將數(shù)據(jù)包送往INPUT鏈。

3.LVS由用戶空間的ipvsadm和內(nèi)核空間的IPVS組成,ipvsadm用來(lái)定義規(guī)則,IPVS利用ipvsadm定義的規(guī)則工作,IPVS工作在INPUT鏈上,當(dāng)數(shù)據(jù)包到達(dá)INPUT鏈時(shí),首先會(huì)被IPVS檢查,如果數(shù)據(jù)包里面的目的地址及端口沒(méi)有在規(guī)則里面,那么這條數(shù)據(jù)包將被放行至用戶空間。

4.如果數(shù)據(jù)包里面的目的地址及端口在規(guī)則里面,那么這條數(shù)據(jù)報(bào)文將被修改目的地址為事先定義好的后端服務(wù)器,并送往POSTROUTING鏈。

5.最后經(jīng)由POSTROUTING鏈發(fā)往后端服務(wù)器。

3.3 LVS的包轉(zhuǎn)發(fā)模型

3.3.1 NAT模型:
  1. 客戶端將請(qǐng)求發(fā)往前端的負(fù)載均衡器,請(qǐng)求報(bào)文源地址是CIP(客戶端IP),后面統(tǒng)稱為CIP),目標(biāo)地址為VIP(負(fù)載均衡器前端地址,后面統(tǒng)稱為VIP)。
  2. 負(fù)載均衡器收到報(bào)文后,發(fā)現(xiàn)請(qǐng)求的是在規(guī)則里面存在的地址,那么它將客戶端請(qǐng)求報(bào)文的目標(biāo)地址改為了后端服務(wù)器的RIP地址并將報(bào)文根據(jù)算法發(fā)送出去。
  3. 報(bào)文送到Real Server后,由于報(bào)文的目標(biāo)地址是自己,所以會(huì)響應(yīng)該請(qǐng)求,并將響應(yīng)報(bào)文返還給LVS。
  4. 然后lvs將此報(bào)文的源地址修改為本機(jī)并發(fā)送給客戶端。

注意:在NAT模式中,Real Server的網(wǎng)關(guān)必須指向LVS,否則報(bào)文無(wú)法送達(dá)客戶端。

3.3.2 DR模型:
  1. 客戶端將請(qǐng)求發(fā)往前端的負(fù)載均衡器,請(qǐng)求報(bào)文源地址是CIP,目標(biāo)地址為VIP。
  2. 負(fù)載均衡器收到報(bào)文后,發(fā)現(xiàn)請(qǐng)求的是在規(guī)則里面存在的地址,那么它將客戶端請(qǐng)求報(bào)文的源MAC地址改為自己DIP的MAC地址,目標(biāo)MAC改為了RIP的MAC地址,并將此包發(fā)送給RS。
  3. RS發(fā)現(xiàn)請(qǐng)求報(bào)文中的目的MAC是自己,就會(huì)將次報(bào)文接收下來(lái),處理完請(qǐng)求報(bào)文后,將響應(yīng)報(bào)文通過(guò)lo接口送給eth0網(wǎng)卡直接發(fā)送給客戶端。

注意:需要設(shè)置lo接口的VIP不能響應(yīng)本地網(wǎng)絡(luò)內(nèi)的arp請(qǐng)求。

3.3.3 TUN模型:

①.客戶端將請(qǐng)求發(fā)往前端的負(fù)載均衡器,請(qǐng)求報(bào)文源地址是CIP,目標(biāo)地址為VIP。

②.負(fù)載均衡器收到報(bào)文后,發(fā)現(xiàn)請(qǐng)求的是在規(guī)則里面存在的地址,那么它將在客戶端請(qǐng)求報(bào)文的首部再封裝一層IP報(bào)文,將源地址改為DIP,目標(biāo)地址改為RIP,并將此包發(fā)送給RS。

③.RS收到請(qǐng)求報(bào)文后,會(huì)首先拆開(kāi)第一層封裝,然后發(fā)現(xiàn)里面還有一層IP首部的目標(biāo)地址是自己lo接口上的VIP,所以會(huì)處理次請(qǐng)求報(bào)文,并將響應(yīng)報(bào)文通過(guò)lo接口送給eth0網(wǎng)卡直接發(fā)送給客戶端。

注意:需要設(shè)置lo接口的VIP不能在共網(wǎng)上出現(xiàn)。

3.4 LVS的調(diào)度算法

LVS的調(diào)度算法分為靜態(tài)與動(dòng)態(tài)兩類。

3.4.1 靜態(tài)算法(4種):只根據(jù)算法進(jìn)行調(diào)度 而不考慮后端服務(wù)器的實(shí)際連接情況和負(fù)載情況
  1. RR:輪叫調(diào)度(Round Robin)
      調(diào)度器通過(guò)”輪叫”調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載?
  2. WRR:加權(quán)輪叫(Weight RR)
      調(diào)度器通過(guò)“加權(quán)輪叫”調(diào)度算法根據(jù)真實(shí)服務(wù)器的不同處理能力來(lái)調(diào)度訪問(wèn)請(qǐng)求。這樣可以保證處理能力強(qiáng)的服務(wù)器處理更多的訪問(wèn)流量。調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。
  3. DH:目標(biāo)地址散列調(diào)度(Destination Hash )
      根據(jù)請(qǐng)求的目標(biāo)IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。
  4. SH:源地址 hash(Source Hash)
      源地址散列”調(diào)度算法根據(jù)請(qǐng)求的源IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空?
3.4.2 動(dòng)態(tài)算法(6種):前端的調(diào)度器會(huì)根據(jù)后端真實(shí)服務(wù)器的實(shí)際連接情況來(lái)分配請(qǐng)求
  1. LC:最少鏈接(Least Connections)
      調(diào)度器通過(guò)”最少連接”調(diào)度算法動(dòng)態(tài)地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上。如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用”最小連接”調(diào)度算法可以較好地均衡負(fù)載。
  2. WLC:加權(quán)最少連接(默認(rèn)采用的就是這種)(Weighted Least Connections)
      在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用“加權(quán)最少鏈接”調(diào)度算法優(yōu)化負(fù)載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動(dòng)連接負(fù)載?調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。
  3. SED:最短延遲調(diào)度(Shortest Expected Delay )
      在WLC基礎(chǔ)上改進(jìn),Overhead = (ACTIVE+1)*256/加權(quán),不再考慮非活動(dòng)狀態(tài),把當(dāng)前處于活動(dòng)狀態(tài)的數(shù)目+1來(lái)實(shí)現(xiàn),數(shù)目最小的,接受下次請(qǐng)求,+1的目的是為了考慮加權(quán)的時(shí)候,非活動(dòng)連接過(guò)多缺陷:當(dāng)權(quán)限過(guò)大的時(shí)候,會(huì)倒置空閑服務(wù)器一直處于無(wú)連接狀態(tài)。
  4. NQ永不排隊(duì)/最少隊(duì)列調(diào)度(Never Queue Scheduling NQ)
      無(wú)需隊(duì)列。如果有臺(tái) realserver的連接數(shù)=0就直接分配過(guò)去,不需要再進(jìn)行sed運(yùn)算,保證不會(huì)有一個(gè)主機(jī)很空間。在SED基礎(chǔ)上無(wú)論+幾,第二次一定給下一個(gè),保證不會(huì)有一個(gè)主機(jī)不會(huì)很空閑著,不考慮非活動(dòng)連接,才用NQ,SED要考慮活動(dòng)狀態(tài)連接,對(duì)于DNS的UDP不需要考慮非活動(dòng)連接,而httpd的處于保持狀態(tài)的服務(wù)就需要考慮非活動(dòng)連接給服務(wù)器的壓力。
  5. LBLC:基于局部性的最少鏈接(locality-Based Least Connections)
      基于局部性的最少鏈接”調(diào)度算法是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)?該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器是可用的且沒(méi)有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則用“最少鏈接”的原則選出一個(gè)可用的服務(wù)器,將請(qǐng)求發(fā)送到該服務(wù)器?
  6. LBLCR:帶復(fù)制的基于局部性最少連接(Locality-Based Least Connections with Replication)
      帶復(fù)制的基于局部性最少鏈接”調(diào)度算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)?它與LBLC算法的不同之處是它要維護(hù)從一個(gè)目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個(gè)目標(biāo)IP地址到一臺(tái)服務(wù)器的映射?該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址對(duì)應(yīng)的服務(wù)器組,按”最小連接”原則從服務(wù)器組中選出一臺(tái)服務(wù)器,若服務(wù)器沒(méi)有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器超載,則按“最小連接”原則從這個(gè)集群中選出一臺(tái)服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請(qǐng)求發(fā)送到該服務(wù)器?同時(shí),當(dāng)該服務(wù)器組有一段時(shí)間沒(méi)有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的程度。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容