赞
踩
目录
Network Address Translation 网络地址转换
当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
ipv4版本的IP地址能用的大约有 43 亿左右,分给全球每个人一个ip地址都不够,将私网ip地址经过nat转换为公有ip,公有ip也可以经过nat转换为私有ip,解决了公网ip地址不足的问题,所有的局域网使用相同的公网地址
优点
节省了IP地址
保护了内网用户,内网ip经过nat转换出去修改了源ip地址,导致外网用户不知道你的内网ip是多少
缺点
转换了很多次,导致网络延迟
示例:局域网内的pc机想访问外网的服务器
在网络层的数据包内,源IP地址是自己的IP地址 192.168.1.2 目的IP是服务器的IP地址 203.51.23.55,那么经过NAT路由器转换以后,源IP地址就会转换为一个公网IP地址
125.25.65.3,这个公网IP是这整个局域网内的内网用户所共享的,所有局域网内的用户的ip地址经过NAT转换以后都会变成这个公网IP,最后由这个公网ip来和服务器进行连接
服务器收到请求以后就要响应客户机,此时在网络层面上,数据包内的源IP地址为服务器自己的IP地址203.51.23.55,目的IP为125.25.65.3,数据到达后经过NAT路由器,会根据NAT映射表来将数据转发给对应的客户机。
NAT映射表记录了源ip:端口 + 转换后的ip : 端口 目的ip:目的端口
linux的nat转换功能是linux内核完成的,所以nat映射表在内核里面
Linux里面的两种NAT
SNAT :局域网 ----- 外网 解决了出去的问题
DNAT : 外网 ----- 局域网 解决了进来的问题
源地址转换 Source Network Address Translation
局域网主机共享同一个公网IP地址介入Internet
修改数据包的源IP地址
SNAT策略的典型应用环境
局域网主机共享同一个公网IP地址介入Internet
网络拓扑图:
准备一台Linux服务器
添加两个网卡,一个ens33作WAN口(桥接模式),一个ens37(仅主机模式)作LAN口,这台服务器用作路由转发
准备一台内网服务器
准备一个网卡,ens33,设置仅主机模式,只和内网机器通信
Linux服务器网络适配器选择
内网服务器网络适配器选择:
Linux服务器ip配置:
- [root@localhost network-scripts]# cat ifcfg-ens33
- BOOTPROTO="none"
- NAME="ens33"
- UUID="34628a10-c85e-4ed2-8b89-5dce6dd2c903"
- DEVICE="ens33"
- ONBOOT="yes"
- IPADDR=192.168.1.100
- PREFIX=24
- GATEWAY=192.168.1.1
- DNS1=114.114.114.114
- [root@localhost network-scripts]# cat ifcfg-ens37
- BOOTPROTO="none"
- NAME="ens37"
- DEVICE="ens37"
- ONBOOT="yes"
- IPADDR=192.168.30.254
- PREFIX=24
- [root@localhost network-scripts]#
内网服务器ip配置:
- [root@localhost network-scripts]# cat ifcfg-ens33
- BOOTPROTO="none"
- NAME="ens33"
- UUID="34628a10-c85e-4ed2-8b89-5dce6dd2c903"
- DEVICE="ens33"
- ONBOOT="yes"
- IPADDR=192.168.30.100
- PREFIX=24
- GATEWAY=192.168.30.254
- DNS1=114.114.114.114
配置好了以后进行第一次测试,使用内网服务器进行测试,测试结果应该是能ping通网关和192.168.1.100,但是ping不通192.168.1.1
192.168.30.100能ping通网关192.168.30.254,也能ping通WAN口192.168.1.100
因为数据到达后会查路由表,发现192.168.1.0有直连路由可以到达,于是能ping通
但是ping不通H3c路由器,因为Linux服务器默认没有开启路由转发功能,需要我们手动设置
linux机器 默认不打开路由功能
0 表示不给其他的机器转发数据包
1 表示给其他的机器转发数据包 --> 路由器
临时开启路由转发功能:
注意:/proc/目录是放在内核中的,内核在内存中运行,重启后这些内核参数是会恢复默认值的
- [root@localhost /]# cat /proc/sys/net/ipv4/ip_forward
- 0
- [root@localhost /]# echo 1 >/proc/sys/net/ipv4/ip_forward
- [root@localhost /]# cat /proc/sys/net/ipv4/ip_forward
- 1
永久开启路由转发功能:
- [root@localhost /]# vim /etc/sysctl.conf
- net.ipv4.ip_forward = 1
配置SNAT策略
- # 关闭防火墙
- service firewalld stop
-
- # 清空防火墙的filter规则
- iptables -t filter -F
-
- # 清空防火墙中nat的规则
- iptables -t nat -F
-
- # 开启snat功能
- iptables -t nat -A POSTROUTING -s 192.168.30.0/24 -o ens33 -j SNAT --to-source 192.168.1.100
查看刚才配置的规则:
- [root@localhost ~]# iptables -t nat -L -n
- Chain PREROUTING (policy ACCEPT)
- target prot opt source destination
-
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain POSTROUTING (policy ACCEPT)
- target prot opt source destination
- SNAT all -- 192.168.30.0/24 0.0.0.0/0 to:192.168.1.100
利用iptables规则来给SNAT功能传递参数
示例:
iptables -t nat -A POSTROUTING -s 192.168.30.0/24 -o ens33 -j SNAT --to-source 192.168.1.100
- iptables -t nat -A POSTROUTING 是防火墙策略的位置
- iptables 是一个防火墙命令
- -t nat 指定在nat表
- -A add 增加
- POSTROUTING 是nat表里的一个位置
-
- -s 192.168.30.0/24 指定内网的源ip地址 source
- -o ens33 指定数据出去的接口 out interface
- -j SNAT 采用SNAT策略,将ip包里的源ip地址进行修改
- --to-source 192.168.1.100 告诉防火墙修改源ip地址为192.168.1.100 --> WAN口的ip地址
完成后测试
都能ping通了。
在网关使用了SNAT策略后:
DNAT策略的应用环境
目标地址转换 Destination Network Address Translation
在Internet中发布位于企业局域网内的服务器
修改数据包的目标IP地址
在网关中使用了DNAT策略发布内网服务器
DNAT实验脚本
- #开启路由功能
- echo 1 >/proc/sys/net/ipv4/ip_forward
- #关闭防火墙
- service firewalld stop
- #清空防火墙里的filter表的规则
- iptables -t filter -F
- #清空防火墙里的nat表的规则
- iptables -t nat -F
-
- #开启snat功能
- iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o ens33 -j SNAT --to-source 192.168.2.130
-
- #开启dnat功能,发布web服务器
- iptables -t nat -A PREROUTING -i ens33 -d 192.168.2.130 -p tcp --dport 80 -j DNAT --to-destination 192.168.20.100:80
-
- #开启dnat功能,发布ssh服务器
- iptables -t nat -A PREROUTING -i ens33 -d 192.168.2.130 -p tcp --dport 2233 -j DNAT --to-destination 192.168.20.103:22
- #开启dnat功能,发布mysql服务器
- iptables -t nat -A PREROUTING -i ens33 -d 192.168.2.130 -p tcp --dport 3306 -j DNAT --to-destination 192.168.20.103:3306
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。