NAT: 支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链
请求报文:修改源/目标IP,
响应报文:修改源/目标IP,根据跟踪机制自动实现
NAT的实现分为下面类型:
SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装,请求报文:修改源IP
DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP
SNAT
基于nat表的target,适用于固定的公网IP
SNAT选项:
- to-source ipaddr[-ipaddr]]
- random
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source
ExtIP
表 nat 总出口 -s 本地地址 出口ip
注意需要开启 ip_forward
SNAT转换前提条件
- 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
- Linux网关开启IP路由转发 (linxu系统本身是没有转发功能,只有路由发送数据)
SNAT实验
SNAT:内网访问外网
实验环境:
- centos7-5 (外网服务器) ens33 IP地址(仅主机):12.0.0.100
- centos7-6 (网关服务器) ens33 IP地址(nat):172.16.88.8 ;ens36 IP地址(仅主机):12.0.0.1
- centos7-7 (内网服务器) ens33 IP地址(nat):172.16.88.9
实验效果:
7-7可以访问7-5,并且7-5的日志当中客户端是12.0.0.1
实验步骤:
1. 7-7内网服务器的设置
安装httpd服务,启动服务,修改主机名,生成主页文件:
[root@localhost ~]# systemctl stop firewalld.service[root@localhost ~]# setenforce 0[root@localhost ~]# yum install httpd -y[root@localhost ~]# hostnamectl set-hostname web1[root@localhost ~]# systemctl enable --now httpd[root@localhost ~]# echo "7-7 7-7" > /var/www/html/index.html[root@localhost ~]# curl 127.0.0.1
7-7 7-7[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33[root@localhost ~]# systemctl restart network
2. 7-6网关服务器配置
[root@localhost ~]# cd /etc/sysconfig/network-scripts/[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36[root@localhost network-scripts]# vi ifcfg-ens36[root@localhost network-scripts]#systemctl restart network //重启服务
开启路由转发
[root@localhost network-scripts]# sysctl -a |grep ip_forward //查看查看内核参数net.ipv4.ip_forward = 0net.ipv4.ip_forward_use_pmtu = 0sysctl: reading key "net.ipv6.conf.all.stable_secret"sysctl: reading key "net.ipv6.conf.default.stable_secret"sysctl: reading key "net.ipv6.conf.ens33.stable_secret"sysctl: reading key "net.ipv6.conf.ens36.stable_secret"sysctl: reading key "net.ipv6.conf.lo.stable_secret"sysctl: reading key "net.ipv6.conf.virbr0.stable_secret"sysctl: reading key "net.ipv6.conf.virbr0-nic.stable_secret"[root@localhost network-scripts]# vi /etc/sysctl.conf //修改内核参数[root@localhost network-scripts]# sysctl -p //生效net.ipv4.ip_forward = 1
3. 7-5 外网服务器配置
安装httpd服务,启动服务,修改主机名,生成主页文件:
[root@host5:~# ]yum install httpd -y[root@host5:~# ]systemctl enable --now httpd[root@host5:~# ]echo "7-5 7-5" > /var/www/html/index.html[root@host5:~# ]curl 127.0.0.17-5 7-5[root@host5:~# ]curl 172.16.88.97-7 7-7
随后将网卡改为仅主机模式
[root@host5:~# ]vi /etc/sysconfig/network-scripts/ifcfg-ens33 //修改网卡配置[root@host5:~# ]systemctl restart network
4. 测试内外网能否相互访问
测试一下7-5与7-7能否相互访问[root@host5:~# ]curl 172.16.88.97-7 7-7[root@localhost ~]# curl 12.0.0.1007-5 7-5
注意:只是模拟环境中能够相互访问,外网机器的访问日志中出现的是内网地址,实际不可能存在。 所以要做SNAT,将内网机器的源地址由内网转换为公网。
5. 7-6网关服务器添加防火墙策略
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 172.16.88.0/24 -o ens36 -j SNAT --to 12.0.0.1
6. 7-7访问7-5,随后查看7-5日志验证实验结果
DNAT
DNAT原理与应用:
DNAT应用环境:
在Internet中发布位于局域网内的服务器
DNAT原理:
目的地址转换,根据指定条件修改数据包的目的IP地址,保证了内网服务器的安全,通常被叫做目的映谢。
DNAT转换前提条件:
1.局域网的服务器能够访问Internet
2.网关的外网地址有正确的DNS解析记录 3. Linux网关开启IP路由转发
DNAT实验
将内网服务器共享到外网
实验环境:
- centos7-5 (外网服务器) ens33 IP地址(仅主机):12.0.0.100
- centos7-6 (网关服务器) ens33 IP地址(nat):172.16.88.8 ;ens36 IP地址(仅主机):12.0.0.1
- centos7-7 (内网服务器) ens33 IP地址(nat):172.6.88.9
实验效果:
- 7-1能访问公网地址12.0.0.1,访问12.0.0.1等于访问192.168.204.30
实验步骤:
添加规则前:
[root@host5:~# ]curl 12.0.0.1curl: (7) Failed connect to 12.0.0.1:80; 拒绝连接
添加规则:
[root@localhost ~]# iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 172.16.88.9//从 ens36 网卡进入的流量,目的地址是12.0.0.1的并且访问tcp的 目的端口是80的流量,就跳转到 172.16.88.9
添加规则后:
[root@host5:~# ]curl 12.0.0.17-7 7-7