树莓派-家庭NAS(2)

简介: 树莓派-家庭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)
相关实践学习
函数计算部署PuLID for FLUX人像写真实现智能换颜效果
只需一张图片,生成程序员专属写真!本次实验在函数计算中内置PuLID for FLUX,您可以通过函数计算+Serverless应用中心一键部署Flux模型,快速体验超写实图像生成的魅力。
目录
相关文章
|
Linux 数据安全/隐私保护 网络架构
如何搭建远程控制家中设备的Home Assistant智能家居系统【内网穿透】(上)
如何搭建远程控制家中设备的Home Assistant智能家居系统【内网穿透】
2674 0
|
监控 Java 应用服务中间件
谈谈你对spring boot 3.0的理解
1. Java 版本要求:Spring Boot 3.0 要求使用 Java 17 或更高版本,这可能会对一些仍在使用旧版 Java 的项目造成兼容性问题。需要确保项目使用的 Java 版本符合要求,并考虑是否需要升级 JDK 版本。 2. 底层依赖项迁移:Spring Boot 3.0 将所有底层依赖项从 Java EE 迁移到了 Jakarta EE API,基于 Jakarta EE 9 并尽可能地兼容 Jakarta EE 10。这可能会对一些使用了 Java EE 的应用造成影响,需要进行相应的修改和调整。 3. 插件和库的支持:尽管 Spring Boot 3.0 支持更多的插件和
2234 0
|
5月前
|
Linux API 网络安全
OpenClaw从零到一落地:阿里云/本地部署、免费模型API配置、多Agent协同与问题全解
OpenClaw(曾用名Clawdbot)是2026年主流开源AI智能体框架,以本地优先、强任务执行、多Agent协同、工具生态完善为核心优势,可实现代码开发、内容创作、信息检索、自动化运营、项目管理等复杂任务,支持私有化部署、7×24小时稳定运行,兼容阿里云千问、Coding Plan免费编程模型等主流大模型服务,适配个人开发者、轻量化团队、自媒体运营等多种使用场景。本文基于2026年最新版本,完整覆盖阿里云云端部署、MacOS/Linux/Windows11本地安装、阿里云千问API与Coding Plan免费API对接、多Agent配置、服务启动验证及全场景常见问题解答,所有命令与配置均
712 5
|
传感器
DIY_实现光敏电阻传感器简单控制LED
DIY_实现光敏电阻传感器简单控制LED
4431 2
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
2084 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
网络协议 Ubuntu 关系型数据库
树莓派ubuntu20.04+Docker+Nginx+Wordpress个人网站搭建全纪录(超详细,入门友好篇)
前言: 本文基于树莓派4B平台,搭载Ubuntu Server 20.04 LTS版本服务器系统,通过将树莓派服务器连接Ipv6公网网络,利用Docker工具,部署Nginx反向代理与Wordpress网站管理系统,实现网站搭建与异地访问。同时用到了域名管理、DDNS、MySQl等工具。本文将从服务器镜像烧录开始,将网站搭建过程进行完整的说明记录。 (经验来自互联网,多次试错学习后总结如下,以供参考。) 关键词: 树莓派; Ubuntu ; Ipv6 ;Docker
2097 1
树莓派ubuntu20.04+Docker+Nginx+Wordpress个人网站搭建全纪录(超详细,入门友好篇)
|
网络协议 Linux
使用nmcli命令设置IP地址并排查网络故障
nmcli 是一个功能强大的网络管理工具,通过它可以轻松配置IP地址、网关和DNS,同时也能快速排查网络故障。通过正确使用nmcli命令,可以确保网络配置的准确性和稳定性,提高系统管理的效率。希望本文提供的详细步骤和示例能够帮助您更好地掌握nmcli的使用方法,并有效解决实际工作中的网络问题。
1613 2
|
存储
烧录树莓派操作系统镜像的详细操作步骤
本文介绍了在树莓派上烧录操作系统镜像的详细步骤,包括准备工具、下载系统镜像、使用烧录软件等关键环节,帮助用户顺利完成树莓派的初始化配置。
2857 6

热门文章

最新文章