深入淺出NAT:從原理到實踐,全面解析網路地址轉換技術!

NAT概述

由全球IP地址分配機構,IANA (Internet Assigned Numbers Authority)管理的IPv4地址,於2011年完全用盡。但是需要連線網際網路必須要IP地址,但是公網地址已經沒有了,因此出現了將私網地址轉換成公網地址進行網路訪問的解決方法。
A、B、C類地址中各預留了一些地址專門作為私有IP地址:
  • A類:10.0.0.0 ~ 10.255.255.255
  • B類:172.16.0.0 ~ 172.31.255.255
  • C類:192.168.0.0 ~ 192.168.255.255

簡單講就是一個企業出口申請從運營商申請一個IP地址部署在出口三層網路裝置上,內部使用私網地址網段,進行網路訪問時會將內網訪問的資料包IP地址轉換成那個唯一的IP地址。

NAT技術原理

NAT:對IP資料報文中的IP地址進行轉換,是一種在現網中被廣泛部署的技術,一般部署在網路出口裝置,例如路由器或防火牆上。
NAT的典型應用場景:在私有網路內部(園區、家庭)使用私有地址,出口裝置部署NAT,對於“從內到外”的流量,網路裝置透過NAT將資料包的源地址進行轉換(轉換成特定的公有地址),而對於“從外到內的”流量,則對資料包的目的地址進行轉換。

這裡還要簡單瞭解一下另外一個概念:埠。之前在網路參考模型知道網路是分層結構,網路層是IP協議,傳輸層有TCP和UDP,使用埠進行區分不同的上層資料。實際訪問網路也是透過IP+埠+MAC進行區分目的地的。TCP和UDP的埠號範圍都是0-65535,這意味著每個協議有65536個埠。埠號小於256的定義為常用埠,伺服器一般透過常用埠號識別。大多數TCP/IP實現給臨時埠號分配1024~5000之間的埠號,大於5000的埠是給其他服務預留的。常見的埠有FTP的21號埠,HTTP服務的80埠,SMTP的25埠和HTTPS的443埠。
NAT作用:
1、把內網私網IP轉換為公網IP
2、隱藏內網、起到包含內網作用
3、適當緩解IPV4地址枯竭
4、解決公網裝置回包路由問題

NAT分類

隨著網路需要的不同可以有不同的實現方式。

靜態NAT

每個私有地址都有一個與之對應固定的公有地址,私有地址和公有地址之間的關係是一對一對映。支援雙向互訪:私有地址訪問Internet經過出口裝置NAT轉換時,會被轉換成對應的公有地址。同時,外部網路訪問內部網路時,其報文中攜帶的公有地址(目的地址)也會被NAT裝置轉換成對應的私有地址。

適用於有多個公網地址,內網主機較少,能夠實現一對一轉換的情形。
配置示例:

#

1

、介面檢視下配置靜態

NAT

[

Huawei

-

GigabitEthernet0

/

0

/

0

] nat

staticglobal

{

global

-address} inside {
host-address }
#

2

、也可以在系統檢視下配置靜態

NAT

[

Huawei

] nat

staticglobal

{

global

-address} inside {
host-address }
# 還要在介面開啟

[

Huawei

-

GigabitEthernet0

/

0

/

0

] nat

static

enable

動態NAT

動態NAT:靜態NAT嚴格地一對一進行地址對映,這就導致即便內網主機長時間離線或者不傳送資料時,與之對應的公有地址也處於使用狀態。為了避免地址浪費,動態NAT提出了地址池的概念:所有可用的公有地址組成地址池。
當內部主機訪問外部網路時臨時分配一個地址池中未使用的地址,並將該地址標記為“In Use”。當該主機不再訪問外部網路時回收分配的地址,重新標記為“Not Use”。

配置示例:

# 建立地址池,配置公有地址範圍,其中group-index為地址池編號,start-address、end-address分別為地址池起始地址、結束地址

[

Huawei

] nat address-group group-index start-address end-address
# 建立

ACL

,只有匹配上

ACL

才進行

NAT

轉換

[

Huawei

] acl number

[

Huawei

-acl-basic-number ] rule permit source source-address source-wildcard
# 介面檢視下配置帶地址池的

NATOutbound

,no-pat引數指定不進行埠轉換

[

Huawei

-

GigabitEthernet0

/

0

/

0

] nat outbound acl-number address-group group-index [ no-pat ]
# 檢視轉換資訊

dis nat session all

ACL下次進行學習,大概意思就是隻有指定主機才會進行轉換。
動態NAT就是將多個可用的公網地址設定成一個地址池,內網主機需要訪問外網時,選擇一個閒置狀態的IP地址並生成NAT表項,當地址不使用時再釋放。
動態NAT還是基於地址一對一進行轉發,要等待連線釋放才能進行下一個地址轉發,效率較低,比如內網主機100個,公網IP4個,那就效率很低了,雖然實際轉發速度很快。

NAPT

動態NAT選擇地址池中的地址進行地址轉換時不會轉換埠號,即No-PAT(No-Port Address Translation,非埠地址轉換),公有地址與私有地址還是1:1的對映關係,無法提高公有地址利用率。
NAPT(Network Address and Port Translation,網路地址埠轉換):從地址池中選擇地址進行地址轉換時不僅轉換IP地址,同時也會對埠號進行轉換,從而實現公有地址與私有地址的1:n對映,可以有效提高公有地址利用率。
實際網路訪問只需要一個埠或者幾個埠即可進行網路訪問,因此只需要進行埠的轉換即可,一個TCP和UDP埠範圍為0-65535,進行埠的轉發可以實現效率的提升。

配置示例:

# 在動態

NAT

的配置上不新增--no-pat即可

[

R1

-

GigabitEthernet0

/

0

/

1

]nat outbound

2000

address-group

1

簡單以訪問百度網頁為例講一下埠通訊:
  • 主機從1024-65535之間範圍起一個埠,如55508
  • 目的地為百度www.baidu.com,目的埠http:80,https:443
  • 出口地址:111.21.8.5,192.168.1.1:55508–>111.21.8.5:62105 –> www.baidu.com:443
  • 出口裝置記錄轉換表項,百度返回資料進行對應的轉換

Easy IP

Easy IP:實現原理和NAPT相同,同時轉換IP地址、傳輸層埠,區別在於Easy IP沒有地址池的概念,使用介面地址作為NAT轉換的公有地址。
Easy IP適用於不具備固定公網IP地址的場景:如透過DHCP、PPPoE撥號獲取地址的私有網路出口,可以直接使用獲取到的動態地址進行轉換。
這個實際才是工作中常見方式,透過電信的光貓自動獲取到一個地址,進行源IP和源埠的轉換,沒有自己的公網地址。

配置示例:

# 示例,將當前介面地址作為公網地址進行源ip和埠的對映

[

R1

-

GigabitEthernet0

/

0

/

1

]nat outbound

2000

NAT Server

上面的動態地址轉換與埠轉換是自動轉換埠,不能指定埠的對應關係,這時候如果內網有伺服器需要釋出到公網對外就需要使用NAT Server。
NAT Server:指定[公有地址:埠]與[私有地址:埠]的一對一對映關係,將內網伺服器對映到公網,當私有網路中的伺服器需要對公網提供服務時使用。
外網主機主動訪問[公有地址:埠]實現對內網伺服器的訪問。

簡單來說就是指定內網伺服器地址和埠對映到公網地址的指定埠,供外部訪問公網地址對應埠實現服務釋出。
配置示例:

# 進入對應介面

[

R1

]interface

GigabitEthernet0

/

0

/

1

# 配置地址

[

R1

-

GigabitEthernet0

/

0

/

1

]ip address

122.1.2.124

# 指定對映

TCP

/

UDP

協議,指定內網地址和公網地址和埠

[

R1

-

GigabitEthernet0

/

0

/

1

]nat server protocol tcp

global202.10.10.180

inside

192.168.1.18080

一般適用於有固定公網地址,用於對外發布服務提供公網訪問,一個公網地址可以對映多個埠。

典型網路配置實驗

拓撲圖如下:

配置示例:
核心交換機

# 核心交換機配置

VLAN

與閘道器地址,下聯交換機配置trunk,上聯路由器配置

ACCESSVLAN30

interface

Vlanif10

ip address

192.168.10.254255.255.255.0

#

interface

Vlanif20

ip address

192.168.20.254255.255.255.0

#

interface

Vlanif30

ip address

10.0.0.2255.255.255.252

#

interface

MEth0

/

0

/

1

#

interface

GigabitEthernet0

/

0

/

1

port link-type access

port

default

vlan

30

#

interface

GigabitEthernet0

/

0

/

2

port link-type trunk

port trunk allow-pass vlan

1020

#

interface

GigabitEthernet0

/

0

/

3

port link-type trunk

port trunk allow-pass vlan

1020

# 配置預設路由指向路由器

ip route-

static0.0.0.00.0.0.010.0.0.1

出口路由器:

# 配置介面地址和

NAT

interface

GigabitEthernet0

/

0

/

0

ip address

122.12.1.1255.255.255.252

nat outbound

2000

#

interface

GigabitEthernet0

/

0

/

1

ip address

10.0.0.1255.255.255.252

# 配置路由,向外的預設路由和會內網的靜態路由

ip route-

static0.0.0.00.0.0.0122.12.1.2

ip route-

static192.168.10.0255.255.255.010.0.0.2

ip route-

static192.168.20.0255.255.255.010.0.0.2

#

ACL

acl number

2000

rule

5

permit

Internet:

# 中間路由器不需要額外配置

interface

GigabitEthernet0

/

0

/

0

ip address

122.12.1.2255.255.255.252

#

interface

GigabitEthernet0

/

0

/

1

ip address

23.12.1.2255.255.255.252

百度:

# 配置地址和預設路由

interface

GigabitEthernet0

/

0

/

1

ip address

23.12.1.1255.255.255.252

#

ip route-

static0.0.0.00.0.0.023.12.1.2

實際情況下一個企業只有一個或者幾個公網地址,為了內網主機的私網地址能夠訪問網際網路需要在出口裝置進行NAT地址轉換,實際情況中採用NAPT和Easy IP進行地址和埠同時轉換,然後如果有內部伺服器需要對外提供訪問可以透過NAT Server進行埠一對一對映。
連結:https://developer.aliyun.com/article/1456318?spm=a2c6h.24874632.expert-profile.205.7a0227f4T3iYnI
                                                              (版權歸原作者所有,侵刪)


相關文章