部署家中網路的流水帳

我今年 9 月搬家到了藤澤,簽了一個非常噁心人的 Softbank 的網路合約之後,花了大半個月才搞清楚這個網路的狀況。於是就基於自己的需求,在家中部署了多項服務。今天寫這篇文章就是來分享一下部署過程中遇到的困難以及解決的方案。

需求

  1. 能夠有穩定的有線、無線網路
  2. 每個設備都有 IPv6 支持
  3. 訪問學校資源時自動通過 VPN 連接學校內網
  4. 在區域網內提供 NAS 服務
  5. 在區域網內提供私有 git 服務來維護代碼
  6. 支持通過 VPN 訪問家中網路
  7. 對外提供 Web 網路服務

之所以定成這樣有幾個理由。一個是我從來不相信所謂的雲網盤,一定要自己存文件才是安全的。其次是經過測試,我的網路基於 IPv6 的傳輸速度比 IPv4 快不少,上下行都能穩定在 600Mbps 左右。這也使得家中不止要有無線網路,千兆有線網路對於壓榨性能也是必不可少的。

為了達成這個網路部署,前後也是經歷了兩三個月時間細心打磨方案,下面就是具體的過程。

網路拓撲

光纖自 NTT 的 GPON 接入 Softbank 的路由。之所以要接入 Softbank 的路由而不是直接接在自己的路由上,是因為 Softbank 使用了一個非常詭異的 IPoE + IPv6 的網路分配形式。其 IPv4 的地址是基於 IPoE 下發的,而其鑒權過程寫死在了其定製的路由器中。如果使用 PPPoE 進行撥號,沒有辦法達到最高的網速,經過實測,PPPoE 只能達到 30Mbps 上下行對等的速度。

路由系統

路由進來後就需要考慮自己的路由系統了,由於這個 Softbank 富士康路由器能調的選項實在是太少,有必要弄一個自己的路由器。考慮到我還打算部署服務,於是就決定弄一個伺服器,通過虛擬化的方式來實現。既然說到虛擬化,那麼面向個人免費的 ESXi 就是個不錯的選擇,挑一個對 ESXi 兼容性比較好的,適合放在家裡的伺服器就可以。

我最終的選擇是 HP MicroServer Gen8,

  1. 首先 HP 這款設備雖然有點老,但是性能還是勉強夠用,在二手市場上價格非常便宜。新版本甚至不支持 iLO,算什麼伺服器?
  2. 其次就是 HP 對這款設備在其官網上就有 ESXi 的配套驅動,不需要擔心兼容性的問題
  3. 再者由於存儲了文件,需要有 RAID 支持來保障文件的可靠性,而這款設備有原生的 RAID 1 支持
  4. 然後就是自帶了三個網口,去掉一個 iLO 管理口,剩下兩個還能做上下行,滿足我們對路由設備的需求
  5. 最後就是這款機器定位家庭伺服器、小型公司伺服器,所以是靜音且不需要機櫃的,這可太適合我們這個項目了

最終,我在 Yahoo 拍賣上以 35,000 日元(摺合人民幣 2200 元)的價格買到了一台 Xeon CPU E3-1220L V2 2.3GHz CPU,8GB 內存,沒有硬碟的設備。然後單獨購買了兩塊 4TB 的硬碟做 RAID 1。

在 BIOS 中配置好 RAID 選項,直接從 HP 官網上下載相應的 ESXi 鏡像,通過 iLO 連接遠程安裝系統,這一過程非常輕鬆。另一個網口自然就是要來接交換機的,我在日本亞馬遜上以 3,180 日元(摺合人民幣 200 元)買了一台 NETGEAR GS308-100JPS 的交換機,一共 8 個千兆口,基本夠家裡使用了。

操作系統選了 OpenWRT 18.06.1,直接 img 拉下來轉成 vmdk 塞進 ESXi 里,就可以直接運行了。在 ESXi 中虛擬兩個交換機 vSwtich0 接路由器虛擬機、外網網口、管理網;vSwitch1 接路由器、交換機網口以及之後的各種服務。

啟動後把外網 IPv4 做成 DHCP,IPv6 做成接力模式。配置內網的 DNS 服務為 ESXi 和 OpenWRT 設置好便於訪問的別名,第一階段完工。

外網服務

接下來來說這個外網服務的問題,這個問題是導致這個項目的網路拓撲變得如此複雜的直接原因。儘管 Softbank 宣稱只要打開 DMZ 和防火牆,就可以從公網 IP 訪問到設備。經過我將近一個星期的調試,我只想講一句 fnndp。

在網上找了半天,找到一篇 博客,講了它是通過開啟路由的 PPPoE 穿透,在內網撥號,從而讓家中上網走 IPoE + IPv6 的快速網路,而提供服務走的是 PPPoE 的較慢的網路。於是我也打算按照這個方法實施。

我在 ESXi 上安裝了一個新的 Debian 虛擬機,也同時接入 vSwitch0 和 vSwitch1 兩個虛擬交換機。在 vSwitch0 上進行 PPPoE 撥號,同時從 vSwitch1 上做 DHCP 客戶端。然後通過手寫 ip rules 的方法實現路由分流。從而讓這台設備成為網關 (gateway) 設備,其它服務可以通過這台的埠代理完成部署。

接下來就是比較簡單的,配置 StrongSwan 做了一個 IKEv2 的 VPN;安裝 GitLab 做了一個私有的 Git 服務。為了方便更多的 Web 服務部署,我使用了 OpenResty,並在上面運行 lua-resty-auto-ssl 的方式自動簽發 HTTPS 證書。有關安全的 HTTPS 配置,可以使用 Mozilla SSL Configuration Generator 生成。

內網服務

一個單獨拿出來講的是 NAS。我的選型是 OpenMediaVault。這個系統開源,而且基於 Debian,非常穩定。之所以沒有選 FreeNAS,因為我一共只有 8GB 內存,跑 ZFS 還是太吃力了一些。我在 ESXi 上單獨虛擬了一個 OpenMediaVault,需要虛擬兩塊硬碟出來,一塊系統盤,一塊存儲盤,這樣管理起來比較容易。

WiFi 的部分是個坑,我一開始覺得這個 Softbank 富士康自帶的 WiFi 質量還挺好的,5GHz 能跑上 300Mbps。但後來發現一個嚴重問題,就是會莫名其妙斷流,這個在比如聯機玩個馬里奧賽車的時候會抓狂。

這時候某好友送了我一台 Cisco CAP-3502i。雖然這設備 5GHz 連 802.11ac 都不支持,只支持 n。但是卻非常穩定。可惜這玩意使用 PoE 供電,如果換成 PoE 的交換機的話,實在是太浪費錢了。於是我就趁著回國間隙從京東買了一個 TP-LINK TL-POE150S PoE 供電模塊(99 元)。TP-LINK 這設備又便宜又穩定,但是 贈品的 RJ45 網線還不如不送,送的竟然是 CAT-5 規格的線。我到現在都沒搞清,在藤澤,扔網線屬於哪一類垃圾,怎麼才能扔出去。

雜項

除了上面說到這些,還做了一些小的東西。首先有一個颱風天的晚上,我的房間斷電了 1 秒不到,我感受到是因為我的伺服器重啟了。為了應對這種情況,我花了 5,980 日元(摺合人民幣 366 元)買了一台 255W 的 家用 UPS 以應對突發情況。(長時間的斷電我也不防了,畢竟是家用。)

另外我給我的桌面上單獨配了 Type-C 到乙太網的網口,和電源一起接在適配器上,隨時把 Macbook Pro 插上去就可以比較好地工作。另外給 Nintendo Switch 也單獨配了網線和 USB 網口。千萬 不要買任天堂官方的 USB 網口,那玩意甚至是 USB 2.0 的。隨便在 Amazon 上都可以買到,比官方的又便宜,速度又快的網口轉接器。

最後就是為了訪問方便,還是搞一個 DDNS 服務來為家裡配一個固定的域名。雖然這 Namecheap 的官方 Guidelines 里講的花里胡哨的,結果連個 Debian 的例子都沒有。我用的是 ddclient 客戶端,反正配置還挺簡單的。

結論

  1. 別簽 Softbank
  2. 我不確定這套玩意跑兩年加上電費和雲主機哪個便宜
  3. 要是來個地震直接把硬碟砸穿了啥 RAID 都沒用
  4. 手寫過 iptables 和 ip rules,才知道裡面有多少坑

推薦閱讀:

TAG:計算機網路 | 生活 |