访问内网NAS的另一种策略(转)
声明:此文为本人搜索得来,不甚明了。发出来供大神参考,希望可以有人发一个更傻瓜化的教程来造福内网IP的
网友。
最近家里买了一台NAS服务器,用来完成多项任务,比如存储和管理大量的照片,用做24小时离线下载机器等。但其中NAS比较吸引我的一个功能是,能够随时随地从外网访问家里NAS机器上的数据,并且能够在外地游玩的时候,把照片通过互联网随时传到家里的NAS机器上备份并腾出设备空间继续拍照。
这样做的前提是你的路由器得有一个外网ip。有了外网ip后,可通过设置路由器的端口转发,再设置一个DDNS域名就可随时访问家里的NAS了。但恰好自己使用的网络是鹏博士集团下的一家公司(宽带通,长城宽带都是),恰好他们以转卖二手带宽,不给拨号用户外网ip而著称。他们给你的拨号ip实际是经过多层NAT转发的一个大局域网ip。为了实现目的,必须解决所谓的NAT穿透/NAT打洞/内网穿透问题。
一开始搜到了花生壳,最近刚好除了内网版,号称可以实现没有公网ip的情况下访问你的内网设备。测试了一下果然可以,但需要交年费,并且限制流量,要想用更多的流量就得交更多的钱,弃用之。
最后找到了ssh的反向端口转发(reverse port forwarding)功能,这是常被忽略但是非常强大的一个用途。原理是在本地机器的端口和远程机器的端口建立映射关系,这样访问远程机器指定端口时,所有请求都会被加密并传输到本地机器的端口上,本地机器响应后将结果在转发回远程机器的端口,整个过程看起来就像远程机器做出响应一样,强大之处是远程机器可以直接绕过防火墙和各种NAT转发,准确找到你的内网机器。
具体做法很简单,只需要一个命令:
ssh -NfR <remote port>:localhost:<local port> remoteuser@remoteserver
其中remote port是要接受请求的远程机器端口,local port是要做出响应的本地机器的端口, remoteserver是远程机器的地址,remoteuser是负责转发的具体用户。比如家里的NAS端口是8080,你的vps外网地址1.2.3.4,那么可以通过在你的NAS上执行ssh –NfR 8888:localhost:8080 user1@1.2.3.4命令后,访问vps的8888端口来访问家里的NAS机器了。
几个需要注意的问题:1. 需要设置远程机器ssh配置文件中的GatewayPorts参数来达到允许任意地址机器来使用这个转发规则的目的,否则上述命令只允许在远程机器本机上的请求通过,centos上操作见此;2. 该命令执行后,如果一段时间内没有请求被转发,则ssh反向连接会自动断开,这时候就需要autossh之类的工具来维持这个连接(实时监测,断开后自动重连),具体使用方法可以搜到很多例子;3. ssh通过autossh自动重连时不可能每次都手动输入用户密码,所以需要改用key authentication的方式连接(将本地机器的用户公钥添加到远程机器用户的~/.ssh/authorized_keys文件中)。
虽然鹏博士的实际出口网速很慢,但在大局域网下迅雷下载能满10M/s,可在线看1080p视频,性价比还是挺高的,明年不用换高价的宽带了。。。
PS: 此方法可用于其他场景,比如回家后远程访问公司机器上的资料,给外网客户演示公司内网机器上的demo等。
能不能够再详细些,感觉很有用 NAS穿透长城宽带等NAT式的ISP网络接入internet 的方法 2012-04-29|langfein...|转藏(22) NAS, 穿透, NAT 为了将家中一票电子设备方便的联络起来,前一阵子泡坛子时突然发现NAS是个好玩意。不仅可以在内网上高速共享硬盘,挂机PT,为我的macbook提供time machine备份服务,也能随时从公网访问,支持账户权限设置,还支持一大票的主流的share协议(windows、linux、mac os都木有问题),耗电也低。二话不说,败入群晖212J(应该是双盘位里最便宜的群晖NAS吧..NAS的价格还是虚高啊,不过他家的软件确实做的不错...)和2T硬盘(坑爹的价格啊!!!)。 开始捣鼓。。。。。此处省去1000字。。。。 所有设置完毕,局域网内没有问题,速度杠杠的(下载最高到90M/S,一般维持在70M/S上下,千兆网络)。路由器设置端口映射...郁闷的事来了,从公网(internet)上无法通过路由器获取的IP地址访问NAS!! 虽然,买NAS的主要目的是为了家庭内共享储存,但不能公网访问的话,还是会少了好多折腾的乐趣(比如外出出差的时候让NAS帮忙挂个PT,ipad从NAS临时取个文件,传几张照片什么的....)。不甘心,一顿google baidu,终于让我找到了原因——问题就出在我家的网络接入商(ISP)长城宽带! 好吧,关于长城宽带的口碑我就不多说了,大家可以自己baidu一下,每每提到这个公司,都是一顿黄瓜、番茄、白菜、土豆丝....长宽的优点就是便宜,基本不存在网通、电信互通的问题(用utorrent下载的速度确实快,这点还是要承认的),而它的的问题(除了百度贴吧里说的限速、封BT、封RAYFILE等等外)就在于他的接入方式——与普通电信、联通的ADSL不同,长宽是通过NAT的方式(什么叫NAT...baidu 一下吧!)让用户接入公网,因此用户通过pppoe方式取得的IP地址并不是internet公网的地址,而是长宽的内网地址。测试下自己家的网络是不是公网地址的方法很简单,baidu一下“IP 地址查询”,多打开几家不同的查询网站,看看显示的来源IP地址是不是都一样,如果不一样,排除网站显示错误外,那就证明你家的网络也十有**是NAT模式了! NAT的最大问题在于,由于你没有公网IP,internet网上的其他用户无法直接找到你的地址,也就没办法主动与你建立通信(例如,BT时大多数人都无法连上你,PS3显示联机功能受到部分限制...)。 问题找到了,接下来就是解决方式了,好吧,喝口水,让我们进入正题... 既然问题出在没有“地址”,那我们就给NAS(或者你家路由)找一个internet公网地址(通过UDP、服务器中介或其他什么的直接穿透NAT的方式就不说了,忒复杂——电脑还行,NAS也不见得能够支持...),目前本人找到的可行方案有两种: 第一种方案 利用IPv6地址。 什么叫IPv6?请自行烧香拜佛,斋戒三日,再请出baidu大神,为你指点迷津 ...。IPv6的口号是”让地球上的每一粒沙子都有一个IP地址”,那么我们的NAS自然也可以有一个!由于我国普通的宽带用户基本还是IPv4的环境(教育网用户请无视...),无法直接取得IPv6地址,因此我们要请出第一个大神出来——ipv6 tunnel。 ipv6 tunnel就是要在ipv4的环境里建立一个隧道,与ipv6的计算机进行通信,因此使用ipv6 tunnel的计算机会都获取一个ipv6的地址。而且由于ipv6地址实在是太多了,一些ipv6 tunnel服务商都免费地向用户提供固定的ipv6地址。由于我天朝的ipv6服务提供商大多使用软件的方式而不提供ipv6 tunnel接入服务器,因此我们只能请出google大神找出一家nice点的服务提供商。 好吧,它就是gogo6.com。如何注册该网站....E文不好的童鞋可以请出大神google,网上一堆教程...。 群晖的IPV6 TUNNEL设置,就在控制面板——网络——TUNNEL里,非常简单的设置,服务器、用户名、密码,然后应用,喝口茶。显示“已联机”并取得了外部地址的话(大概是 xxxx:xxx:xxx的样子,ipv6和ipv4的地址的样子已完全不同),证明你已经成功了。 打开你的IE浏览器,输入“http://[你NAS的IPV6地址]:端口号”,你的IE浏览器会毫不迟疑告诉你——“无法显示该页面”。 好吧,别扔砖,我们还少了一步。由于当年制订这个坑爹的ipv6标准时,忽略了与ipv4的兼容性问题,目前ipv4和ipv6在大部分情况下相当于两个网络,他们之间是不通的!(让我想起了天朝的internet...)因此,除了原本就支持ipv6的网络外(例如教育网?),你也需要在你的计算机上使用ipv6 tunnel或者是其他的能在ipv4条件下使用ipv6网络的软件,例如六飞(6fei.com.cn)。不会用或是中文不好的童鞋可以请出大神baidu ... 好吧,到这里你电脑也已经进入IPV6的时代了,再次打开你的IE浏览器,输入http://[你NAS的IPV6地址]:端口号(NAS的IPV6地址请从tunnel界面里一个符号不错的copy下来填在前面的中括号里,端口号是NAS管理页面的端口号)。 好了,你的IE终于可以在internet上直接与NAS通信了! 但IPV6方案有个最大的问题:由于IPV6与IPV4的兼容性太差,在目前大多数的网络环境下,必须在客户端装上专门的软件才能解决问题,不仅麻烦,而且IPHONE、IPAD等移动终端不能访问NAS(越狱并的大神们请无视)。而且该种方式访问速度较慢,稳定性不好(原因不明)。 第二种方法利用虚拟专用网络(VPN!!!!连这个都是敏感词了么?) VPN是什么?按照国际惯例,请自行烧香拜佛,斋戒三日,再请出google大神,为你指点迷津.... 由于VPN是虚拟的”局域网“,因此,设置VPN后,NAS也能取得一个VPN网络内的地址,如果此时客户端(你在internet上的计算机)也同时在同一个VPN”局域网“里,那么通过访问NAS的VPN网络地址,就能与其进行通信! 我们要实现上述目标,需要的是一个VPN网络的账号、密码,免费的请自行google,收费的嘛....taobao一下(什么?!taobao 没有卖VPN服务的?!好吧,请换个类似“网络 加速”的关键词试试....另外,问清楚卖家是不是VPN,别买到代理服务器的账号了...)。建议使用PPTP的VPN,据称安全性木有其他类型的好(传输的数据是加密的,虽然有被截获后破解的可能,但据说很难),但PPTP的穿透性是不错的,比openvpn等易用性更强(iphone、ipad无法使用openvpn),况且我们也没有什么敏感数据...当然,有特别摄影癖好的童鞋请无视...。 群晖的VPN客户端设置在”控制面板“-”VPN“里。填写的内容很简单,包括选择VPN服务的类型、服务器名、用户名、账号。如果无法连接的话,请确认自己路由器的1723端口是打开的。 确认NAS可以连上VPN服务器并取得了VPN内网地址后,再在电脑上设置好同样的服务器(一定要一样!),VPN的账号和密码(如果你的账号不能同时登陆两台机器的话,那你得买两个VPN账号...),并按照baidu大神的指引设置好你的pc 或 mac后,在浏览器内输入 http://你NAS获取的VPN内网IP地址:端口号 (IP地址的填写方式和普通的IP地址一样,端口号是NAS管理页面的端口号)。 你应该能通过internet上的PC连上你的NAS了! 通过VPN连接NAS,比起IPV6而言,速度更快,更稳定(取决于你购买的VPN服务速度),IPAD和IPHONE等移动终端也能设置VPN后顺利访问。但和IPV6一样,不能在普通电脑和设备上直接访问,必须先设置VPN。而且VPN方案有个致命缺陷,一旦设置VPN后,NAS的所有internet连接全部通过VPN进行,PT下载彻底悲剧了.... 有木有更完美的解决方案?! 虽算不上绝对完美,但本人,作为baidu大神和google大神的得意门生,已找到了!(鲜花,鼓掌,聚光灯..) VPN方案有两个问题需要解决:1是客户端不再需要专门登陆同一个VPN服务器后才能连接上NAS;2、PT下载等大数据流量的服务不能通过VPN进行。 好了,上面写了这么多,以下才是全文的重点.... 由于NAS躲在NAT后面,除了VPN外,暂未找到其他可以方便穿透、并建立连接的通用方法(当然,会自己写程序的童鞋请无视....)。要与外界直接建立连接,VPN服务器是这个连接中的关键,我们需要让VPN服务器将外部网络的连接请求转发到VPN的内网里。因此,完美(或者说接近完美)解决该问题的思路,就是自己搭建一台VPN服务器。 需要的准备的设备环境:租用一台有固定IP 的VPS,一台可以刷DD WRT(此处请自行请神)通用完整版的家用路由器。 VPS可以用米国的...好处嘛...除了便宜...VPN...你懂的....。建议是:XEN结构,LINUX操作系统,拥有**IP,与国内连接的速度快。至于硬盘、内存大小、流量有限制等,则可以无视(当然,有搭建网站需求的另说)。 哪些路由器支持刷DD WRT,请移步DDWRT的网站查询(http://www.dd-wrt.com/site/support/router-database)。我个人的建议是,既然买了NAS,就必须败一台千兆路由器,那么不如 楼主出个详细点的吧 2G流量的花生棒确实不够用 1、什么是反向连接?
反向连接是指主机A(受控端)主动连接主机B(控制端),在主机A和主机B之间建立一个远程连接,通过这个连
接主机B可以主动的向主机A发送一些请求。
2、为什么需要主机A主动去连接主机B呢?
这是因为主机A在局域网内,如果没有对主机A进行端口映射,对于主机B来说主机A是不可见的,如果在主机B这
边向主机A发送连接请求,这个请求是不可达的。而主机B有自己独立的IP,对于主机A来说是可见的,可以直接向
主机B请求连接。
3、SSH反向连接的过程
方法就是主机A主动去连接主机B,主机B响应主机A的连接请求,它们之间就建立了一个远程连接。然后主机B在
本地再创建一个本地连接,重定向到主机A和主机B刚才建立的远程连接上,之后对这个本地连接的操作都会反馈到
远程连接上去。整个过程类似于文件的DUP,这就在主机A和主机B之间建立了连接通道,此时对于主机B来说,主
机A已经是可见了。
连接流程如下:
3.1、主机A ssh客户端向主机B sshd服务端发送请求,建立远程连接。
3.2、主机B sshd服务端创建本地连接很远程连接的映射(反向连接通道)。
3.3、主机B ssh客户端向主机B sshd服务端的连接通道发送请求, 建立主机B ssh和主机A sshd的连接。
完成连接后,主机A对于主机B可见的形式就是存在于主机B的那个本地连接。
4、为什么需要在主机B对远程连接映射一个本地连接?
反向连接就是CS架构,不过是受控端主动向控制端请求连接,让它们之间的连接建立。传统的CS方式是可以解决
主机A和主机B之间的连接问题,但是那样主机A和主机B的连接方式并不灵活,两者之间能做的事情,只能是CS之际
协议规定的事情。在主机B上建立了主机A的连接映射后, 对于主机B来说主机A已经不是局域网内那台不可见的主
机,主机A已经是存在主机B的一台可见主机,这样就消除了局域网和广域网的阻碍。 主机A和主机B之间建立的那
个远程连接就是主机A和主机B的通道-“网线”。
5、SSH反向连接的使用
要建立反向连接,首先在主机A上运行:
代码: 全选
ssh -f -N -R 10000:localhost:22 lyb@3322.org
10000是主机B上的本地连接端口, 22是主机B上远程连接的那个端口, lyb@3322.org是主机B的地址
连接上后,会需要输入密码。连接成功后,SSH反向连接就建立起来了。要连接到主机A,在主机B上运行:
代码: 全选
ssh lyb@localhost -p 10000
即可。
使用的过程中碰到一个问题, 就是在主机A上发起请求的时候, 需要输入密码。 如果我在家里, 不可能跑到公
司了去输入密码。于是用ssh public key的方法和写一个脚本来解决。脚本如下:
代码: 全选
#!/bin/bash
while true;do
RET=`ps ax | grep "ssh -f -N -R 10000:localhost:22" | grep -v "grep"`
if [ "$RET" = "" ]; then
echo "restart ssh server"
ssh -f -N -R 10000:localhost:22 lyb@hahalee.3322.org
fi
sleep 10
done
脚本的作用就是监控反向连接的服务, 在被异常中断的时候重启, 使用了SSH公钥后, 也不必跑到公司输入密
码了。 花生棒用户路过 想问下。SSH反向连接的过程
方法就是主机A主动去连接主机B,主机B响应主机A的连接请求,它们之间就建立了一个远程连接。那主机A又如何知道主机B的地址的。也就是,我电脑,不知道家里的获取的公网IP是多少,但是同时,家里的NAS也不知道我现在用的电脑的IP啊。哪他怎么主动给我发出链接请求呢。 n2n 的不是更加直接了吗?就是没见有过群晖安装N2N的教程,求大神指点
页:
[1]