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


    需求:

    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匹配到。

  • 相关阅读:
    POI数据类型转换
    RSA加密解密——绕过OpenSSL
    STS热部署,springboot项目中修改代码不用重新启动服务
    List || Lists
    java解析复杂json数据
    Sublime Text 3 全程详细图文原创教程
    SpringBoot外调的几种方式 || http、https配置
    JPA对原生SQL的支持
    基于UDP协议的网络编程
    基于TCP协议的网络编程
  • 原文地址:https://www.cnblogs.com/itfat/p/14647935.html
Copyright © 2020-2023  润新知