天天看點

群晖NAS再折騰

本文涉及到這些關鍵詞:群晖,NAS,端口轉發,虛拟伺服器,路由器,免費證書,IP回流……不懂網管的技術經理不是好程式員。

端口轉發

兩年前我買了一台雙盤位的群晖NAS,配置兩個4T的硬碟,這玩意兒一度改變了我使用電腦的模式,真是爽爆了!最最主要的功能就是我能用它規整我所有的資料,并且不管何時何地,隻要有網就能通路。為了能夠做到這點,我需要一些網絡配置,這就是:端口轉發。(或者稱作“虛拟伺服器”)

這是我家網絡的結構圖:

群晖NAS再折騰

群晖NAS放在我家的内網中,網段是192.168.1.0/24,家用路由器的WAN口連着光貓,組成了“上級網絡”,網段是192.168.0.0/24,光貓具有一個公網位址,這個位址是動态配置設定的。在外網要通路NAS,就得通過光貓,将網絡包轉到家用路由器,再通過家用路由器轉到NAS,很顯然,這裡面有兩次轉發。

你也許這時候有疑問了,為什麼NAS和桌上型電腦不直接接上光貓?這樣能省一個網絡節點啊?不這麼幹的原因是:

1,光貓的WIFI功能垃圾透頂,多連幾台裝置就卡殼

2,光貓作為路由器的功能太弱,可玩性太差,用來管理裝置各種不便

你也許還有另一個疑問,為什麼不把光貓接到家用路由器的LAN口上,使得所有區域網路裝置在同一個内網中?這樣設定端口轉發也隻需要設定一次轉發即可。像這樣:

群晖NAS再折騰

嗯,好問題,事實上我也這樣玩過,但很快發現這樣做之後,家用路由器就喪失了很多功能,比如流量監控,還有許多網管功能,都已經失效,因為路由器設計的時候,這些功能都是針對WAN口的控制,如果資料不流經WAN口,路由器不認為各個裝置在通路外網,這樣的連接配接方式相當于是将路由器當做一個普通交換機+一個無線AP來用了。

是以,我把光貓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
5001
……

就是說把對外網位址的5000端口的TCP包轉發到192.168.0.2的5000端口去。也許你想知道我為什麼能登入到光貓去設定,這是因為我跟電信的人要了光貓的管理密碼:P

接着是家用路由器的設定,類似的:

192.168.1.200

這樣,假設公網動态IP位址是:101.202.15.46(我瞎寫的),那麼我對http://101.202.15.46:5000的通路,就被最終轉到内網的http://192.168.1.200:5000去。

這樣就能在外網通路群晖的DSM界面了。

DDNS

很顯然,101.202.15.46這個位址不便記憶,且有可能會變動,是以我們還需要個“動态域名解釋”,說起動态域名解釋服務,有大家耳熟能詳的“花生殼”,當然,這次我沒用花生殼,群晖自己就有提供這個服務,可以在群晖的控制台-外部通路-DDNS中配置:

群晖NAS再折騰

一旦完成,你就可以使用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/

通過它,我們能擷取到免費的證書,且非常好用,唯一的問題是有效期比較短,但要續也很簡單。

如果你用的是群晖,你甚至都不需要什麼複雜的注冊和配置的過程,僅僅在“控制台-安全性-證書”這頁面中點幾下,一張有效的證書很快就能部署完成。

群晖NAS再折騰

這樣你和你的小夥伴就能愉快地在外網通路這個位址了: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)想通過域名通路這台伺服器,會出現什麼狀況?

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

群晖NAS再折騰

過程描述如下:

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,資料包走向大緻這樣:

群晖NAS再折騰

紅色箭頭是去,藍色箭頭是回,路由器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      

最後

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