树莓派-家庭NAS(2)

树莓派-家庭NAS(1) https://www.jianshu.com/p/9be7ada37863
树莓派-家庭NAS(2) https://www.jianshu.com/p/91405ca824b8
树莓派-家庭NAS(3) https://www.jianshu.com/p/80777ed85246

内网穿透选型

上一篇文章中介绍了,家用NAS树莓派的整体方案。在整体解决方案中说明的搭建整体方案的第一步是解决访问问题。本文将主要介绍访问解决方法。

内部网络穿透技术可以分为NAT、DDNS、反向代理和VPN。这里就不介绍这些方式,可以查看参考中的内容进行了解。这里说明他们的大概工作原理用于选型工作。

  • NAT技术:

    内网中的机器怎样访问公网上的网站?内网机器发送的数据可以经过Router转发的公网上,那公网上返回的数据怎么到达内网的机器内,这个过程就是NAT技术。主要技术是通过动态端口映射技术完成。


    NAT技术
  • DDNS技术:

    DDNS即动态域名解析,是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候,客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务程序负责提供DNS服务并实现动态域名解析。就是说DDNS捕获用户每次变化的IP地址,然后将其与域名相对应,这样域名就可以始终解析到非固定IP的服务器上,互联网用户通过本地的域名服务器获得网站域名的IP地址,从而可以访问网站的服务。


    DDNS技术
  • 反向代理:

    反向代理就是经常说的,有一台公网服务器和私网服务器在一个网络内。公网服务器上构建一个服务,把用户请求转发到死亡服务器上就可以了。


    反向代理技术
  • VPN技术:

    VPN技术就是将两个私网通过隧道技术组合成一个子网。


    VPN技术

方案选择

本次我们的方向是家用NAS,所以,网络环境也是家庭环境。所以,可能需要组合各种内网穿越技术才可以满足整体要求。所以,现在开始组织方案。

家用NAS

在本方案中家用网络使用的是电信网,电信网是有公网IP的。在没有公网IP的通信服务商,请自行选择其他方案。然后,再使用NAT技术的端口静态映射,将树莓派上的服务发布出去。使用DDNS技术的域名动态解析将路由器域名发布到域名上。

实现

  1. 先把树莓派的内网IP设置为静态IP。
  2. 实现上图中的第七步,在路由器上设置端口映射。因为自家使用的路由器不一样,我就不截图了。几乎所有的家用路由器都是支持端口映射的。
  3. 在树莓派上编写代码,实现上图中1,2,3步。我使用的是NETGEAR R6200V2,所以根据路由器的特点进行了公网IP的获取工作。
  4. 配置定时执行过程。

定时执行(cron)代码:

*/2 * * * * root /home/pi/update_public_ip.py > /dev/null 2>&1 &

更新域名IP代码(python):

#!/usr/bin/python2.7
#-*-coding:utf-8-*-

import os
import sys
import httplib
import urllib2
import urllib
import base64
import cookielib

# 获取网管地址,即路由器地址
def getGateway():
  return "172.25.1.1"

# 获取路由器上的公网IP。因为实在路由器上拨号上网的,所以从路由器上获取公网IP
def getPublicIP(ip, user, password):
  base64string = base64.b64encode('%s:%s' % (user, password))
  headers = {"Host": ip,
             "User-Agent": "Mozilla/5.0 (Windows NT 5.1; rv:52.0) Gecko/20100101 Firefox/52.0",
             "Accept": "*/*",
             "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
             "Accept-Encoding": "gzip, deflate",
             "Referer": "https://172.25.1.1/RST_st_poe.htm",
             "Connection": "keep-alive",
             "Authorization":"Basic %s"  % base64string}
  # 登录服务器,获取Cookie
  conn = httplib.HTTPConnection(ip, 80)
  conn.request("GET", "", None, headers)
  response = conn.getresponse()
  cookie = response.getheader("set-cookie")
  headers["Cookie"] = cookie
  conn.close()

  # 获取公网IP地址所在页面
  conn = httplib.HTTPConnection(ip, 80)
  conn.request("GET", "RST_st_poe.htm", None, headers)
  response = conn.getresponse()
  result = response.read()

  # 解析页面中内容,分解出IP地址
  start_index = result.find("IP地址</B></td>")
  start_index = result.find("<TD NOWRAP>", start_index)
  end_index = result.find("</td>", start_index)
  result = result[start_index:end_index]
  result = result[len("<TD NOWRAP>"):]
  conn.close()

  # 登出路由器
  conn = httplib.HTTPConnection(ip, 80)
  conn.request("GET", "LGO_logout.htm", None, headers)
  response = conn.getresponse()
  conn.close()

  # 返回IP地址
  return result

# 更新二级域名的IP
def updateDomain(ip):
  os.system("curl \"http://update.dnsexit.com/RemoteUpdate.sv?login=XXXXXX&password=XXXXXX&host=XX.XXX.X&myip=%s\"" % ip)

# 更新二级域名的主流程
if __name__ == "__main__":
  public_ip = getPublicIP(getGateway(), "XXXXX", "XXXXX")
  print "public ip : %s" % public_ip
  updateDomain(public_ip)

参考:

一分钟实现内网穿透(ngrok服务器搭建)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,585评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,923评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,314评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,346评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,718评论 3 291
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,828评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,020评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,758评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,486评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,722评论 2 251
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,196评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,546评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,211评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,132评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,916评论 0 200
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,904评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,758评论 2 274

推荐阅读更多精彩内容

  • 家里升级了电信200M宽带,上行也提高到了20M,原来的百兆路由器已经不能满足需要了,经过一番比较最终入手了华硕A...
    0晨鹤0阅读 201,094评论 19 137
  • 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法...
    空即是色即是色即是空阅读 963评论 0 0
  • 我相信一些人,不管发生什么,始终都相信着,,, 他们是怎么样的一群人呢?对我来说,就算他们是错的,我依旧相信你,我...
    另一个自己WYH阅读 82评论 0 0
  • 今天,女儿学校举办二年级家长开放活动。 早上,七点半,带着女儿,赶到学校。女儿先进教室,家长们被老师领着,去一楼参...
    玉妮阅读 1,188评论 22 30
  • 感恩:今天发现了一个新规律,其实她一直都存在,只是我当下的眼睛和心态刚刚发现他,他是什么呢,当我开始我的心理成长路...
    冰蓝儿8阅读 177评论 0 0