SNAT、DNAT、NPT

SNAT 源地址转换

------------- 内网访问外网

问题:这里我们模拟内外网的访问,网关互指,中间网关打开ip_forward,但实际的网络访问环境中,外网客户会把网关指向你公司的网关吗?

张三 李四 王五

内网 iptables 网关 外网

(其实就是模拟一个路由器)

192.168.1.128 --------------> 192.168.1.1 vmnet1

网关指向

打开ip_forward

172.16.2.9 eth0 172.16.2.10

SIP:192.168.1.128 DIP:172.16.2.10

到达中间iptables网关,需要做SNAT

SIP:172.16.2.9 DIP:172.16.2.10

到达外网服务器,然后返回

SIP:172.16.2.10 DIP:172.16.2.9

回到中间iptables网关,会自动做DNAT

SIP:172.16.2.10 DIP:192.168.1.128

把上图先去掉外网上的网关(因为实际情况下,别人公司的外网服务器不可能把网关指向你),去掉这个网关后,内外网就不能通了,要靠做NAT才能通

张三 李四 王五

发信人:张三 发信人:李四 发信人:王五

收信人:王五 --------------> 收信人:王五 -----------> 收信人:李四

|

|

发信人:王五 |

<----------------收信人:张三 <------------------

解决方法:在中间网关机器上写规则

实现内网可以上外网的web

iptables -t nat -A POSTROUTING -p tcp --dport 80 -o eth0 -j SNAT --to-source 172.16.2.9

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.16.2.9

实现内网可以ping外网

iptables -t nat -A POSTROUTING -p icmp -o eth0 -j SNAT --to-source 172.16.2.9

下面这条不写协议,也就表示所有内网上外网的都会做SNAT成172.16.2.9这个IP地址

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.16.2.9

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE --这条命令和上条命令实现的效果是一样的,但区别在于MASQUERADE可以动态SNAT成你的公网IP(用于公网IP不固定的情况,比如家用的ADSL拔号上网)

做了SNAT后,并且可以172.16.2.10的/var/log/httpd/access_log里验证得到:在你做NAT之前,靠双网关互指访问网站,它的访问日志里全是你内网的IP。而做了NAT之后,日志里是你公网的IP。

########################################################################

DNAT 目的地址转换

-------------- 外网访问内网

也就是外网是客户端,要访问我们内网的服务器,客户端只是访问外网IP,内网里不同的服务器不同的IP,可以使用DNAT把不同的请求转换到不同的内网服务器

172.16.2.10

客户端 elinks www.abc.com

|

|

外网IP | 172.16.2.9

|

网关 (打开ip_forward)

|

内网IP | 192.168.1.1

|

|

|

邮件 web DNS

192.168.1.127 192.168.1.128 192.168.1.129

--这三台服务器要把网关指向网关服务器的内网IP

SIP:172.16.2.10 DIP:172.16.2.9

到达双网卡网关,要做DNAT

SIP:172.16.2.10 DIP:192.168.1.128

到达web服务器,返回

SIP:192.168.1.128 DIP:172.16.2.10

通过web服务器网关192.168.1.1回到双网卡网关机器,自动SNAT回去

SIP:172.16.2.9   DIP:172.16.2.10

# iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dport 25,110,143 -j DNAT --to-destination 192.168.1.127

?# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.128

# iptables -t nat -A PREROUTING -i eth0 -p udp --dport 53 -j DNAT --to-destination 192.168.1.129

######################################################################

NPT 网络端口转换

(DNPT)

客户端 172.16.2.10

|

|

web 172.16.2.9

默认情况web是监听80端口,如果我把web改成监听8080.那么客户端在elinks 172.16.2.9时就访问不到,除非elinks 172.16.2.9:8080

在web服务器上写上一条端口转换的iptables规则,把访问80的转成8080.然后客户端再去elinks 172.16.2.9不用写端口也可以访问成功

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

--注意:前面的snat,dnat,npt写的--to-source,--to-destination,--to-port全部可以简写成--to就好了;只要做写nat规则,就需要打开ip_forward(npt不需要打开)

===================================================================================

题目1:

现在我的172.16.2.9(网段为172.16.0.0/16)是通过公司路由器172.16.254.254可以实际上外网的

请问,我一个vmware的hostonly网段(假设为vmnet1)的虚拟机192.168.1.128如何才能通过NAT上外网

hostonly虚拟机 宿主机 公司路由器 公司外网IP

vmnet1 eth0

192.168.1.128 192.168.1.1 172.16.2.9 --> 172.16.254.254 183.39.156.235

DNS指向114.114.114.114

dns包的过程

SIP:192.168.1.128 DIP:114.114.114.114

通过网关192.168.1.1到达宿主机,做SNAT

SIP:172.16.2.9 DIP:114.114.114.114

通过网关172.16.254.254到达公司路由器,做SNAT

SIP:183.39.156.235 DIP:114.114.114.114

到达DNS服务器,解析成功后,返回结果

SIP:114.114.114.114 DIP:183.39.156.235

回到公司路由器,自动DNAT

SIP:114.114.114.114 DIP:172.16.2.9

回到宿主机,自动DNAT

SIP:114.114.114.114 DIP:192.168.1.128

总结:

满足四个条件,这个hostonly虚拟机就可以上外网

1,虚拟机网关指向宿主机的同网段IP(我这个例子里是指向192.168.1.1)

2,DNS指向公网DNS服务器(我这里是指向114.114.114.114);这里DNS也可以指向192.168.1.1,但是要在宿主机上多做一条DNAT,把udp的53端口目标地址DNAT成114.114.114.114

3,宿主机打开ip_forward(因为写NAT规则都需要这个要求)

4,宿主机上写一条SNAT把虚拟机上网的所有数据包SNAT成宿主机上外网的IP(我这里为172.16.2.9)

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.16.2.9

或者

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

题目2:

要求:写出这个电信用户访问到双线web服务器时并返回的IP变化过程(只写源IP,目标IP,和做SNAT还是DNAT等)

你觉得架构会不会有问题?

192.168.1.100 192.168.2.100

电信用户 网通用户

| |

192.168.1.1 | | 192.168.2.1

电信用户家里路由器 网通用户家里路由器

51.1.2.3 | | 61.1.2.3

| www.abc.com |

| |

71.1.2.3 | | 81.1.2.3

| |

公司电信路由器 公司网通路由器

10.1.1.1 | | 172.16.2.1

| |

| |

10.1.1.100 eth0 双线web服务器 eth1 172.16.2.100

这里应该有智能DNS(DNS服务器会通过SIP是电信还是网通,来智能的解析同一个网站的DIP;在此例中,电信用户会被解析访问71.1.2.3,网通用户会被解析访问81.1.2.3)

电信用户和网通用户通过智能DNS分别去访问电信或网通线路

SIP:192.168.1.100 DIP:71.1.2.3

到达电信用户家用路由器手动SNAT

SIP:51.1.2.3 DIP:71.1.2.3

到达公司电信路由器手动DNAT

SIP:51.1.2.3 DIP:10.1.1.100

到达web服务器返回(网关指向10.1.1.1)

SIP:10.1.1.100 DIP:51.1.2.3

返回到公司电信路由器自动SNAT

SIP:71.1.2.3 DIP: 51.1.2.3

到达电信用户家用路由器自动DNAT

SIP:71.1.2.3 DIP:192.168.1.100

问题是:

电信的用户回去时,把双线web服务器网关要指向10.1.1.1

网通的用户回去时,把双线web服务器网关要指向172.16.2.1

那么按前面所学的知识,同一个路由表只能有一个可用网关,如果可用网关为电信路由器内网IP;那么实现的是电信进来的包从电信回,网通进来的包也从电信回.问题出现了

如果在双线web服务器上不加网关,用加路由的方式来做的话,

那么

route add -net 51的网段 netmask x.x.x.x dev eth0

route add -net 61的网段 netmask x.x.x.x dev eth1

同理还得加网通的,但是这也有一个问题,实际情况电信和网通的用户网段太多了,

你不可能全加上去

原文地址:https://www.cnblogs.com/skyzy/p/9201301.html

时间: 2024-08-06 08:47:32

SNAT、DNAT、NPT的相关文章

iptables工具_过滤包—命令(-A、-I、-D、-R、-L等)

iptables 指令 语法: iptables [-t table] command [match] [-j target/jump] -t 参数用来指定规则表,内建的规则表有三个,分别是:nat.mangle 和 filter, 当未指定规则表时,则一律视为是 filter. 各个规则表的功能如下: nat 此规则表拥有 Prerouting 和 postrouting 两个规则链,主要功能为进行一对一.一对多.多对多等网址转译工作(SNATDNAT),由于转译工作的特性,需进行目的地网址转

iptables工具__过滤包—命令(-A、-I、-D、-R、-L等)、参数(-p、-s、-d、--sport、--dport、-i、-o等)、动作-j (ACCEPT、DROP、REJECT、RED )等模块参考

iptables 指令 语法: iptables [-t table] command [match] [-j target/jump] -t 参数用来指定规则表,内建的规则表有三个,分别是:nat.mangle 和 filter,           当未指定规则表时,则一律视为是 filter. 各个规则表的功能如下: nat 此规则表拥有 Prerouting 和 postrouting 两个规则链,主要功能为进行一对一.一对多.多对多等网址转译工作(SNATDNAT),由于转译工作的特性

详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

NAT简介 NAT是将私有IP地址通过边界路由转换成外网IP地址,在边界路由的NAT地址转换表中记录下这个转换,当数据返回时,路由使用NAT技术查询NAT转换表,再将目标地址替换成内网用户IP地址. SNAT策略 局域网主机共享单个公网IP地址接入Internet(内网的地址改成公网) DNAT策略 目标地址转换 SNAT.DNAT工作原理 SNAT 局域网PC封装源.目ip(源地址:192.168.100.77,目的地址:172.16.16.101),到达网关路由器,SNAT将源地址转换成唯一

SNAT和DNAT

SNAT和DNAT简介 SNAT:局域网共享一个公网IP接入lnternel,好处如下 1.保护内网用户安全,因为公网地址总有一些人恶意扫描,而内网地址在公网没有路由所以无法被扫描,能被扫描的只有防火墙这一台,这样就减少了被攻击的可能. 2.Ipv4地址匮乏,很多公司只有一个ipv4地址,但是却有几百个用户需要上网,这个时候就需要使用SNAT. 3.省钱,公网地址付费,使用SNAT只需要一个公网ip就可以满足几百人同时上网. DNAT:向internel发布内网服务器 在内网中有服务器,如果想让

运维学习之网络管理&IP设置&网关、DNS、DHCP的设置

11.管理网络 1.ip基础知识 1.ipv4 2进制32位-----10进制 172.25.0.10/255.255.255.0 172.25.0.10:ip地址 255.255.255.0:子网掩码 子网掩码255位对应的ip位为网络位 子网掩码0对应的ip位为主机位 2.配置ip <<图形化>> 1.图形界面 nm-connection-editor 2.文本化图形 nmtui <<命令>> ifconfig 网卡 ip netmask ##临时设定

iptables命令、规则、参数详解

表    (table)包含4个表:4个表的优先级由高到低:raw-->mangle-->nat-->filterraw---RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理.一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.filter---这个规则表是预设规则表,拥有 INPUT.FORWARD 和 OUTPUT 三个规则链,

笔记9(日常运维2iptables nat表、zone、service、cron、chkconfig、systemd、unit、target、rsyncscreen)

nat表应用 A机器两块网卡ens33(192.168.133.130).ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联. 需求1:可以让B机器连接外网 查看路由转发:cat /proc/sys/net/ipv4/ip_forward 如果是0,我们需要打开它 A机器上打开路由转发 echo "1">/proc/sys/net/ipv4/ip_forw

防火墙、Iptables、netfilter/iptables、NAT 概述

防火墙.Iptables.netfilter/iptables.NAT 概述 - 如果你真的想做一件事,你一定会找到方法: 如果你不想做一件事,你一定会找到借口. - ITeye技术网站 一.防火墙的简介 防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性.它通过访问控制机制,确定哪些内部服务允许外部访问,以及 允许哪些外部请求可以访问内部服务.它可以根据网络传输的类型决定IP包是否可以传进或传出内部网 防火墙通过审查经过的每一个数据包,判断它是否有相匹配的

iptables实现网络防火墙功能,SNAT以及DNAT功能

iptables实现网络防火墙功能,SNAT以及DNAT功能 一.网络防火墙的实现 1.环境准备: 虚拟机vmware workstation 11 系统CentOS 7.3                软件包安装:yum install httpd vsftpd tcpdump 2.前提条件 2.1各主机正确设置IP地址/子网掩码  参考设置: 主机A 网卡ens33:10.0.0.110/24 内网客户端 主机B 网卡ens33:10.0.0.111/24 ens37:172.16.252