NAT(Network Address Translation,网络地址转换),当在专用网内部的一些主机原本已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但如今又想和因特网上的主机通讯(并不须要加密)时,可以使用NAT方法。html
借助于NAT,私有地址的"内部"网络经过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少许IP地址便可实现私有地址网络内全部计算机与Internet的通讯需求。
NAT将自动修改IP报文的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程当中自动完成。有些应用程序将源IP地址嵌入到IP报文的数据部分中,因此还须要同时对报文的数据部分进行修改,以匹配IP头中已经修改过的源IP地址。不然,在报文数据部分嵌入IP地址的应用程序就不能正常工做。web
(1)NAT的优势
节省共有合法IP地址
处理地址重叠
加强灵活性
安全性vim
(2)NAT缺点
延迟增大
配置和维护的复杂性
不支持某些应用,能够经过静态NAT映射来避免安全
1.静态转换
是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,能够实现外部网络对内部网络中某些特定设备(如服务器)的访问。
2.动态转换
是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不肯定的,是随机的,全部被受权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址能够进行转换,以及用哪些合法地址做为外部地址时,就能够进行动态转换。动态转换可使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。能够采用动态转换的方式。
3.端口多路复用(PAT)
是指改变外出数据包的源端口并进行端口转换,即端口地址转换采用端口多路复用方式。内部网络的全部主机都可共享一个合法外部IP地址实现对Internet的访问,从而能够最大限度地节约IP地址资源。同时,又可隐藏网络内部的全部主机,有效避免来自internet的叨扰。bash
内部 | 外部 |
---|---|
内部局部地址 | 内部全局地址 |
外部局部地址 | 外部全局地址 |
简单转换条目 ip 扩辗转换条目 ip和port(端口)
SW#conf t SW(config)#no ip routing //关闭路由功能 SW(config)#int f1/0 //进入端口f1/0 SW(config-if)#speed 100 //配置速率 SW(config-if)#dup full //配置全双工模式 SW(config-if)#ex
R2#conf t R2(config)#int f0/0 R2(config-if)#ip add 12.0.0.2 255.255.255.0 R2(config-if)#no shut R2(config-if)#int f0/1 R2(config-if)#ip add 13.0.0.1 255.255.255.0 R2(config-if)#no shut R2(config-if)#ex R2(config)#ip route 0.0.0.0 0.0.0.0 12.0.0.1 //配置默认路由
R1#conf t R1(config)#int f0/0 R1(config-if)#ip add 192.168.100.1 255.255.255.0 R1(config-if)#no shut R1(config-if)#int f0/1 R1(config-if)#ip add 12.0.0.1 255.255.255.0 R1(config-if)#no shut R1(config-if)#ex R1(config)#ip route 0.0.0.0 0.0.0.0 12.0.0.2
1.配置客户机IP地址服务器
PC1> ip 192.168.100.10 192.168.100.1 Checking for duplicate address... PC1 : 192.168.100.10 255.255.255.0 gateway 192.168.100.1 PC2> ip 192.168.100.20 192.168.100.1 Checking for duplicate address... PC1 : 192.168.100.20 255.255.255.0 gateway 192.168.100.1 PC3> ip 13.0.0.13 13.0.0.1 Checking for duplicate address... PC1 : 13.0.0.13 255.255.255.0 gateway 13.0.0.1
2.测试互通性网络
PC1> ping 13.0.0.13 13.0.0.13 icmp_seq=1 timeout 13.0.0.13 icmp_seq=2 timeout 84 bytes from 13.0.0.13 icmp_seq=3 ttl=62 time=45.879 ms 84 bytes from 13.0.0.13 icmp_seq=4 ttl=62 time=37.925 ms 84 bytes from 13.0.0.13 icmp_seq=5 ttl=62 time=38.894 ms PC1> ping 192.168.100.20 84 bytes from 192.168.100.20 icmp_seq=1 ttl=64 time=0.000 ms 84 bytes from 192.168.100.20 icmp_seq=2 ttl=64 time=0.000 ms 84 bytes from 192.168.100.20 icmp_seq=3 ttl=64 time=0.000 ms 84 bytes from 192.168.100.20 icmp_seq=4 ttl=64 time=0.000 ms 84 bytes from 192.168.100.20 icmp_seq=5 ttl=64 time=0.069 ms
R1(config)#ip nat inside source static 192.168.100.10 12.0.0.10 R1(config)#ip nat inside source static 192.168.100.20 12.0.0.20 R1(config)#int f0/0 R1(config-if)#ip nat inside //将NAT应用于内部 R1(config)#int f0/1 R1(config-if)#ip nat out //将NAT应用于内部 R1#debug ip nat //测试NAT地址 IP NAT debugging is on
PC1> ping 13.0.0.13 13.0.0.13 icmp_seq=1 timeout 13.0.0.13 icmp_seq=2 timeout 84 bytes from 13.0.0.13 icmp_seq=3 ttl=62 time=41.886 ms 84 bytes from 13.0.0.13 icmp_seq=4 ttl=62 time=38.922 ms R1# *Mar 1 00:30:38.259: NAT*: s=192.168.100.10->12.0.0.10, d=13.0.0.13 [1514] R1# *Mar 1 00:30:40.259: NAT*: s=192.168.100.10->12.0.0.10, d=13.0.0.13 [1515] R1# *Mar 1 00:30:42.263: NAT*: s=192.168.100.10->12.0.0.10, d=13.0.0.13 [1516] *Mar 1 00:30:42.291: NAT*: s=13.0.0.13, d=12.0.0.10->192.168.100.10 [1516] R1# *Mar 1 00:30:43.307: NAT*: s=192.168.100.10->12.0.0.10, d=13.0.0.13 [1517] *Mar 1 00:30:43.335: NAT*: s=13.0.0.13, d=12.0.0.10->192.168.100.10 [1517] R1# *Mar 1 00:30:44.347: NAT*: s=192.168.100.10->12.0.0.10, d=13.0.0.13 [1518] *Mar 1 00:30:44.379: NAT*: s=13.0.0.13, d=12.0.0.10->192.168.100.10 [1518] //出方向将源地址s=192.168.100.10转换成12.0.0.10,回方向将 目标地址d=12.0.0.10转换成192.168.100.10
环境需求:
一台Linux虚拟机(CentOS 7),做为局域网内提供服务服务器
一台Windows 虚拟机(win 7),做为公网的客户端tcp
[root@192 ~]# yum install httpd -y //安装服务ide
[root@192 ~]# vim /var/www/html/index.html //编辑测设网页测试
<hl>this is inside web</hl>
[root@192 ~]# systemctl start httpd //开启服务
[root@192 ~]# systemctl stop firewalld.service //关闭防火墙
[root@192 ~]# setenforce 0 //关闭加强型安全功能
1.绑定网卡
2.设定静态ip
root@192 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=88cf4975-29b8-4041-9cb0-456a56d1fddb DEVICE=ens33 ONBOOT=yes IPADDR=192.168.100.100 NETMASK=255.255.255.0 GATWAY=192.168.100.1 [root@192 ~]# service network start Starting network (via systemctl): [ 肯定 ]
R1#conf t R1(config)#int f0/0 R1(config-if)#ip add 192.168.100.1 255.255.255.0 R1(config-if)#no shut R1(config-if)#ex R1(config)#int f0/1 R1(config-if)#ip add 12.0.0.1 255.255.255.0 R1(config-if)#no shut R1(config-if)#ex
1.绑定网卡
2.设定静态ip
1.先查看Linux的服务端口号
[root@192 ~]# netstat -ntap | grep 80 tcp6 0 0 :::80 :::* LISTEN 2659/httpd
2.设定路由器上的NAT映射关系
R1(config)#ip nat inside source static tcp 192.168.100.100 80 12.0.0.100 8080 extendable R1(config)#int f0/0 R1(config-if)#ip nat in R1(config-if)#int f0/1 R1(config-if)#ip nat out R1(config-if)#end R1#debug ip nat IP NAT debugging is on
R1# *Mar 1 00:09:18.395: NAT*: TCP s=49163, d=8080->80 *Mar 1 00:09:18.395: NAT*: s=12.0.0.12, d=12.0.0.100->192.168.100.100 [119] //抓取到端口与地址转换的过程