SNAT 应用环境
SNAT策略的原理
临时打开
echo 1 > /proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip_forward=1
永久打开
vim /etc/sysctl.conf
net.ipv4.ip_forward =1 #将此行写入配置文件
sysct1 -p #读取修改后的配置
SNAT转换1:固定的公网IP地址
iptables -t nat -A POSTROUTING -s 192.168.16.0/24 -o ens33 -j SNAT --to 12.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.16.0/24 -o ens33 -j SNAT --to-source 12.0.0.1-12.0.0.10
内网IP 出站 外网网卡 外网IP或地址池
SNAT转换2:非固定的公网IP地址(共享动态IP地址)
iptables -t nat -A POSTROUTING -s 192.168.16.0/24 -o ens33 -j MASQUERADE
一个IP地址做 SNAT 转换,一般可以让内网 100到200 台主机实现上网
第一步:添加一张外网网卡网段为12.0.0.0/24
第二步:查看真机的网段与虚拟机所设网段是否一致,不一致要修改一致
第三步:添加一张网卡
第一步:配置内网网卡ens33
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# ifconfig #查看网卡
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@localhost network-scripts]# vim ifcfg-ens37
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# ifdown ens33 ; ifup ens33
由于是内网环境仅主机模式下 所以要安装一个本地yum仓库
#安装http服务
[root@localhost ~]# mount /dev/sr0 /mnt
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo
[root@localhost yum.repos.d]# mkdir repos.bak
[root@localhost yum.repos.d]# mv *.repo repos.bak
[root@localhost yum.repos.d]# touch local.repo
[root@localhost yum.repos.d]# vim local.repo
[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]# yum clean all && yum makecache
[root@localhost yum.repos.d]# yum install httpd -y
#启动httpd服务
[root@localhost ~]# systemctl start httpd.service
[root@localhost ~]# netstat -atpn |grep httpd #查看服务是否启动
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p
[root@localhost ~]# tail /var/log/httpd/access_log
1、查看网关服务器的iptables规则并清除
iptables -nL #查看规则
iptables -nL -t nat #查看规则
iptables -F #清除iptables的规则
iptables -F -t nat #清除iptables的规则
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens37 -j SNAT --to 12.0.0.254 源地址(内网网段) 出站网卡
外网网关
[root@localhost ~]# iptables -nL -t nat
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.16.0/24 0.0.0.0/0 to:12.0.0.254
IP地址由内网本身的IP地址转变为设定的IP 12.0.0.254
[root@localhost ~]# tail /var/log/httpd/access_log
在Internet中发布位于局域网内的服务器
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysct1 -p
DNAT转换1:发布内网的Web服务
#把从ens33进来的要访问web服务的数据包目的地址转换为 192.168.16.11
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.16.11
表 链 出站网卡 外网来的数据包的目的IP和目的端口 通过DNAT转换为内网的IP和端口
外网2.0.0.1:80 ----DNAT-—->192.168.16.11:8080
或
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.16.11
入站 外网网卡 外网IP 内网服务器IP
iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.16.11-192.168.16.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.16.11:22(内网IP+端口)
#在外网环境中使用SSH测试
ssh -p 250 [email protected]
yum -y install net-tools #若没有 ifconfig 命令可提前使用 yum 进行安装
ifconfig ens33
第一步:添加一张外网网卡网段为12.0.0.0/24
第二步:查看真机的网段与虚拟机所设网段是否一致,不一致要修改一致
第三步:添加一张网卡
第一步:配置内网网卡ens33
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# ifconfig #查看网卡
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@localhost network-scripts]# vim ifcfg-ens37
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl stop firewalld.service #关闭防火墙
[root@localhost ~]# setenforce 0 #关闭selinux
[root@localhost ~]# ifdown ens33 ; ifup ens33
由于是内网环境仅主机模式下 所以要安装一个本地yum仓库
#安装http服务
[root@localhost ~]# mount /dev/sr0 /mnt
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo
[root@localhost yum.repos.d]# mkdir repos.bak
[root@localhost yum.repos.d]# mv *.repo repos.bak
[root@localhost yum.repos.d]# touch local.repo
[root@localhost yum.repos.d]# vim local.repo
[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]# yum clean all && yum makecache
[root@localhost yum.repos.d]# yum install httpd -y
#启动httpd服务
[root@localhost ~]# systemctl start httpd.service
[root@localhost ~]# netstat -atpn |grep httpd #查看服务是否启动
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p
1、查看网关服务器的iptables规则并清除
iptables -nL #查看规则
iptables -nL -t nat #查看规则
iptables -F #清除iptables的规则
iptables -F -t nat #清除iptables的规则
[root@localhost ~]# iptables -F -t nat
[root@localhost ~]# iptables -nL -t nat
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.16.0/24 -o ens37 -j SNAT --to 12.0.0.254
[root@localhost ~]# iptables -t nat -A PREROUTING -i ens37 -d 12.0.0.254 -p tcp --dport 8080 -j DNAT --to 192.168.16.18:80
[root@localhost ~]# iptables -nL -t nat
IP地址由内网本身的IP地址转变为设定的IP 12.0.0.254
[root@localhost ~]# tail /var/log/httpd/access_log
默认备份文件 /etc/sysconfig/iptables
备份
iptables-restore < /opt/nat.txt
#重定向输入到默认配置文件当中
#将iptables规则文件保存在 /etc/sysconfig/iptables 中,iptables服务启动时会自动还原规则
[root@localhost sysconfig]# iptables-save > /etc/sysconfig/iptables
#重启防火墙
[root@localhost sysconfig]# systemctl stop iptables #停止iptables服务会清空掉所有表的规则
[root@localhost sysconfig]# systemctl start iptables #启动iptables服务会自动还原/etc/sysconfig/iptables 中的规则
#查看规则
[root@localhost sysconfig]# iptables -nL
[root@localhost sysconfig]# iptables -nL -t nat
格式
tcpdump tcp -i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
常用参数
tcp | ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型 |
---|---|
-i ens33 | 只抓经过接口ens33的包 |
-t | 不显示时间戳 |
-s 0 | 抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包 |
-c 100 | 只抓取100个数据包 |
dst port ! 22 | 不抓取目标端口是22的数据包 |
src net 192.168.1.0/24 | 数据包的源网络地址为192.168.1.0/24。Net:网段,host:主机 |
-w ./target.cap | 保存成cap文件,方便用ethereal (即wireshark)分析 |