National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 12

NAT 與私有網路

轉換表、埠轉送,以及 NAT 帶來的問題
Interaction 25 minute(s)

Learning Objectives

  • 說明 IPv4 位址不夠用的原因,並列出三段私有位址
  • 說明私有位址為什麼不能直接在網際網路上通訊
  • 說明 NAT 與 PAT 怎麼改寫來源位址與連接埠,並讀懂轉換表
  • 說明外部主動發起的連線為什麼進不來,並設定埠轉送開放內部的服務
  • 說明 NAT 帶來的問題:點對點連線困難、伺服器記錄的來源位址失真

IPv4 位址不夠用了

IPv4 位址是 32 位元,最多 232,大約 43 億個。扣掉保留的範圍,能分配的更少。 可是現在一個人就有手機、筆電、平板、手錶,家裡還有電視、冷氣、攝影機;位址早就不夠一台一個。 負責全球位址分配的 IANA 在 2011 年 2 月把最後幾塊 IPv4 位址分給各區域的位址管理機構,之後各區域也陸續發完。

能撐到現在,主要靠兩件事:

  1. 私有位址(RFC 1918):保留三段位址給內部網路自由使用,每個家庭、每間公司都可以重複使用同樣的位址
  2. NAT:在內部網路的出口,把私有位址換成一個公有位址再送出去,讓整個家只需要一個公有位址
私有位址範圍 前綴 位址數量 常見用途
10.0.0.0~10.255.255.255 10.0.0.0/8 約 1677 萬 企業、學校、雲端的內部網路
172.16.0.0~172.31.255.255 172.16.0.0/12 約 104 萬 企業內部、容器網路
192.168.0.0~192.168.255.255 192.168.0.0/16 約 6.5 萬 家用路由器

私有位址在網際網路上不會被路由:電信業者的路由器沒有往 192.168.0.0/16 的路由,因為同一個位址可能有上百萬個家庭在用,根本不知道要送去哪一家。 所以內部的電腦送出去的封包也許到得了伺服器,伺服器的回覆卻回不來。下面先實際看看這個問題。

互動練習:開啟 NAT

左邊是家裡的私有網路,R1 是家用路由器,g1 接到電信業者 ISP(ISP 不能下指令)。WEB 是網際網路上的網頁伺服器。 R1 已經有一條預設路由指向 ISP。

NAT 與 PAT:轉換表

NAT(Network Address Translation)是路由器在封包經過時改寫位址:從內部往外送時,把來源的私有位址換成路由器外側的公有位址;回覆進來時,再換回內部的位址。 路由器靠一張轉換表記住「誰換成了什麼」,回覆進來才知道要還給誰。

只換位址的話,一個公有位址同一時間只能給一台內部電腦用。家用路由器做的是 PAT(Port Address Translation,RFC 3022 稱為 NAPT): 連同來源連接埠一起換,用不同的埠號區分不同的內部連線,所以幾十台電腦可以共用一個公有位址。

內部位址:埠 換成(外部位址:埠) 對方
192.168.1.10:50001 198.51.100.2:40001 203.0.113.80:80
192.168.1.10:50002 198.51.100.2:40002 203.0.113.80:80
192.168.1.11:50001 198.51.100.2:40003 203.0.113.80:80

回覆進來時,目的是 198.51.100.2:40003,查表得知要換回 192.168.1.11:50001。 注意第一列和第三列內部的埠號都是 50001,兩台電腦各自選的埠號可能相同,所以 PAT 換成不同的外部埠來區分。 ping(ICMP)沒有連接埠,PAT 改用 ICMP 訊息裡的識別碼(identifier)來區分。

模擬器的 show nat 用「#編號」表示這些埠號或識別碼。真實的路由器還會替每一筆設定逾時:一段時間沒有封包經過就刪掉,騰出位置。

整理一下 NAT 讓封包改了什麼:

方向 改寫的欄位 不變的欄位
往外 來源 IP、來源埠 目的 IP、目的埠
往內(回覆) 目的 IP、目的埠 來源 IP、來源埠

改了 IP 標頭,IP 的檢查碼(checksum)與 TCP、UDP 的檢查碼都要跟著重算,這些都由路由器處理。

小測驗:私有位址與 PAT

1.

下列哪一個是私有位址?

2.

家裡五台電腦共用一個公有位址上網,路由器靠什麼分辨回覆要給哪一台?

3.

PC 從 192.168.1.10:50001 連到 203.0.113.80:80,經過 NAT 之後,伺服器看到的連線是?

第 1 次作答

外面的人為什麼連不進來:埠轉送

轉換表裡的每一筆,都是內部的電腦先往外連才產生的。如果是外面的人主動連到 198.51.100.2,路由器查表找不到對應的紀錄,不知道要交給裡面哪一台,只能丟掉。 所以 NAT 後面的電腦可以上網,但預設不能被外面主動連到。

情況 結果
外面直接連 192.168.1.20 網際網路上沒有私有位址的路由,送不到
外面連 198.51.100.2 的某個埠 轉換表沒有紀錄,路由器丟掉
外面連 198.51.100.2 的某個埠,且路由器設了埠轉送 依設定轉給內部指定的位址與埠

埠轉送(port forwarding)是事先在路由器加一筆固定的對應,例如「外部埠 8080 → 192.168.1.20:80」, 就能把家裡的 NAS 網頁開放給外面使用。這等於在 NAT 上主動開一個洞,開了以後這台內部設備就直接面對網際網路, 要確定它有更新、有強密碼、只開必要的服務;用不到時要關掉。

互動練習:埠轉送

同一個網路,R1 已經設好 NAT。這次換成從網際網路上的 WEB 往家裡連(WEB 可以下指令)。

NAT 帶來的問題

NAT 讓 IPv4 撐了很多年,但它改寫了位址,也打破了「每台設備有自己的位址、彼此可以直接連線」的設計,帶來幾個問題:

1. 點對點連線變困難。 視訊通話、多人連線遊戲、檔案分享希望兩台使用者的設備直接連線。如果兩邊都在 NAT 後面,誰都沒辦法主動連到對方。 應用程式只好借助網際網路上的第三方伺服器:先問伺服器「我在外面看起來是什麼位址、什麼埠」,再設法讓兩邊同時往對方送封包、在各自的 NAT 上開出對應的紀錄;還是不行時,就由伺服器在中間轉送全部的資料,速度較慢、也增加伺服器的負擔。

2. 記錄的來源 IP 失真。 伺服器的紀錄只看得到 NAT 外側的位址,背後可能是一個家庭、一整棟宿舍。 很多電信業者連公有位址也不夠分給每個用戶,就在自己的網路裡再做一層 NAT,讓成千上萬個用戶共用少數公有位址(常稱為電信級 NAT,CGNAT;RFC 6598 為此保留了 100.64.0.0/10 這段位址)。這時:

  • 只靠 IP 封鎖濫用者,會連帶擋掉同一個位址後面的其他人
  • 要追查某次連線是誰,需要來源 IP、來源埠與精確時間,再請業者對照轉換紀錄;所以伺服器記錄連線時,應該連同來源埠與時間一起記

3. 有些協定會在資料內容裡寫自己的 IP 位址(例如某些檔案傳輸、語音通話的控制訊息),NAT 只改標頭、沒改內容,對方照著內容回連就會失敗,需要路由器額外處理。

NAT 不是防火牆。 外面連不進來是轉換表的副作用,不是一套完整的安全機制:內部電腦主動連出去的流量一律放行,也不檢查內容。 要控制哪些流量能進出,應該用防火牆的規則(第 23 課)。

這些問題的根本原因是位址不夠。IPv6 的位址多到每台設備都能有自己的公有位址,不需要靠 NAT 共用,這就是下一課的主題。

小測驗:埠轉送與 NAT 的問題

1.

家用路由器沒有設定任何埠轉送。外面的人連到路由器的公有位址 198.51.100.2 的 80 埠,結果會是?

2.

路由器設了「外部埠 2222 → 192.168.1.30:22」。從外面連 198.51.100.2:2222,封包進到 192.168.1.30 時的目的位址與埠是?

3.

網站發現某個 IP 位址在短時間內大量送出惡意請求,就把整個 IP 封鎖。在電信級 NAT 普遍的情況下,可能的副作用是?

4.

關於 NAT,下列哪一句是正確的?

第 1 次作答

重點整理

  • IPv4 只有約 43 億個位址;私有位址(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)可以在各自的內部網路重複使用,但不會在網際網路上被路由。
  • NAT 在出口把私有位址換成公有位址;PAT 連同埠號一起換,讓很多台共用一個公有位址;轉換表記住對應,回覆才找得到人。
  • 外部主動發起的連線查不到轉換表,所以進不來;要開放內部服務,用埠轉送加一筆固定對應。
  • NAT 的問題:點對點連線困難、伺服器記錄的來源 IP 代表很多人(追查要加上來源埠與時間)、內容裡寫了 IP 的協定會出錯;NAT 也不能取代防火牆。

下一課講 IPv6:128 位元的位址怎麼寫、怎麼自動設定,以及它和 IPv4 怎麼共存。

這一課完成了!
Next lesson:IPv6
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。