群晖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

最后

折腾,有时候不在于直接产生了多少价值,还在于在这个过程当中真正学到了些东西。

相关文章
相关标签/搜索