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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM