你也試過把 127.0.0.1:8080 分享給朋友嗎? 為什麼明明查到自己的IP了朋友還是訪問不到我寫的網站呢?

在我第一次嘗試寫出網頁的時候,很興奮地把 127.0.0.1:8080 貼給朋友們試玩,結果卻發現他們都連不上。這個經驗帶我進入了網際網路的世界,讓我認識到要讓別人連到自己架設的服務,其實沒有想像中簡單。

認識IP位址:網路世界的門牌號碼

在開始談論複雜的網路概念之前,我們先來認識IP位址。想像IP就像是網路世界的門牌號碼,每台連上網路的設備都需要一個IP位址,這樣其他設備才能找到它。

IP位址分為兩種:

  1. 公有IP (Public IP)

    • 可以被全世界存取的IP
    • 例如:Google的DNS服務器(8.8.8.8)
    • 每個IP都是獨一無二的
  2. 私有IP (Private IP)

    • 只能在內部網路使用的IP
    • 例如:192.168.1.2(你家的電腦)
    • 不同的內部網路可以使用相同的IP

就像一棟大樓,公有IP就像是大樓的門牌號碼(台北市信義區信義路五段7號),而私有IP就像是大樓內的房號(8樓A室)。不同大樓可以有相同的房號,但不能有相同的門牌號碼。

為什麼需要私有IP?

看完上面提到的公有IP和私有IP之後你可能會想:「既然公有IP可以被全世界存取,那為什麼不乾脆讓每個設備都使用公有IP就好了?」
這是因為IP位址的數量限制。目前最常用的IPv4位址系統,總共只能提供約42億個不同的IP位址。聽起來很多?但想想看:

  • 全球已有超過100億台連網設備
  • 每個人平均擁有2-3個連網設備(手機、電腦、平板…)
  • 未來連網設備只會更多

如果每個設備都要用公有IP,早就不夠用了!這就是為什麼我們需要私有IP:它允許不同的內部網路重複使用相同的IP範圍。就像每棟大樓都可以有自己的1樓、2樓、3樓,不會互相衝突。

那動態IP又是怎麼回事?

了解了IP位址不夠用的問題,我們就能理解為什麼會有動態IP了。
想像網路公司(ISP)就像一家租車公司:

  • 租車公司有100輛車,但有1000個客戶
  • 不是每個客戶都會同時租車
  • 所以租車公司可以靈活調配這100輛車給有需要的客戶

同樣地:

  • ISP擁有一定數量的公有IP
  • 但客戶數量比IP還多
  • 不是每個客戶都會同時上網

這就是為什麼家用網路通常是動態IP:

  • ISP不需要準備太多公有IP
  • 可以彈性分配IP給正在使用的用戶
  • 對一般使用者來說影響不大

但這也帶來了一個問題:如果你想要架設網站或服務,讓別人連進來,就會遇到困難,因為:

你的IP位址會不定時改變
別人無法知道你最新的IP是多少

這就是為什麼自架服務會遇到困難的第一個原因。

接下來,我們還會談到另一個重要的概念:NAT(網路位址轉換)。

NAT 又是什麼?

NAT:私有IP與公有IP之間的轉換器

前面我們提到了私有IP的概念,讓我們可以在內部網路重複使用相同的IP範圍(例如192.168.0.x)。但這樣帶來一個新問題:這些使用私有IP的設備要怎麼連上網際網路?
這就是NAT(Network Address Translation,網路位址轉換)的用途。

nat-diagram

NAT的運作就像一個轉接器:

當內網設備(使用私有IP)要連上網際網路時
NAT會把這個私有IP轉換成公有IP
讓設備可以正常連上網際網路

這樣的設計帶來一個重要的特性:單向性

內網設備可以正常連到外網
但外網無法直接連到內網設備

這對自架服務有什麼影響?

當你在家裡的電腦上架設了一個網站:

你的電腦使用私有IP(例如192.168.1.2)
你的路由器有一個公有IP(例如1.2.3.4)
當朋友想要連到你的網站時:

他們知道你的公有IP(1.2.3.4)
但NAT不知道要把連線轉發給哪台內網設備
結果就是:連不上你的網站
並且你的公有IP 還是動態的! 可能三天兩頭就換一個

這就是要自架服務會遇到的第二個問題。

自架服務主要面臨兩大挑戰:

  1. 動態 IP - 位址會定期變動
  2. NAT 限制 - 外網無法直接連入

三種不同情境的解決方案

這邊先簡單介紹三個針對這兩個問題的解決方案,在下一篇文章中會分別針對這三種該如何實作做詳細的介紹!

解決方案 優點 缺點 適用場景
Ngrok - 快速設置
- 自動配置 SSL
- 免費版有限制
- 連線不穩定
- URL 較長且隨機
- 臨時展示作品
- 開發測試階段
- 短期使用
Cloudflare Tunnel - 完全免費
- 自帶 HTTPS
- 設定簡單
- 穩定可靠
- 需要 Cloudflare 帳號
- 域名需轉入 Cloudflare
- 長期穩定運作
- 要求安全性高
- 不想處理複雜設定
DDNS + NAT - 完全控制
- 學習價值高
- 無需依賴第三方
- 設定較複雜
- 需要路由器支援
- 需要自行維護
- 想深入學習網路
- 需要完全控制
- 自架 DNS 服務

💡 Hint:如果想要長期穩定運作的服務,建議使用 Cloudflare Tunnel 方案。

結語

相信讀到這裡,你已經了解為什麼在家中架設服務會遇到連線問題了。這些問題聽起來很複雜,但別擔心!每個架設過網路服務的人都曾經遇到過這些挑戰:

  • 因為動態IP而煩惱服務位置一直改變
  • 被NAT擋住而讓外部連不進來
  • 嘗試了很多次卻總是失敗

但正是這些問題讓我們更了解網路的運作原理。就像學習任何新技術一樣,一開始總會遇到障礙,但克服這些障礙的過程正是最寶貴的學習機會。

在下一篇文章中,我們會介紹具體的解決方案,一步一步學習如何自架穩定的對外服務。無論你是想要架設個人網站、分享自己的作品,還是純粹想要學習網路技術,這些網路知識都會是很好的基礎。