分享

NAS穿透长城宽带等NAT式的ISP网络接入internet 的方法

 langfeinaojin 2012-04-29

NAS穿透长城宽带等NAT式的ISP网络接入internet 的方法

为了将家中一票电子设备方便的联络起来,前一阵子泡坛子时突然发现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./site/support/router-database)。我个人的建议是,既然买了NAS,就必须败一台千兆路由器,那么不如直接买一台官方支持DDWRT固件的(具体的品牌...啥也别说了,请神吧!)。
     
    第一步:在VPS上搭建PPTP服务器(也可以是OPENVPN)。
    如何在LINUX系统上搭建PPTP服务器?感谢大神的帮助,请各位参考http://www./centos-vps-vpn-pptp-install.html 。
    
    需要特别注意,
     1、上述文章中pptpd安装包版本已不是最新(新版更稳定),因此可以将 rpm -ivh http://acelnmp./files/pptpd-1.3.4-1.rhel5.1.i386.rpm 指令换成 rpm -ivh  http://poptop./yum/stable/packages/pptpd-1.3.4-2.rhel5.i386.rpm
     2、在按照上述文章编辑/etc/ppp/chap-secrets时,应该为你的路由器按照如下方式设定固定的VPN内网IP:
    用户名 pptpd 密码 xxx.xxx.xxx.xxx
    (上述 xxx.xxx.xxx.xxx即为你设置的固定VPN内网IP,只要是这个账号密码登陆VPN路由器,就会被分配到这个内网IP地址,但该IP一定要在你在/etc/pptpd.conf文件中设置的remoteip的网段内)
    先用已设置好的服务器地址、账号、密码连接VPN服务器试试,如果连接、上网都没有问题的话,我们继续下一步。

    第二步:设置路由器。
    此步非常关键。要达到p2p(也就是bt下载等)以及国内网站、网游等流量不走VPN的目的,我们要拜托万能的DD WRT固件了。DD WRT固件本身不能达到该目的,需要安装开源的autoddvpn。请参考http://code.google.com/p/autoddvpn/ 。请务必使用autoddvpn的graceMode模式。
    
    按照auotoddvpn的指引设置好后重启路由器,试试幽土鳖、推忑等网站(哇,世界就在眼前!),再用Traceroute测试一下连接,确认下是不是国内网站(包括国外aol等网站)都走普通通道,幽土鳖、推忑等网站都和谐地走VPN通道(神奇吧?!)。

    第三步:打通VPS和你家路由器之间的通道。
    这里,我们要利用LINUX下强大的iptables命令。
    用SSH登陆你的VPS服务器后,输入如下命令(务必注意大小写):
    iptables -t nat -I PREROUTING -p tcp --dport 5000 -j DNAT --to xx.xx.xx.xx
    iptables -t nat -I POSTROUTING -p tcp --dport 5000 -j MASQUERADE
  上述命令中,5000为你家NAS管理的端口号(群晖的http为5000,https为5001),xx.xx.xx.xx应填写为你在第二步中为路由器设置的VPN固定内网IP地址。
   然后输入命令:
   iptables -t nat -L
   看看列出的表中,是否存在类似下图的结果:


确认无误后,输入命令:
  service iptables save
  service iptables restart
  上述命令将我们刚才修改的iptables列表保存,并重启该服务。
   接下来测试一下:
   在IE浏览器中输入  http://VPS的IP地址:端口号  (群晖的http的端口号为5000)  
   你得到的信息应该是”无法显示该页面。“。
   我擦,不是说打通了VPS与路由器之间的通道了么?!是,VPS与路由器之间通了,但我们还有最后一步。
  
   第四步  打通路由器到NAS的通道
   
   虽然VPS与路由器之间通了,但被VPS转送过来的连接请求到达路由器后,路由器不知道该怎么办了,无法响应这个请求,只能拒绝。我们第四步就是要告诉路由器,来自VPS的目标端口号为5000(或你NAS的其他端口号)的TCP协议连接,全部转发给局域网内的NAS。
   
   用SSH登陆上你的路由器。如果autoddvpn的jffs方案设置的路由器的话,那么你应该已经建立过/jffs目录了,输入指令:
   mkdir /jffs/etc
   mkdir /jffs/etc/config
   vi  /jffs/etc/config/setnat.wanup
   (vi是编辑命令,不会用的话,请一下神吧...)
   将如下内容拷贝到setnat.wanup这个文件里,其中第一个xxx.xxx.xxx.xxx是你为路由器设置的VPN固定内网IP地址,第二个xxx.xxx.xxx.xxx是你NAS的局域网地址(请把你的NAS的局域网地址设置为固定的IP地址),两个5000是端口号(应改为你NAS的端口号):
   #!/bin/sh                                                                                                        
   iptables -t nat -A PREROUTING -p tcp -d xxx.xxx.xxx.xxx --dport 5000 -j DNAT --to-destination xxx.xxx.xxx.xxx:5000
   
   保存文件后退出,再输入如下指令修改为执行权限:
   chmod +x /jffs/etc/config/setnat.wanup
   
   输入reboot,重启你的路由器吧!
   
   好了,这回在IE浏览器中输入http://VPS的IP地址:端口号
   是不是出现了NAS的登陆页面啦?!
   当然,你还可以按照上述方案,把更多的端口连接到NAS上,让NAS可以对外提供更多服务。   

   至此,我们已实现了通过公网IP地址毫无障碍的登陆NAS。没有人知道,这个NAS的数据包是从天朝到了地球另一端后,再回到天朝的....orz....
   此外,我们还把家中的网络彻底地跟全球的网络接上了(不要干坏事哦)...同时还不会对天朝内的网页浏览、游戏、下载造成任何影响。
   此方案唯一的缺点,就是如果路由器与VPS间的VPN连接意外断开又没能自动重连(autoddns存在无法自动重连只能重启路由器的情况)的话,就无法通过外网IP登陆NAS了。但由于我们采用的是完全私人的VPN连接,没有人跟你抢带宽,因此稳定性还是不错的。此外,每个月还得支付一笔VPS的租金(便宜的大概7、8美金吧)...
    最后,提醒各位,设置好VPS的防火墙,藏好SSH端口,避免被黑客入侵。以免黑客顺藤摸瓜,把你家路由器给黑了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多