javen520 发表于 2006-6-18 19:21:38

[原创] 正确 映射 + 回流 (有图)

正确 映射 和 回流 设置 (有图) (ROS 2.9.X)

最近发现很多人在问这个~`总是不太明白~`特出此文~`望 置顶~`加精~` :)

内部网络为    192.168.0.0/24   内网接口 lan
外网地址为    61.61.61.61      外网接口 telecon
内部服务器为 192.168.0.200    映射到外网并且设置回流内网可用外网地址访问自身

一、映射

/ip firewall nat add chain=dstnat dst-address=61.61.61.61 action=dst-nat \
    to-addresses=192.168.0.200 to-ports=0-65535 comment="映射" disabled=no

二、回流

/ip firewall nat add chain=srcnat src-address=192.168.0.200 action=src-nat \
    to-addresses=61.61.61.61 to-ports=0-65535 comment="回流" disabled=no

注: to-ports 是映射端口 0-65535 指完全映射
   如果只想映射 WWW(网站)端口改为 80 即可
   只想映射 FTP 端口 则 to-ports=21 即可~``

提供附件下载~`
只需要相应修改其中 内部服务器 IP、端口 和 外网地址~`保存修改~`
使用 FTP 上传到你的 RouterOS 里面~`
使用 /import 文件名.rsc 导入即可正确 映射 和 回流
如果还有不明白的地方可以加我 QQ 33679934 ~```
高手就不用看了~`这些只是针对和我一样的菜鸟学习之用~~~~~``

[ 本帖最后由 javen520 于 2006-6-18 19:48 编辑 ]

qqfans 发表于 2006-6-18 19:29:05

外网地址为    61.61.61.61      为动态的怎么弄?

javen520 发表于 2006-6-18 19:44:44

回复 #2 qqfans 的帖子

动态的我倒还没现实做过~`

不过却可以使用脚本 Script 来动态更新 IP ~~`

而且你的路由器一连上 ADSL 就会获取一个 IP ~`你可以将他看成是固定 IP ~`

然后做个脚本~` 监视 ADSL 的 IP ~`只要重新连接发生 IP 变化时 则自动将 外网 IP 更新为 当前 IP ~~`

loopylf 发表于 2006-6-18 20:39:47

你这个方法外网访问内部服务器,在服务器上一定无法显示外网的实际地址(这对安全很重要的噢!)。其实你这方法之所以能够完成你所谓的回流是由于你另一条规则即内网访问外网的masq没有指定interface所致,实际上对仅完成映射和回流第二条是多余的(这里的详情参考下述的相关细节,就不细说了)。
正确的,没有上述问题的我在这里说一下吧:
1、/ip firewall nat add chain=srcnat out-interface=telecon action=masquerade
2、/ip firewall nat add chain=dstnat   dst-address=61.61.61.61 action=dst-nat \
    to-addresses=192.168.0.200 to-ports=0-65535 comment="映射" disabled=no
这时内网访问外网,外网访问内网服务器,内网服务器上显示外网连接的实际地址都一切正常,甚至你在内网ping内网服务器的外网地址也能通。但由于数据包来回的路不同作tcp ,udp第访问是不可以的,因为如192.168.0.22访问61.61.61.61在入lan口时,匹配规则2(说明:在数据入端口时ros去试着匹配dstnat,出端口时ros去试着匹配srcnat)于是ros把这数据的dst-address nat成192.168.0.200,下一步查路由表,自然这个数据从连接192.168.0.200所在网络的lan口出去,出端口时没有匹配的srcnat规则,所以以这个数据源地址还是192.168.0.22,所以在192.168.0.200所在服务器接收到数据要返回数据时源地址目地址互换很显然数据不会再通过ros了,而是直接回到192.168.0.22即来回不同路。那如何让这时的数据从原路即从ros回来呢?很明显要让这个数据在出ros lan接口时还要把src-address伪装成ros lan地址,即下面的规则 。
/ip firewall nat add chain=srcnat out-interface=lan src-address=192.168.0.0/24 dst-address=61.61.61.61action=masquerade comment="回流" disabled=no
当然这时在服务器上显示所有内网对61.61.61.61的访问的remote-address都为ros lan地址,不过这是没办法的,因为所谓回流必竟是特殊需求。

[ 本帖最后由 loopylf 于 2006-6-18 21:06 编辑 ]

javen520 发表于 2006-6-18 22:29:57

回复 #4 loopylf 的帖子

呵呵~`经过我的实际测试~`我的服务器上可以正确明白的显示出访问我的外网 IP ~`
不过还是要谢谢你对我的提点~```

另附上我的 NAT 页 共享上网+映射+回流 完整三步~``
希望大家能给点指教~~```

/ ip firewall nat

add chain=srcnat out-interface=telecon src-address=192.168.0.0/24 action=masquerade comment="共享上网" disabled=no

add chain=dstnat dst-address=61.61.61.61 action=dst-nat \
    to-addresses=192.168.0.200 to-ports=0-65535 comment="映射" disabled=no

add chain=srcnat src-address=192.168.0.200 action=src-nat \
    to-addresses=61.61.61.61 to-ports=0-65535 comment="回流" disabled=no

以上就是我   共享上网 + 完全映射 + 回流   的完整三步
由于本人水平有限~`纰漏再所难免~`还望高人指点一二~`

[ 本帖最后由 javen520 于 2006-6-18 22:33 编辑 ]

loopylf 发表于 2006-6-19 08:04:22

原帖由 javen520 于 2006-6-18 22:29 发表
回复 #4 loopylf 的帖子

呵呵~`经过我的实际测试~`我的服务器上可以正确明白的显示出访问我的外网 IP ~`
不过还是要谢谢你对我的提点~```

另附上我的 NAT 页 共享上网+映射+回流 完整三步~``
希望大家能给点指教~~```

/ ip firewall nat

add chain=srcnat out-interface=telecon src-address=192.168.0.0/24 action=masquerade comment="共享上网" disabled=no

add chain=dstnat dst-address=61.61.61.61 action=dst-nat \
    to-addresses=192.168.0.200 to-ports=0-65535 comment="映射" disabled=no

add chain=srcnat src-address=192.168.0.200 action=src-nat \
    to-addresses=61.61.61.61 to-ports=0-65535 comment="回流" disabled=no

以上就是我   共享上网 + 完全映射 + 回流   的完整三步
由于本人水平有限~`纰漏再所难免~`还望高人指点一二~`


你还是认真做做实验吧,如果在你的nat中仅这三条,那么从内网其它主机访问61.61.61.61是只能ping通而无法访问的,你ping 61.61.61.61会看到数据是从192.168.0.200返回的。
如:从192.168.0.3访问61.61.61.61数据包一定先转发给ros 的lan,显然匹配你上面第二条规则把数据包目地址转换为192.168.0.200,然后ros 查路由表,目地地址为192.168.0.200是ros lan的直连网络于是转发到lan接口出去,出端口时三条规则是都不会匹配的,数据到了192.168.0.200这台主机,对这台主机来说这个数据包的源地址是192.168.0.3,因为到目前为至没有匹配任何规则转换源地址,所以这是返回数据包目地地址一定192.168.0.3,那么这个数据包不会经过ros了,那来回不同路,访问还会成功吗?
还是这句话就你的上述三条规则第三条是没用的因为他已包含在第一条中了,
add chain=srcnat src-address=192.168.0.200 action=src-nat \
    to-addresses=61.61.61.61 to-ports=0-65535 comment="回流" disabled=no
虽然这里没指定接口,但他只会发生在出telecon接口时匹配,因为数据包源地址是192.168.0.200只有目地地址是非内网地址时才会转发到ros 那这样的数据包在ros一定转发到telecon接口,出去时把源地址转换为61.61.61.61那不就是说已包含在第一条规则中了吗?

以上我做过实验,请各位指正。

javen520 发表于 2006-6-19 18:44:56

回复 #6 loopylf 的帖子

谢谢提醒~`

还真是有点问题~~`

研究改进中~~```

juzi0420 发表于 2006-10-29 16:34:21

回复 #1 javen520 的帖子

请问回流有什么作用呢,能帮我解释下吗,不要笑我哦,我是初学者

w9707 发表于 2006-10-29 16:47:55

映射好映射,回流还真难~ 到现在CS服务器上,外网的进来都还是显示网关地址~ 郁闷:Q

fifi123 发表于 2006-11-1 11:59:49

按上面的说法做N边还是有问题

阳光浪子 发表于 2006-11-2 15:38:49

回了贴了再看,是种美德!

xjalvin 发表于 2006-11-2 22:33:44

学习不少!

laiwq 发表于 2006-11-3 15:08:16

谢谢了,回流还真是比较难,感谢提供

wsj1225 发表于 2006-11-3 15:22:55

希望有人作出一个完整的来看看啊。

james2dlh 发表于 2007-11-27 03:55:24

真是高手云集哈~~目前还看不太懂,做个记号先``:loveliness:
页: [1] 2 3
查看完整版本: [原创] 正确 映射 + 回流 (有图)