羣暉NAS再折騰

端口轉發

兩年前我買了一臺雙盤位的羣暉NAS,配置兩個4T的硬盤,這玩意兒一度改變了我使用電腦的模式,真是爽爆了!最最主要的功能就是我能用它規整我全部的資料,而且無論什麼時候何地,只要有網就能訪問。爲了可以作到這點,我須要一些網絡配置,這就是:端口轉發。(或者稱做「虛擬服務器」)瀏覽器

這是我家網絡的結構圖:緩存

 

羣暉NAS放在我家的內網中,網段是192.168.1.0/24,家用路由器的WAN口連着光貓,組成了「上級網絡」,網段是192.168.0.0/24,光貓具備一個公網地址,這個地址是動態分配的。在外網要訪問NAS,就得經過光貓,將網絡包轉到家用路由器,再經過家用路由器轉到NAS,很顯然,這裏面有兩次轉發。安全

你也許這時候有疑問了,爲何NAS和臺式機不直接接上光貓?這樣能省一個網絡節點啊?不這麼幹的緣由是:
1,光貓的WIFI功能垃圾透頂,多連幾臺設備就卡殼
2,光貓做爲路由器的功能太弱,可玩性太差,用來管理設備各類不便服務器

你也許還有另外一個疑問,爲何不把光貓接到家用路由器的LAN口上,使得全部局域網設備在同一個內網中?這樣設置端口轉發也只須要設置一次轉發便可。像這樣:網絡

 

嗯,好問題,事實上我也這樣玩過,但很快發現這樣作以後,家用路由器就喪失了不少功能,好比流量監控,還有許多網管功能,都已經失效,由於路由器設計的時候,這些功能都是針對WAN口的控制,若是數據不流經WAN口,路由器不認爲各個設備在訪問外網,這樣的鏈接方式至關因而將路由器當作一個普通交換機+一個無線AP來用了。ui

因此,我把光貓WIFI關掉,DHCP關掉,手動設置了光貓的網絡地址192.168.0.1,手動設置家用路由器的WAN口地址爲靜態IP,192.168.0.2,以及LAN地址爲192.168.1.1,打開家用路由器的DHCP功能,設置DHCP的範圍是192.168.1.2-192.168.1.99。設計

光貓端口轉發設置:代理

外部端口 協議 內部地址 內部端口
5000 TCP 192.168.0.2 5000
5001 TCP 192.168.0.2 5001
……      

就是說把對外網地址的5000端口的TCP包轉發到192.168.0.2的5000端口去。也許你想知道我爲何能登陸到光貓去設置,這是由於我跟電信的人要了光貓的管理密碼:Prest

接着是家用路由器的設置,相似的:code

外部端口 協議 內部地址 內部端口
5000 TCP 192.168.1.200 5000
5001 TCP 192.168.1.200 5001
……      

這樣,假設公網動態IP地址是:101.202.15.46(我瞎寫的),那麼我對http://101.202.15.46:5000的訪問,就被最終轉到內網的http://192.168.1.200:5000去。

這樣就能在外網訪問羣暉的DSM界面了。

DDNS

很顯然,101.202.15.46這個地址不便記憶,且有可能會變更,因此咱們還須要個「動態域名解釋」,提及動態域名解釋服務,有你們耳熟能詳的「花生殼」,固然,此次我沒用花生殼,羣暉本身就有提供這個服務,能夠在羣暉的控制面板-外部訪問-DDNS中配置:

 

一旦完成,你就可使用http://yourname.synology.me:5000來訪問你的DSM管理界面了。

另外DDNS的服務商有不少,找一個能用的就夠了,弄多個反倒麻煩。

值得注意的是,有一種狀況會致使你的DDNS配置不成功,那就是你的寬帶根本沒有公網地址,這個並不奇怪,你的手機連3G、4G上網,手機的地址就不是公網地址,它是移動/聯通的一個局域網地址,不信本身去看看。很明顯,DDNS將域名解釋到這麼一個局域網地址是沒有任何意義的。若是是這種狀況的話,就得用反向代理了,原理是你的NAS跟一臺有公網地址的主機保持一個數據通道,DDNS將域名解釋到這臺公網主機的地址去,公網主機經過數據通道將數據轉發到你的NAS上來,顯然,這種作法很低效,而且對公網主機形成的開銷較大,因此通常都是要收取必定費用的,花生殼等提供了這類服務,羣暉的QuickConnect也是相似這種服務,羣暉是免費的,但用起來感受不是很穩定,而且速度很慢。

SSL證書

下一個問題,我要用https訪問個人DSM界面:https://yourname.synology.me:5001。

但我自籤的證書瀏覽器不認,會阻止通常的用戶訪問,好比你想讓你的家人/同事也用NAS,他們一打開就看到證書無效,而後就沒有而後了。

解決方法是讓瀏覽器認這個證書,將根證書安裝到訪問者的電腦上便可。但這種方法很差,第一很麻煩,第二若是使用移動設備(手機平板之類)的話,就很難弄。因而你要給本身的域名搞一張證書,一看,都是收費的,且麻煩一大堆,遂放棄。

其實如今已經有一個完美的解決方案,那就是Let' Encrypt,這是它的官方站點:https://letsencrypt.org/

經過它,咱們能獲取到免費的證書,且很是好用,惟一的問題是有效期比較短,但要續也很簡單。

若是你用的是羣暉,你甚至都不須要什麼複雜的註冊和配置的過程,僅僅在「控制面板-安全性-證書」這頁面中點幾下,一張有效的證書很快就能部署完成。

 

這樣你和你的小夥伴就能愉快地在外網訪問這個地址了:https://yourname.synology.me:5001

關於Let's Encrypt的更多配置,請參考它的官網,總之這個是個好東西。

局域網裏直接用域名訪問

局域網裏直接用域名訪問你的NAS,可行不?試試看,你很快發現不可行,不可行就換回用內網IP地址訪問便可,若是你不想折騰,就到此爲止。若是想折騰或者瞭解下爲何,就接着往下看。

這是一個困擾了我好久的問題,這個問題簡單描述爲:爲何我不能用公網地址訪問本地服務器?

這又是一個很是很是常見的問題,公司裏有一臺服務器,地址是192.168.1.200,咱們經過端口轉發,使得外網能經過101.202.15.46這個公網IP地址來訪問這臺服務器,固然經過域名訪問也是同樣的,域名就被解釋爲101.202.15.46嘛。如今個人工做電腦(192.168.1.100)想經過域名訪問這臺服務器,會出現什麼情況?

我先把網絡結構簡化成這個樣子:

過程描述以下:

1,工做電腦,要訪問服務器,因而跟路由器說:「我要訪問http://101.202.15.46:80」,
2,路由器接到請求,看到地址原來就直接是本身的公網地址,因而按照端口轉發的配置規則,將請求轉到192.168.1.200:80去(注意,這個時候數據包並未流經公網)
3,服務器收到請求後要給客戶端返回數據,如何返回?固然是根據原地址來了,因爲數據包並未流經公網(未通過NAT),因此源地址是192.168.1.100,因而告訴路由器,我要發數據包到192.168.1.100去
4,路由器一看,這不就是內網地址麼?因而直接將數據包丟給了工做電腦,工做電腦收到了數據包

嗯?表面上看數據包有來有回,應該能夠,事實上不行——工做電腦嘗試跟101.202.15.46創建鏈接,但收到的包卻來自192.168.1.200,TCP鏈接沒法成功創建,通訊失敗。這個問題又有另一個常見的稱呼,叫:IP迴流。你們搜一下就能收到。

如何解決這個問題?

方法一:增長一個外網路由設備(稱之爲路由器B吧,原先路由器叫路由器A),並在路由器A上配置這麼一條路由規則:當來自內部的主機嘗試訪問101.202.15.46:80時,將數據包轉發到路由器B,路由器B收到數據包後再按正常操做把數據包轉回給路由器A,數據包走向大體這樣:


紅色箭頭是去,藍色箭頭是回,路由器B就充當了一個外部的中轉站。固然了,實際的狀況可能不須要額外的一個設備,但因爲我只是有所瞭解,沒有實際操做過,因此也寫不出更具體的內容了,如有不對,請不吝賜教。

方法二:將內網要訪問的yourname.synology.me域名解釋爲192.168.1.200,而後……搞定!

顯然方法二比方法一直截了當得多,這也是我認爲的「正統方法」。怎麼配這個域名解釋?最簡單的方法是直接修改本身電腦上的hosts文件,這樣不須要找公司的IT,本身就能搞定。但電腦上能弄弄,手機上呢?再說這麼多電腦,要一臺臺配置麼?還有若是你用的是筆記本,哪天拿到外網去辦公了,是否是又要把hosts文件改回來?

因此,最好的方法,仍是在路由器上配置,我家的路由器(ASUS RT-AC86U,刷了梅林固件)就能夠配。具體方法以下:

1,先開啓路由器的SSH功能(過程略)
2,SSH登陸至路由器
3,建立文件/jffs/dnsmasq.conf.add,內容是:

addn-hosts=/jffs/configs/hosts

4,建立文件/jffs/configs/hosts,內容是:

192.168.1.200 yourname.synology.me

5,重啓Dnsmasq服務

service restart_dnsmasq

搞定。這時候你試着在電腦上看看yourname.synology.me解釋到哪裏去了

nslookup yourname.synology.me

也許仍是外網地址,這是由於dns緩存的緣故,你清一下就行了

ipconfig /flushdns

最後

折騰,有時候不在於直接產生了多少價值,還在於在這個過程當中真正學到了些東西。

相關文章
相關標籤/搜索