一、SNAT
①SNAT 应用环境:
局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由)
②SNAT原理:
源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映射
数据包从内网发送到公网时,SNAT会把数据包的源IP由私网IP转换成公网IP
当响应的数据包从公网发送到内网时,会把数据包的目的IP由公网IP转换为私网IP
③SNAT转换前提条件
- 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
- Linux网关开启IP路由转发
linxu系统本身是没有转发功能 只有路由发送数据
④实验
实验目的:
公司内有2台机器,但是只有一个公网ip,利用SNAT技术实现2台私网地址都可以访问公网。
实验拓朴图:
内网主机通过网关服务器的SNAT转换实现访问外网(公网)
内网部分 源ip是192.168.246.7 目的 ip 12.0.0.100
外网部分 源ip是 12.0.0.1 目的 ip 12.0.0.100
SNAT实验环境准备
三台服务器:PC1(centos7-1)客户端、PC2网关服务器(centos7-2)、PC3服务端(centos7-3)
硬件要求:PC1和PC3均只需一块网卡、PC2需要2块网卡
实验步骤:
首先关闭三台机器的防火墙和防护
[root@centos1 ~]#systemctl stop firewalld
[root@centos1 ~]#setenforce 0[root@centos2 ~]#systemctl stop firewalld
[root@centos2 ~]#setenforce 0[root@centos3 ~]#systemctl stop firewalld
[root@centos3 ~]#setenforce 0
①网关服务器:
第一步:先设置网关服务器的ip地址,两张网卡,ens33设置为内网,ens37设置为外网
先添加网卡
[root@centos2 ~]#cd /etc/sysconfig/network-scripts/
[root@centos2 network-scripts]#ls
ifcfg-ens33 ifdown-ipv6 ifdown-TeamPort ifup-ippp ifup-routes network-functions
ifcfg-lo ifdown-isdn ifdown-tunnel ifup-ipv6 ifup-sit network-functions-ipv6
ifdown ifdown-post ifup ifup-isdn ifup-Team
ifdown-bnep ifdown-ppp ifup-aliases ifup-plip ifup-TeamPort
ifdown-eth ifdown-routes ifup-bnep ifup-plusb ifup-tunnel
ifdown-ib ifdown-sit ifup-eth ifup-post ifup-wireless
ifdown-ippp ifdown-Team ifup-ib ifup-ppp init.ipv6-global
[root@centos2 network-scripts]#cp ifcfg-ens33 ifcfg-ens37
[root@centos2 network-scripts]#vim ifcfg-ens37
[root@centos2 network-scripts]#vim ifcfg-ens37
[root@centos2 network-scripts]#systemctl restart network
[root@centos2 network-scripts]#ip a
第二步:开启路由转发功能
[root@centos2 network-scripts]#sysctl -a|grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_use_pmtu = 0
sysctl: 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.ens37.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@centos2 network-scripts]#vim /etc/sysctl.conf
[root@centos2 network-scripts]#sysctl -p
net.ipv4.ip_forward = 1
[root@centos2 network-scripts]#sysctl -a|grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
sysctl: 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.ens37.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"
②内网客户端(192.168.246.7)
[root@centos1 ~]#rpm -q httpd
未安装软件包 httpd
[root@centos1 ~]#yum install httpd -y
第一步:修改内网服务器的网关ip地址,为网关服务器的ip地址
[root@centos1 ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@centos1 ~]#systemctl restart network
第二步:开启本机httpd服务,并写上一个测试网页index.html内容为haha
[root@centos1 ~]#systemctl start httpd
[root@centos1 ~]#echo "haha" > /var/www/html/index.html
[root@centos1 ~]#
③外网服务器:
[root@centos1 ~]#rpm -q httpd
未安装软件包 httpd
[root@centos1 ~]#yum install httpd -y
第一步:先修改外网服务器的ip地址和网关,都应该是12段的,ip地址是12.0.0.100,网关地址是12.0.0.1
[root@centos3 ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@centos3 ~]#systemctl restart network
会断,由于是不同网段
第二步:开启httpd服务
[root@centos3 ~]#systemctl start httpd
[root@centos3 ~]#echo "nihao" > /var/www/html/index.html
[root@centos3 ~]#tail -f /var/log/httpd/access_log
检测PC1(centos1)、PC2(centos2)、PC3(centos3)三台机器之间是否互通(使用虚拟机做实验默认是互通的,是由于处在同一环境中,生产环境内网和外网没有SNAT的情况下是不通的)
进入xhell:
再进入虚拟机:
在PC1上curl 服务端ip,然后在服务端实时查看/var/log/httpd/access_log日志。可查看到源ip为PC1的ip,所以是未经过NAT的,生产环境中不可能直接curl通。
④再次进入网关服务器:
前两步骤参照上文
第三步:设置iptables的转换规则
[root@centos2 ~]#iptables -t nat -A POSTROUTING -s 192.168.246.0/24 -o ens37 -j SNAT --to 12.0.0.1##表示当内网192.168.246.0网段的主机访问外网的时候,网关服务器会通过SNAT转换源ip地址为网关服务器的公网ip12.0.0.1
方法一:已知公网地址
验证:
在xhell中用内网客户机(192.168.246.7)去访问外网ip地址
再去虚拟机外网服务器查看:centos3
总结
内网主机通过网关服务器的SNAT转换实现访问外网
不经过nat的地址为PC1(centos1)自己的地址,使用虚拟机环境才会出现这种情况,市场环境是不通的。
经过nat之后的地址是公司的公网ip地址,由网关服务器iptables规则SNAT实现
方法二:未知公网地址
验证:
二、DNAT
①DNAT应用环境:
在Internet中发布位于局域网内的服务器
②DNAT原理:
目的地址转换,根据指定条件修改数据包的目的IP地址,保证了内网服务器的安全,通常被叫做目的映射。
③DNAT转换前提条件:
DNAT转换前提条件:
1.局域网的服务器能够访问Internet
2.网关的外网地址有正确的DNS解析记录 3. Linux网关开启IP路由转发
④实验:
实验拓朴图:
外网主机访问网关服务器地址,通过DNAT实现访问内网服务器
外网访问内网访问12.0.0.1 相当与访问内网地址192.168.246.7
实验步骤:
前边步骤参照SNAT前3步
④再次进入网关服务器:
设置iptables的转换规则
[root@centos2 ~]#iptables -t nat -A PREROUTING -i ens37 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.246.7
[root@centos2 ~]#iptables -t nat -vnL
进入外网服务器进行直接访问,会被拒绝 , 接下来需要设置防火墙规则(如上图)
进入内网服务器查看验证;
总结
内网主机通过网关服务器的SNAT转换实现访问外网
外网主机访问网关服务器地址,通过DNAT实现访问内网服务器