ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

iptables中实现内外网相互访问——SNAT与DNAT的原理与应用

2021-08-01 19:32:19  阅读:453  来源: 互联网

标签:iptables DNAT IP 192.168 12.0 SNAT ens33


一、SNAT原理与应用

1、SNAT应用环境

局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由)

2、SNAT原理

修改数据包的源地址

3、SNAT转换前提条件

  • 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
  • Linux网关开启IP路由转发

3.1 临时打开IP路由转发:

echo 1 >/proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip forward=1

3.2 永久打开IP路由转发:

vim /etc/ sysctl. conf
net.ipv4.ip_forward = 1				#将此行写入配置文件

sysctl -P				#读取修改后的配置

4、SNAT转换

4.1  SNAT转换1:固定的公网IP地址:

iptables -t nat -A POSTROUTING -s 192.168.229.0/24 -o ens36 j SNAT --to 12.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.229.0/24 -o ens36 -j SNAT --to-source 12.0.0.1-12.0.0.10

-S 内网IP 
-o 出站外网网卡
source 外网IP或地址池

4.2  SNAT转换2:非固定的公网IP地址(共享动态IP地址) :

iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j MASQUERADE

小知识扩展: 一个IP地址做SNAT转换,一般可以让内网100到200 台主机实现上网

5、SNAT转换实例操作:实现内网主机通过一个固定的公网IP地址上网

 

web服务器IP:12.0.0.16、关闭防火墙和selinux、开启http服务
网关服务器内网IP(ens33):192.168.229.60;外网IP(ens36):12.0.0.1;linux网关打开IP路由转发、开启http服务
win10客户端IP:192.168.229.131
VMware的虚拟网络编辑器中默认vmnet1模式网段:192.168.229.0,VMnet2模式网段:12.0.0.0

实验目的:

实现内网主机Win10访问Web服务器时将IP地址192.168.229.131转换为12.0.0.16访问,在web服务器的日志文件中查看PC端的访问地址是否发生改变,即实现SNAT转换

5.1  Linux网关服务器的相关配置

5.1.1  添加网卡,并设置ens33、ens36的IP地址

  

  

  

5.1.2  iptables的安装

systemctl stop firewalld.service       #关闭防火墙
systemctl disable firewalld.service            #设为开机不自启
 
yum -y  install iptables iptables-services      #安装iptables
systemctl start iptables. Service          #开启服务

  

5.1.3 linux网关服务器打开IP路由转发 

[root@cm yum.repos.d]# vim /etc/sysctl.conf 
[root@cm yum.repos.d]# sysctl -p
net.ipv4.ip_forward = 1

  

5.1.4  在linux网关服务器上做SNAT转换

[root@cm yum.repos.d]# iptables -F -t nat
[root@cm yum.repos.d]# 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         
[root@cm yum.repos.d]# iptables -t nat -A POSTROUTING -s 192.168.229.0/24 -o ens36 -j SNAT --to 12.0.0.1
[root@cm yum.repos.d]# 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.229.0/24     0.0.0.0/0            to:12.0.0.1

  

5.2 内网PC端win10设置内网IP以及网关

5.3  外网Linux的web服务器的相关设置

5.3.1 设置外网web服务器的IP地址

5.3.2  安装httpd服务,并开启httpd服务,关闭防火墙和selinux

5.4  测试

5.4.1 内网PC端ping外网和网关测试

 

 5.4.2 内网访问httpd测试

 

5.4.3  查看外网web服务器的日志文件tail /var/log/httpd/access_log,查看访问网址是否修改为12.0.0.1,即SNAT转换是否成功

 

 二、DNAT原理与应用

1、DNAT转换前提条件:

局域网的服务器能够访问Internet

网关的外网地址有正确的DNS解析记录

Linux网关开启IP路由转发

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -P

2、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

iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80-j DNAT --to 192.168.80.11-192.168.80.20

3、DNAT转换2:发布时修改目标端口

#发布局域网内部的OpenSSH服务器, 外网主机需使用250端口进行连接
iptables-t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 250-jDNAT --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使用,才能实现响应数据包的正确返回

小知识扩展:
• 主机型防火墙主要使用INPUT、OUTPUT链,设置规则时一-般要详细的指定到端口

• 网络型防火墙主要使用FORWARD链,设置规则时很少去指定到端口,一般指定到IP地址或者到网段即可

三、防火墙规则的备份和还原

1、导出 (备份)所有表的规则

iptables-save > /opt/ipt.txt

2、导入(还原)规则

iptables-restore < /opt/ipt.txt

3、将iptables规则文件保存在 /etc/sysconfig/iptables 中,iptables服务启动时会自动还原规则 iptables-save >/etc/sysconfig/iptables

systemctl stop iptables		#停止iptables服务会清空掉所有表的规则 				
systemctl start iptables		#启动iptables服务会自动还原/etc/sysconfig/iptables 中的规则

四、Linux抓包

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字节。加上-s 0 后可以抓到完整的数据包
(5)-c 100 ∶只抓取100个数据包
(6)dst port ! 22 ∶不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 ∶数据包的源网络地址为192.168.1.0/24。Net:网段,host:主机
(8)-w ./target.cap ∶ 保存成cap文件,方便用ethereal (即wireshark)分析

标签:iptables,DNAT,IP,192.168,12.0,SNAT,ens33
来源: https://www.cnblogs.com/weq0805/p/15085776.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有