网络技术之NAT地址转换实例!

286 阅读4分钟

这是我参与 8 月更文挑战的第 30 天,活动详情查看: 8月更文挑战

NAT简介

NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。

这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。

NAT的实现方式有三种,即静态转换Static Nat动态转换Dynamic Nat端口多路复用OverLoad

静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。

动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。

端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,网络中应用最多的就是端口多路复用方式。

思科锐捷设备配置NAT实例

 

R1:

R1(config)#access-list 1 permit 172.16.1.0 0.0.0.255  ->注意ACL要用反掩码

R1(config)#ip nat inside source list 1 interface g1/0 overload 

->这个overload一定要加,不然转化不成功

R1(config-if)#int g0/0

R1(config-if)#ip nat inside

R1(config-if)#ip add 172.16.1.1 255.255.255.0

R1(config-if)#int g1/0

R1(config-if)#ip nat outside

R1(config-if)#ip add 10.1.12.1 255.255.255.0

R2:

R2(config)#ip nat pool NAT 10.1.12.2 10.1.12.2 netmask 255.255.255.0

R2(config)#access-list 1 permit 172.16.1.0 0.0.0.255

R2(config)#ip nat inside source list 1 pool NAT overload

R2(config)#ip nat inside source static tcp 172.16.1.2 80 10.1.12.2 80   ->将PC280端口做端口映射出去

R2(config)#int g0/0

R2(config-if)#ip nat inside

R2(config-if)#ip add 172.16.1.1 255.255.255.0

R2(config-if)#int g1/0       

R2(config-if)#ip nat outside

R2(config-if)#ip add 10.1.12.2 255.255.255.0

说一下NAT的一些坑点吧,第一就是overlord一定要加,第二就是一定设置insideoutside接口

配置完成后,我们使用PC1去ping一下R2,发现可以通,说明NAT转化成功,如果没有转化R2是没有路由到PC1的

在R1上查看NAT的转化记录,发现已经成功转化了,冒号后面后面表示对应的端口号,这样做是为了可以将多个IP地址转化为一个IP地址。由于多个IP地址对应成了一个,要怎么才能知道回程的数据包是要发给谁,这个时候就要利用端口号进行标识。

在R1的G0/0进行抓包,发现数据包还没有转化

在R1的G1/0抓包发现数据包的原IP地址已经被转化为这个接口的IP地址

接下来是PC2去pingR1

可以看到使用NAT pool定义地址池去转化也没有问题

在PC1上使用telnet去测试R2上的端口是否已经打开,从结果来看这个结果是打开状态

在R2的G1/0接口抓包可以看到TCP数据包成功被映射

在R2连接R1的G0/0接口由于做了端口映射,路由器发现这个有人访问了被映射的端口,也是数据包到这个接口又进行了转化

华为设备配置NAT实例

[R1]int g0/0/0

[R1-GigabitEthernet0/0/0]ip add 192.168.1.1 24

[R1-GigabitEthernet0/0/0]int g0/0/1

[R1-GigabitEthernet0/0/1]ip add 10.1.12.1 24 --配置ACL匹配需要转化的IP地址

[R1]acl number 2000

[R1-acl-basic-2000]rule 10 permit source 192.168.1.0 0.0.0.255 --使用Easy IP的方式去将ACL匹配到的IP地址转化为接口的IP地址

[R1]int g0/0/1

[R1-GigabitEthernet0/0/1]nat outbound 2000

[R2]int g0/0/0

[R2-GigabitEthernet0/0/0]ip add 10.1.12.2 24

[R2-GigabitEthernet0/0/0]nat server global 10.1.12.3 inside 192.168.1.2 ->进行服务器映射,这里有一个比较坑的就是需要在接口下进行映射,不然不会成功

[R2-GigabitEthernet0/0/0]int g0/0/1        

[R2-GigabitEthernet0/0/1]ip add 192.168.1.1 24

在R1的G0/0/1抓包可以看到NAT转化成功了,PC1的数据包的IP地址已经被转化为R1的接口地址了,所以可以访问到R2,顺便说一下为什么有一个数据包失败了呢,因为第一次和R2通信要进行ARP请求去获取MAC地址

接下来Server1开启http服务

PC1可以访问到Server1,说明映射成功

推荐阅读

Linux Shell编程基础!

Linux sudo和sudoers详解!

Linux部署samba服务器!

Linux Zabbix 5.0安装详解!

docker之docker-compose的使用!

docker之Dockerfile文件详解!