樹莓派-家庭NAS(2)

樹莓派-家庭NAS(1) http://www.lxweimin.com/p/9be7ada37863
樹莓派-家庭NAS(2) http://www.lxweimin.com/p/91405ca824b8
樹莓派-家庭NAS(3) http://www.lxweimin.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閱讀 228,936評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,744評論 3 421
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,879評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,181評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,935評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,325評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,384評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,534評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,084評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,892評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,623評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,322評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,735評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,990評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,800評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,084評論 2 375

推薦閱讀更多精彩內容

  • 家里升級了電信200M寬帶,上行也提高到了20M,原來的百兆路由器已經不能滿足需要了,經過一番比較最終入手了華碩A...
    0晨鶴0閱讀 208,293評論 19 138
  • 當今互聯網到處存在著一些中間件(MIddleBoxes),如NAT和防火墻,導致兩個(不在同一內網)中的客戶端無法...
    空即是色即是色即是空閱讀 1,021評論 0 0
  • 我相信一些人,不管發生什么,始終都相信著,,, 他們是怎么樣的一群人呢?對我來說,就算他們是錯的,我依舊相信你,我...
    另一個自己WYH閱讀 98評論 0 0
  • 今天,女兒學校舉辦二年級家長開放活動。 早上,七點半,帶著女兒,趕到學校。女兒先進教室,家長們被老師領著,去一樓參...
    玉妮閱讀 1,239評論 22 30
  • 感恩:今天發現了一個新規律,其實她一直都存在,只是我當下的眼睛和心態剛剛發現他,他是什么呢,當我開始我的心理成長路...
    冰藍兒8閱讀 198評論 0 0