• 4

[心得]RouterOS設置Nat Loopback的注意事項

最近有些朋友私信給我,要幫忙處理RouterOS的Nat Loopback.
也因如此我發現過去沒跟用戶提醒注意的事項.

要讓Nat Loopback工作,除新增專屬的Rule外:
/ip firewall nat
add action=masquerade chain=srcnat comment="NAT Loopback" \
dst-address=192.168.22.0/24 src-address=192.168.22.0/24
還要注意...

透過pctine大的介紹,可知道設置PortForward映射埠有三種方法:
http://www.mobile01.com/topicdetail.php?f=110&t=3205444&p=8#41927120

方法1:
/ip firewall nat
add action=dst-nat chain=dstnat comment="http server" disabled=no \
dst-port=80 in-interface=pppoe-out1 protocol=tcp to-addresses=192.168.22.10 \
to-ports=80
是指定interface進來的連線,映射到指定的Server上.

方法2:
/ip firewall nat
/ip firewall nat add chain=dstnat dst-address=69.69.69.69 protocol=tcp \
dst-port=80 action=dst-nat to-addresses=192.168.22.10 to-ports=80
指定對固定ip連接的連線,映射到指定的Server上.

方法3:
/ip firewall nat
add action=dst-nat chain=dstnat comment="Synology DSM" dst-address-type=local \
dst-port=5000-5006 protocol=tcp to-addresses=192.168.22.10
對local清單上的地址ip所進行的連線,都映射到指定的Server上.

不知道有沒有人看出其中差異,
其中 方法2&3是對指定目的ip連線,進行映射;
而方法1是從指定interface進來的連線,才進行映射.

而這差異就剛好決定設置Nat Loopback的成敗!!

方法2&3只要是目的地址為69.69.69.69,不管分內/外網都一律映射;
方法1 是從接口連線進來時進行映射,但這就不包含內網了!

也因如此非是Nat Loopback不工作,而是設置PortForward方式時宣告的不好
2015-04-19 0:31 發佈
補充:
若您設置PortForward的對象是FTP-Server ,得注意Router的Server-Port要先啟用.


如果關閉它 ,Router會直接封掉往Port:21連接的封包.
就會有PortForward設置正確,但就怎樣都無法連接FTP-Server的現象發生
做PortForward時,
能用固定ip當dst-addres設置映射是最棒的方式,兼顧到內/外網.

但是為PPPoE浮動用戶該怎麼辦? IP常常會變動.
我想這時就得請出腳本幫忙了

首先請您在/ip firewall address-list ,
新增一個名稱為PPPoE1的list ,Address定為0.0.0.0

然後在/system scheduler(排程) 匯入下面的腳本,interval定為10s
:local pppoe1 [/ip address get [find interface="pppoe-out1"] address]
:set pppoe1 [:pick $pppoe1 0 [:find $pppoe1 "/"]]
:set pppoe1 [:toip $pppoe1]

:local gpppoe1 [/ip firewall address-list get [find list="PPPoE1"] address]

:if ($gpppoe1!=$pppoe1) \
do={/ip firewall address-list set [find list="PPPoE1"] address=$pppoe1}

設定完腳本即刻運作,您可以再回到/ip firewall address-list
查證清單中的PPPoE1是否已經從0.0.0.0 ,更換成正確的PPPoE1-IP

之後您大可採pctine大介紹的方法2設置PortForward,
唯一不同點則從原來dst-address ,改從dst-address-list設PPPoE1.

因為腳本每10秒會自動檢查PPPoE1-IP ,非正確的會自動修正Address.
所以這就不怕PPPoE是浮動IP囉
gfx wrote:
不知道有沒有人看出其中差異,
其中 方法2&3是對指定目的ip連線,進行映射;
而方法1是從指定interface進來的連線,才進行映射.

而這差異就剛好決定設置Nat Loopback的成敗!!

方法2&3只要是目的地址為69.69.69.69,不管分內/外網都一律映射;
方法1 是從接口連線進來時進行映射,但這就不包含內網了!


我提供一個思考方向:什麼時候需要在內網進行「映射」?
一般時防火牆用來防禦外網的攻擊,所以會將不對外服務的Port鎖住,內網呢?
因為NAT,所以外網對內網常是一對多,需要針對提供服務的主機設定Port Forwarding,內網是不是都是一對一?

所以一般情況下,應該都是先設定好Port Forwarding,指定從WAN(PPPoE)進來的特定Port連線要轉到內部某一台主機,所以我們設定dstnat這個chain上作dst-nat轉換來改變目的IP,由WAN的Public IP換成內網特定Private IP。所以當一切設定妥當後,我們可以順利的由WAN存取內網的特定主機提供的特定服務。

由於我們希望能利用FQDN的方式在內網取用該服務,所以我們設定Hairpin NAT (NAT Loopback),藉由設定srcnat這個chain上作src-nat來改變來源IP由WAN的Public IP換成內網RouterOS的Private IP,以便屆時封包要由特定主機送回時,能符合規則被接受,而不被當作無效封包而丟棄。
感謝gfx大大,小弟也是玩Routeros的新手對於我剛接觸Routeros時,一開始就是碰上Loopback的問題,導致外網連線測試都沒有任何問題,但是內網訪問內網使用真實ip卻因為loopback而無法偽裝回來,但有人跟我說用虛擬ip訪問就好了阿,但如果可以小弟還是有需要這種連接方法,大大這篇文章相信對新手朋友會很有幫助!!
發現一件很不妙的事,
不知道是6.3x版開始,
upnp會自動加上in-interface,
也就是說upnp都會自動變成第1種映射方法,
loopback對upnp的映射就無效了,
對會開random port的人來說就很麻煩。
boren wrote:
發現一件很不妙的事...(恕刪)
還好啦,用script自動複製生成的規則,但in-interface選擇性忽視.
並將複製修改後的(無in-interface),取代原來upnp生成的.
gfx wrote:
還好啦,用scrip...(恕刪)

gfx大可以教一下script該如何寫嗎?
成功的話loopback這件事將一勞永逸了,
感謝。
boren wrote:
gfx大可以教一下script...(恕刪)
沒問題,不過您可以把nat的主頁面抓圖給我嗎?
因為我想知道upnp生成的規則裡有沒有含dst-address地址?

若有只要去in-interface即可;若沒有需將in-interface轉換成dst-address.
gfx wrote:
沒問題,不過您可以把...(恕刪)


應該去掉in-interface就可以了。


另外我想還有一個地方要注意的,
loopback的client和server,在route list內要走同一條gateway才行,
之前有把lan內的設備走不同gateway,結果和server不同gateway的設備loopback都不成功。
  • 4
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?