SNAT与DNAT
SNAT
SNAT的应用环境
局域网主机共享单个公网IP地址接入Internet(私有IP不能在Internet中正常路由)
SNAT原理
修改数据包的源地址
SNAT转换前提条件
1.局域网各主机已正确设置IP地址、子网掩码、默认网关地址
2.Linux网关开启IP路由转发
有两种打开IP转发功能方式
临时打开:
echo 1 > /proc/sys/net/ipv4/ip_ forward
或
sysctl -w net.ipv4. ip_ forward=1
永久打开:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #将此行写入配置文件
sysctl -P #读取修改后的配置
SNAT转换
固定的公网IP地址
iptables -t nat -A POSTRORTING -s 192.168.80.0/24 -o ens33 -j SNAT --to 12.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to-source 12.0.0.1-12.0.0.10
内网IP 出站 外网网卡 外网IP或地址池
实验操作
安装httpd服务并开启
设置不同的网络,服务器centos5使用VMnet1,网关做两个网卡,客户端使用网络VMnet2
用服务器访问下自己试试,可以访问
配置网关服务器
重启网卡,可以看到配置IP地址有了
因为网关服务器是centos4,所以服务器的网关需要改成centos4的IP地址
可以看到网关服务器也可以去访问服务器IP
配置客户端,设置IP
可以看到我们可以ping通网关服务器
我们去访问下服务器,结果访问不了
我们需要打开IP路由转发
做SNAT转换,先查看规则,把规则都干掉
进行SNAT转换
我们再去访问就可以访问了
非固定的公网IP地址(共享动态IP地址)
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -0 ens33 -j MASQUERADE
.
注意!一个IP地址做SNAT转换 ,一般可以让内网100到200台主机实现上网。 |
DNAT
DNAT应用环境
在Internet中发布位于局域网内的服务器
DNAT原理
修改数据包的目的地址。
DNAT转换前提条件
1.局域网的服务器能够访问Internet
2.网关的外网地址有正确的DNS解析记录
3.Linux网关开启IP路由转发
vim /etc/ sysctl.conf
net.ipv4.ip_forward = 1
sysctl -P
DNAT转换(1)
发布内网的Web服务
#把从ens33进来的要访问web服务的数据包目的地址转换为192. 168.80.11
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.80.11
或
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11
入站 外网网卡 外网IP 内网服务器IP
iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.80.11-192.168.80.20
DNAT转换(2)
发布时修改目标端口
#发布局域网内部的OpenSSH服务器,外网主机需使用250端口进行连接
iptables一t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.80.11:22
#在外网环境中使用SSH测试
ssh -p 250 root@12.0.0.1
yum -y install net-tools
#若没有ifconfig 命令可提前使用yum 进行安装
ifconfig ens33
注意:使用DNAT时,同时还有配合SNAT使用,才能实现响应数据包的正确返回 |
实验操作
实现DNAT转换客户端访问服务器
前面还是一样配置,服务器给VMnet1,客户端给VMnet2,网关配双网卡
第一步还是配置网卡,服务器网关改成网关IP
修改网关服务器客户端内网网卡和外网网卡
开启IP转发功能
配置客户端IP
配置好我们了可以ping通
但是做DNAT我们需要访问12.0.0.1,但是我们访问不了
这里我们需要做DNAT转换
可以看到,我们可以访问了
小知识扩展
主机型防火墙主要使用INPUT、OUTPUT链,设置规则时一般要详细的指定到端口
网络型防火墙主要使用FORWARD链,设置规则时很少去指定到端口,一般指定到IP地址或者到网段即可
防火墙规则的备份和还原
导出(备份)所有表的规则
iptables-save > /opt/ ipt.txt
导入(还原)规则
iptables-restore < /opt/ ipt.txt
实验规则快速还原
将iptables规则文件保存在/etc/sysconfig/iptables中,iptables服 务启动时会自动还原规则
iptables-save > /etc/sysconfig/ iptables
systemctl stop iptables #停止iptables服务会清空掉所有表的规则
systemctl start iptables #启动iptables服务会自动还原/etc/ sysconfig/ iptables中的规则
tcpdump tcp -i ens33 -t -s 0 -C 100 and dst port ! 22 and src net 192.168.1.0/24 -w . /target. cap
(1) tcp:ip、icmp、arp、rarp和tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2) -i ens33 :只抓经过接口ens33的包
(3) -t:不显示时间戳
(4) -s 0:抓取数据包时默认抓取长度为68字节。加上-s0后可以抓到完整的数据包
(5) -c 100:只抓取100个数据包
(6) dst port ! 22:不抓取目标端口是22的数据包
(7) src net 192.168.1.0/24 :数据包的源网络地址为192.168.1.0/24
(8) -W . /target.cap :保存成cap文件,方便用ethereal (即wireshark)分析