目录
一.SNAT
1.原理
原理:源地址转换,修改数据包中的源IP地址
作用:可以实现局域网共享上网
配置的表及链:nat表中的POSTROUTING
2.转换前提条件
局域网各主机已正确设置IP地址、子网掩码、默认网关地址
Linux网关开启IP路由转发
linxu想系统本身是没有转发功能 只有路由发送数据
tips:一个IP地址做SNAT转换,一般可以让内网100到200 台主机实现上网
临时打开:
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -W net.ipv4.ip_forward=1
永久打开:
vim /etc/sysct1.conf
net.ipv4.ip_forward = 1 #将此行写入配置文件
sysctl -p #将取修改后的配置
二.DNAT
1.原理
原理:目的地址转换,修改数据包中的目标IP地址
作用:将位于企业局域网中的服务器进行发布
配置在nat表中的PREROUTING链上
应用环境:在Internet中发布位于局域网内的服务器
2.转换前提条件
局域网的服务器能够访问Internet
网关的外网地址有正确的DNS解析记录
Linux网关开启IP路由转发
tips:使用DNAT时,同时还有配合SNAT使用,才能实现响应数据包的正确返回
nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机之间端口,但不支持目标,即不支持多目标,即不支持负载均衡功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
DNAT转换1:发布内网的Web服务
#把从ens37进来的要访问web服务的数据包目的地址转换为192.168.100.101
iptables -t nat -A PREROUTING -i ens37 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.100.101
或
iptables -t nat -A PREROUTING -i ens37 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.101
内网服务器IP
iptables -t nat -A POSTROUTING -s 192.168.100.13 -o ens37 -j SNAT --to 10.0.0.1
3.查看本机主机访问公网时使用的IP
三.防火墙规则的备份和还原
将iptables规则保存到文件中进行备份:
iptables-save > /路径/名称
重新加载备份文件中的iptables规则:
iptables-restore < 备份文件的完整路径
四.通过命令保存文件,使用抓包工具进行分析
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)分析
五.实验
1.SNAT
192.168.100.100 12.0.0.1
[root@localhost ~]# yum install -y iptables*
[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens37
[root@localhost network-scripts]# vim ifcfg-ens37
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=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=12.0.0.1
NETMASK=255.255.255.0
GATEWAY=12.0.0.1
[root@localhost network-scripts]# vim 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=16b97a56-58e7-48db-a088-e6b557225481
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.100
NETMASK=255.255.255.0
GATEWAY=192.168.100.100
添加网卡
192.168.68.101
12.0.0.100
192.168.100.100 12.0.0.1
Linux网关开启IP路由转发,不是默认打开的需要手动开启
[root@localhost ~]# vim /etc/sysctl.conf
此时12.0.0.100ping192.168.100.101就能ping通了
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens37 -j SNAT --to-source 12.0.0.1
12.0.0.100
192.168.100.101
12.0.0.100
此时转发已完成
192.168.100.100 12.0.0.1
清空nat
192.168.100.101
12.0.0.100
192.168.100.101
主机型防火墙主要使用INPUT、OUTPUT链,设置规则时一般要详细的指定到端口
网络型防火墙主要使用FORWARD链,设置规则时很少去指定到端口,一般指定到IP地址或者到网段即可
2.DNAT
192.168.100.100 12.0.0.1
[root@localhost ~]# iptables -t nat -A PREROUTING -i ens37 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.100.101
12.0.0.100
192.168.100.101