天天看點

基于IPFS和Ngrok建構自維護資源網關(進階)【應用】(進階)基于IPFS和Ngrok建構自維護資源網關

Edit

【應用】(進階)基于IPFS和Ngrok建構自維護資源網關

作者簡介:戴嘉樂( Mr.Maple ) | 前百度進階研發工程師 | IPFS應用實踐者&布道師| 個人網站: https://www.daijiale.cn 聯系方式:微信号:daijiale6239
  • 【應用】(進階)基于IPFS和Ngrok建構自維護資源網關
    • 一、背景
    • 二、意義
      • 2.1 IPFS資源網關的意義:
        • 2.1.1. 目前主流浏覽器還未全面支援 ipfs:// 協定,需要安裝專門的用戶端/插件
        • 2.1.2沒有安裝IPFS Desktop,也可以通過HTTP方式與IPFS網絡産生互動來擷取IPFS 網絡的内部資源。
      • 2.2 自維護的意義:
        • 2.2.1 ipfs.io 預設網關存在DNS污染現象:
        • 2.2.2 預設的Bootstrap都是指向官方提供的節點:DigitalOcean 雲計算中心
        • 2.2.3 增強網關通路安全性,将資源服務與代理服務用防火牆隔開
        • 2.2.4. 官方提供的 Public Gateway 穩定性感人
    • 三、優化與進階
      • 3.1 個性公網域名+IPNS挂載
        • 多節點 IPNS 更換的方案
      • 3.2 網關資源優化 (緩存/帶寬優化等)
        • 3.2.1 針對同IPFS網絡資源請求方:
        • 3.2.2 針對外部HTTP網絡資源請求方:
      • 3.3 自動化控制資源的分享權限
        • 3.3.1 舉個很簡單的場景執行個體
        • 3.3.2 資源分享權限實作
        • 3.3.3 Ngrok的Client Restful API Postman測試
    • 四、IPFS資源網關應用面
    • 五、參考文獻

一、背景

上篇文章 《【應用】(入門)基于IPFS和Ngrok建構自維護資源網關》 ,我們通過 Ngrok 為IPFS節點配置 HTTP Tunnels ,充分利用了其 NAT穿越 的特性,成功搭建了屬于自己的 資源網關 ,為他人提供IPFS節點服務。但是這僅僅是一個雛形,缺陷還很多,這篇文章來講解對資源網關的種種優化和配置。

二、意義

之前一些朋友問到了這件事的意義,這邊簡單梳理了一下,我認為對于 IPFS這塊的開發者 ,需要 部署私有叢集的DevOps ,以及 未來想組建Filecoin礦場的礦工 ,這件事情都相對比較必要,具體如下:

2.1 IPFS資源網關的意義:

2.1.1. 目前主流浏覽器還未全面支援 ipfs:// 協定,需要安裝專門的用戶端/插件

2.1.2沒有安裝IPFS Desktop,也可以通過HTTP方式與IPFS網絡産生互動來擷取IPFS 網絡的内部資源。

2.2 自維護的意義:

2.2.1 ipfs.io 預設網關存在DNS污染現象:

ipfs.io IP解析所在的實體位置位于美國 ThePlanet機房

在國内,對 ipfs.io 的ping請求被解析為 31.13.72.34 IP

此IP所在實體位址為:愛爾蘭Fackbook分公司

ipfs.io 存在DNS污染現象

2.2.2 預設的Bootstrap都是指向官方提供的節點:DigitalOcean 雲計算中心

如果需要構造自己的IPFS私有網絡,需要為本地的私有節點添加反向代理

2.2.3 增強網關通路安全性,将資源服務與代理服務用防火牆隔開

2.2.4. 官方提供的 Public Gateway 穩定性感人

兩個月前的:

最近看了一下:

三、優化與進階

3.1 個性公網域名+IPNS挂載

上傳Hash為 QmdzsNmvKiKQve8z15gamNo5s31g9bTWhzBg9SKG1YKTow 的IPFS資源,并挂載到本地NodeID為 QmeUGXG4K4hbNPbKDUycmNsWrU3nDN69LLgHkWU2yUN6FZ 的IPNS上,如下圖所示:

開放網關,進行效果對比測試:

監控NAT請求效果:

一次個性公網域名(需要在Ngrok付費申請)+ IPNS挂載就完成了

多節點 IPNS 更換的方案

這邊也介紹下多節點 IPNS 更換的方案,友善一些朋友更新網關資源的同時也可以保證對外的IPNS一緻性:

  • 1.節點A建立新公鑰:

ipfs key gen --type = rsa --size= 2048 mykey

  • 2.記錄生成在.ipfs/keystore中的公鑰mykey
  • 3.釋出IPFS資源A,得到hashA,挂載A節點,生成IPNS HashA:

ipfs name publish --key=mykey hashA

  • 4.将節點A建立的公鑰mykey 複制到節點 B 的keystore目錄
  • 5.在節點B,釋出IPFS資源B,獲得hashB,挂載B節點,得到IPNS HashB,這個值和IPNS HashA一緻:

ipfs name publish --key=mykey hashB

3.2 網關資源優化 (緩存/帶寬優化等)

3.2.1 針對同IPFS網絡資源請求方:

設計了一種緩存自啟動方案,解決存儲和請求過程中的資源複用消耗:

3.2.2 針對外部HTTP網絡資源請求方:

設計了一種防作弊,解決過多帶寬資源消耗的方案:

這塊一定注意區分兩個場景概念:

  • 同IPFS網絡請求場景 是指兩個節點共同運作,暴露公共網關的同時,通過HTTP進行對等連接配接通路。
  • 外部HTTP網絡請求場景 是通過NAT的形式将本地IPFS節點存儲的資源暴露在公網下,供各個應用方、裝置方進行HTTP通路,這裡的IPFS節點角色相當于一個中心存儲服務了,不具備P2P特性。

優化方案按照不同場景有不同政策,之前很多朋友搞不清楚(确實,也容易混淆)。

3.3 自動化控制資源的分享權限

有時候針對我們自己建構的私有IPFS網絡,需要将資源外放,但是外 放需要政策來進行自動化控制 (內建在業務環境裡)

3.3.1 舉個很簡單的場景執行個體

我編寫的業務應用需要 接收到特定以太坊智能合約的轉賬回調函數 ,來 自動開啟對應智能合約中IPFS資源外放的開關 ; (eg:隻有當買家遵守以太坊的智能合約支付了一定數量的ETH或者其他ERC2.0代币後,才能解鎖擷取到我存儲在IPFS網路中的自拍照) 但這個IPFS網絡往往很多時候是我自己部署的 私有叢集 (不會搭建私有網絡的朋友可以參考董哥的: 《中華人民共和國著作權法》 起訴(奉陪到底),授權轉載也請注明原出處。 已授權轉載的公衆号和媒體網站有:

  • 巴比特 IPFS專欄
  • ipfser.org
  • 公衆号:IPFS星際社群 (IPFS-Fund)
  • 公衆号:IPFS指南(ipfs_guide)

歡迎對這塊有興趣的朋友加微信聯系方式如下:

也歡迎加入我的知識星球:

  • 相對微信,提供更高優先級和更多詳細的提問回複(盡請諒解,最近加的人太多了)
  • IPFS應用和開發方面的實踐資訊
  • 享受個人舉辦的一些IPFS線下活動的福利和權益

五、參考文獻

  • 【區塊鍊】利用ipfs建構自己的去中心化分布式wiki系統
  • Ngrok Doc
  • ipfs.io

繼續閱讀