查看: 461|回复: 0

[Mikrotik Ros] 关于ROS的dst-nat和src-nat的理解,和公司的一个案例以及解决方案

[复制链接]

124

主题

0

回帖

508

积分

管理员

积分
508
发表于 2026-8-31 00:03:17 | 显示全部楼层 |阅读模式
需求:
1、用户通过ROS的公网IP+36611端口,访问内部的服务器;
2、用户可以在服务器上随意进行PPTP拨号,每拨号一次,它的公网出口变化一次。而不能断网断线。

解决方案:
1、首先server上要写几条静态路由表

具体做法
route -p add 192.168.0.0 MASK 255.255.0.0  192.168.66.254
route -p add 10.0.0.0 MASK 255.0.0.0  192.168.66.254
route -p add 172.16.0.0 MASK 255.255.0.0  192.168.66.254
2、ros的一些脚本
/ip firewall nat
add action=dst-nat chain=dstnat dst-port=36617 in-interface=pppoe-out1-tel1 \
protocol=tcp to-addresses=192.168.66.17 to-ports=3389
add action=src-nat chain=srcnat dst-address=192.168.66.17 dst-port=3389 \
protocol=tcp to-addresses=192.168.64.1
其中36617是用户3389的时候使用的端口号,192.168.66.17是内网服务器的IP,192.168.64.1是ROS自己的局域网IP
第二天规则的主要作用,是让用户访问192.168.66.17的时候,192.168.66.17服务器看到用户的IP的源IP是192.168.64.1,而不是公网IP,如果没有这条,那么服务器会把数据包回到PPTP的服务器上去。那么就会断网。而且这边不可以写公网的那个端口号dst-port=36617,你会发现匹配不到任何数据包的。


抓包,你会发现srcnat是把包文转发到公网的IP出口222.95.240.43,虽然你写了192.168.64.1。不过从windows那边用netstat -an看,的确是192.168.64.1.这边在实际操作的时候,注意下。

这里我重新总结下dst-nat和src-nat的区别和联系。



总结几条经验
dst-nat,一般是没有经过nat没有经过伪装的原始数据包,所以你可以去匹配原始的源IP源端口,目的IP目的端口。
但是src-nat,一般是经过nat经过伪装的数据包文,所以你匹配原始的目的端口,就匹配不到了,见我们上面的案例。只能匹配转换过以后的目的端口或者目的ip。也就是不能匹配36617端口,而必须去匹配dstnat以后的3389端口!!!
上面的案例,如果你没有写dst-nat规则的话,你光写src-nat也是匹配不到任何数据包的。因为数据包必须经过out接口,才能被匹配到src-nat。你数据包在路由器里面,是没用的,不会被src-nat匹配到。

本帖子中包含更多资源

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

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

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|蜀ICP备17024538号-6

在本版发帖
关注公众号
QQ客服返回顶部