找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10879|回复: 14

[其它] 试论nat转换方式下的src-nat、dst-nat和映射、回流的关系

[复制链接]
发表于 2005-12-7 16:51:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
src-nat是源地址转换,其作用是将ip数据包的源地址转换成另外一个地址,
首先我们说一下snat中几个参数的含义,action,这是说明用的哪种转换方式,通常我们用masqurade,nat这两种,在特殊情况下用accept(主要是内网中有公网地址存在的情况)方法,protocol说明对哪些传输协进行转换(通常有tcp,udp等),out-interface说明通过哪一个网卡进行转换(通常是外网卡outside),to-src-address是将源地址伪装成哪些地址(可以是一个也可以是很多个),to-src-pot是将源端口伪装成哪些端口(可以是一个也可以是很多个),dst-address是指发向哪些主机的数据包要进行伪装(可以一个可以多个),dst-port是指发向哪些端口的数据包进行伪装(可以一个可以多个),src-address是指对哪些源地址进行伪装(可以一个可以多个),src-port是指从哪些源端口发出的数据包进行伪装(可以一个可以多个)
-----以上文字引自中国路由论坛,作者njhhack

下面的论述中,ACTION(转换方式)都是以NAT为例.
再综合网上其它的相关资料,以我现有的理解,和具体的试验,再作些补充:
要做src-nat,除了指明协议\端口\转换成什么地址外,还要谈到是在那块网卡(接口)上做这个“源地址地址转换”。
   比如,要让内网的电脑通过ros访问外网,那么就由与公网连接的网卡做snat,在添加src-nat规则时,general页的out. interface就应选"外网卡",当然,用默认设置"all"也就包含了"外网卡",但这不利于理解src-nat

理解了src-nat ,dst-nat就很好理解了,src-nat是ROS将内网电脑发出的数据包的地址中的源地址进行转换然后发往外网,在数据包中,被转换的地址是源地址,所以叫源地址转换.而dst-nat则刚好相反,它是ros将公网发来的数据包的地址中的目的地址进行转换(当然这个目的地址就是ros的公网ip),然后发给内网的电脑,在数据包中,被转换的地址是目的地址,所以叫目的地址转换.
同样,dst-nat除了指定转换后的地址外,也将涉及是在那块网卡(接口)上进行,例如,要将公网发给ros的a端口的数据包转给内网ip为b的c端口,那么设置好a\b\c的值后,在dst-nat规则general页的in.interface里,应选择与b地址网段相连的网卡(接口),显然这是一块内网卡,当然,用默认设置"all"也就包含了这块"内网卡",但这不利于理解DST-nat
.到这里可以明白什么是端口映射了,它就是dst-nat中的一条转换规则.

再来谈"回流",引用一段文字--"什么叫回流呢,就是当内网有服务映射到网关后,内网主机也可以用网关外部地址访问"

由上面的定义可以清楚"回流"要完成的操作:1\内网电脑向ros发送目的地址为公网ip的数据包(当然这个IP就是ROS的公网IP).    2\ros通过源地址转换规则(SRC-NAT)中选定的A网卡(接口)将数据包地址中的源地址转换为公网IP(目的地址不变,仍为公网IP)   3\ROS通过目的地址转换规则(DST-NAT)中选定的B网卡(接口)将数据包地址中的目的地址转换为内网地址,然后发给相应的内网电脑.

但是问题来了,如果A网卡(接口)将数据包地址转换后就往公网发送,那么数据包就无法再回到路由器并转发给内网了.

如果能让数据包不出路由器,在路由器内完成SRC-NAT和DST-NAT这两种地址转换,那么就可以实现回流了.
呵呵,让A=B就可以实现了.就是说,添加一条SRC-NAT和一条DST-NAT规则,而这两条规则中所指定的网卡都是与内网相连的同一块网卡.

上面的论述,在1WAN2LAN,动态拨号环境下,测试验证,没有出现矛盾。

当然动态拨号时,外网卡应选"PPPOE-OUT",还要编写相应的脚本,动态更新to src.address,这比较麻烦,所以动态拨号用户的地址转换方式一般选“masqurade”

不足之处欢迎大家指正。
希望理解masqurade的朋友来发个贴,帮大家释疑一下.
routeros
发表于 2005-12-10 22:10:22 | 显示全部楼层
好东西,正想要
routeros
回复

使用道具 举报

 楼主| 发表于 2005-12-12 09:43:41 | 显示全部楼层
继续,上图说明ros292中的具体操作,印证回流和srcnat,dstnat的关系.

internet接入是adsl动态拨号,连上后,获得的公网ip是218.19.65.179
比如我内网中地址为192.168.0.16的电脑装了邮件服务器,开了8383端口让人登陆邮件系统(http://218.19.65.179:8383),开了25端口为了smtp服务,收发邮件.
nat规则列表如图1:
其中"规则1"为了让内网电脑能访问internet.
规则2"和"规则3"在同一块网卡lan1(接口)上做srcnat和dstnet,是为了实现"回流".
规则4是将192.168.0.16的25端口对外网开放,用于收发邮件.

下面说的才是最重要的,
看图2,显示的是规则2的详细设置,目的是在网卡lan1上做srcnat,这是为回流而做的第一条规则,本来Dst.Address处完全可以填公网ip 218.19.65.179,但实际上,填上就导致了回流失败,
我找了很旧原因,最后发现192.168.0.16这台电脑装了动态域名软件花生壳,将这个软件卸载,就可以填公网ip了.(也许是动态域名软件将发送数据包的目的地址改了,也许是ros?).但动态域名软件是不能删的,因为邮件服务器要用到它,所以最终设置还是图2的样子.

图3是规则2的action页.
本来要会流的端口是8383,那么To .Ports处填8383就足够了,不过实际证明,如果你只填8383会导致打开http://218.19.65.179:8383极其缓慢.  但是ros2826版本则无此问题,你可以在to .ports处填具体端口8383. (这个问题是ros292的bug?)

图4,图5就没什么说的了,在lan1上做dstnat,完成回流的第二步.

图6显示回流成功.
就算你把图1上的规则1禁止,回流仍然继续. 因为回流的数据没有送出路由器.仅仅在网卡lan1上打了个转.

端口映射只是dstnat的一条规则,比如图1中的规则4,就将192.168.0.16的25端口对公网开放了.这就是端口映射.

不足之处欢迎大家指正.
1.JPG
2.JPG
3.JPG
4.JPG
5.JPG
6.JPG
routeros
回复

使用道具 举报

发表于 2005-12-12 13:28:37 | 显示全部楼层

snat与masquerade

其实主要区别是MASQUERADE会带来额外的开销,对计算机的负荷比snat稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址是配置好的。


即针对性:masquerade---->interface---->ip
               snat----->ip
               节省了一点点资源。
routeros
回复

使用道具 举报

发表于 2005-12-12 16:40:28 | 显示全部楼层

楼主帮忙看看我的问题

ROS2.96

我的公网IP 218.59.66.44
内网web服务器IP 192.168.0.244 端口80

加映射规则
add chain=dstnat dst-address=218.59.66.44 protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.244 \
    to-ports=80 comment="" disabled=no

在外网无法访问我的WEB服务器


在 forward里加规则LOG
在log
15:09:08 firewall,info forward: in:public out:local-1, src-mac 00:e0:fc:06:61:d6, proto TCP (SYN), 218.1.173.100:2015-
    >192.168.0.244:80, len 48

都是SYN ,ACK包

哪位高手帮我看看是不是规则有错!谢谢
routeros
回复

使用道具 举报

legou 该用户已被删除
发表于 2005-12-12 17:10:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
routeros
回复

使用道具 举报

 楼主| 发表于 2005-12-12 17:35:05 | 显示全部楼层
原帖由 superaka 于 2005-12-12 16:40 发表
ROS2.96

我的公网IP 218.59.66.44
内网web服务器IP 192.168.0.244 端口80

加映射规则
add chain=dstnat dst-address=218.59.66.44 protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.244  ...


看起来没问题啊,不过最好不要映射80端口,ros的80端口已经分给了www管理了,你把80端口转到内网,那么你就要把ros的www管理端口改为非80的.

你再影射别的端口试试?
routeros
回复

使用道具 举报

发表于 2005-12-13 08:21:16 | 显示全部楼层
原帖由 爱好网络 于 2005-12-12 17:35 发表


看起来没问题啊,不过最好不要映射80端口,ros的80端口已经分给了www管理了,你把80端口转到内网,那么你就要把ros的www管理端口改为非80的.

你再影射别的端口试试?


www管理端口已经改成 3189了,真让人纳闷了,我以前用2.811就没问题!
routeros
回复

使用道具 举报

发表于 2006-5-9 15:30:24 | 显示全部楼层

请大家帮我看看,急啊呀

ROS2.9.6
在 IP-FIREWALL-NAT加入规则
add chain=dstnat dst-address=60.190.214.34 protocol=tcp dst-port=3000 action=dst-nat address=192.168.1.113 to-ports=80 commnent="" disabled=no
但就是访问不了.
routeros
回复

使用道具 举报

发表于 2006-5-9 15:32:25 | 显示全部楼层

继续

在 IP FIREWALL 的INPUT中没有任何规则
routeros
回复

使用道具 举报

发表于 2006-5-9 18:42:23 | 显示全部楼层
好贴,收藏,
routeros
回复

使用道具 举报

发表于 2006-5-10 00:30:41 | 显示全部楼层

请教楼主,PCANYWHERE 的映射,是不是 S.NAT 和 D.NAT 都要进行相应的设置?
routeros
回复

使用道具 举报

发表于 2006-5-10 15:15:46 | 显示全部楼层
内容很详细,看后受益颇深,谢谢了,敢问以下,象Protocol 、Dst.port、src.port前面的方框是干什么的阿?选中它和不选择它有什么区别阿,还有如果像你以上说的,我都不具体选择,是不是默认是全选阿,尤其是protocol你选择了6(tcp),我要是不做任何选择(右面的黑色三角是向上的),是不是默认全选阿,其他相似的选项是不是也是这样啊。敬请指导!
routeros
回复

使用道具 举报

发表于 2006-5-16 19:10:52 | 显示全部楼层
请问大家回流的意义是什么?
routeros
回复

使用道具 举报

发表于 2006-6-2 12:21:07 | 显示全部楼层
如果多线路接入呢?比如同时接电信和网通双光纤,是不是只能选择masquerade方式了?
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-11-18 22:25 , Processed in 0.069910 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表