什麼是 GRE 隧道?| GRE 通訊協定如何運作

一般路由封裝 (GRE) 是一種通訊協定,用於將封包包裝在二級資料封包中,以建立直接的點對點網路連線。

學習目標

閱讀本文後,您將能夠:

  • 瞭解什麼是 GRE
  • 瞭解通道如何運作
  • 瞭解 GRE 如何影響網路程序

相關內容


想要繼續瞭解嗎?

訂閱 TheNET,這是 Cloudflare 每月對網際網路上最流行見解的總結!

請參閱 Cloudflare 的隱私權政策,了解我們如何收集和處理您的個人資料。

複製文章連結

什麼是 GRE?

一般路由封裝 (GRE) 是一種通訊協定,用於將使用一個路由通訊協定的資料封包封裝在另一通訊協定的資料封包中。「封裝」是指將一個資料封包包裝在另一個資料封包中,就像將一個盒子放在另一個盒子中一樣。GRE 是在網路上建立直接點對點連線的一種方法,目的是簡化單獨網路之間的連線。它適用於各種網路層通訊協定。

封裝式封包:不支援的封包在網路資源的封包內

GRE 允許使用網路通常不支援的通訊協定,因為封包被包裝在其他使用受支援通訊協定的封包中。要瞭解其運作方式,請想像一下汽車和渡輪之間的區別。汽車在陸地上行駛,而渡輪在水上行駛。汽車通常不能在水上行駛,但是可以將汽車裝載到渡輪上。

在這個類比當中,地形類型好比是支援某些路由通訊協定的網路,而車輛則好比是封包。GRE 是一種方法,用於將一種類型的封包裝載到另一種類型的封包中,以便第一個封包可以穿越它通常無法穿越的網路,就像一種類型的運輸工具(汽車)被裝載到到另一種類型的運輸工具(渡輪)上,以便穿越原本無法行駛的地形。

例如,假設公司需要在其兩個不同辦公室中的區域網路 (LAN) 之間設定連線。兩個區域網路都使用最新版本的網際網路通訊協定 IPv6。但是,為了從一個辦公室網路到另一個辦公室網路,流量必須通過由第三方管理的網路——這個網路有些過時,只支援舊的 IPv4 通訊協定。

有了 GRE,公司可以將 IPv6 封包封裝在 IPv4 封包內,藉此透過此網路傳送流量。用上面的類比來表示的話,IPv6 封包是汽車,IPv4 封包是渡輪,第三方網路是水。

GRE 通道是什麼意思?

將封包封裝在其他封包中稱為「通道」。GRE 通道通常設定在兩個路由器之間,每個路由器的作用好比通道的一端。路由器設定為彼此直接傳送和接收 GRE 封包。兩個路由器之間的任何路由器都不會開啟封裝的封包;它們僅參照封裝封包外層的標頭對其進行轉寄。

為了理解為什麼將其稱為「通道」,我們可以對類比稍作變更。如果汽車需要從山一側的 A 點繞到另一側的 B 點,則最有效的方法就是直接穿過大山。但是,普通汽車無法直接穿過堅硬的岩石。因此,汽車必須一直繞著山脈行駛,才能從 A 點到達 B 點。

但不妨想像一下有條通道穿過了山體。現在,汽車可以從 A 點直行到 B 點,這要快得多,而且沒有通道就無法做到。

現在,把 A 點視作一台聯網裝置,把 B 點視作另一台聯網裝置,再把大山視作兩台裝置之間的網路,將汽車視作需要從 A 點行到 B點的資料封包。想像一下,這個網路不支援 A 點和 B 點裝置需要交換的那種資料封包類型。就像汽車試圖穿越大山一樣,資料封包無法直接通過,可能需要透過其他網路行走更長的路。

但 GRE 建立了穿過「大山」網路的一個虛擬「通道」,以允許資料封包通過。就像通道為汽車提供了一種直接穿過陸地的方式一樣,GRE(以及其他通道通訊協定)也為封包穿過不支援它們的網路提供了一種方式。

GRE 標頭中有什麼內容?

透過網路傳送的所有資料都會分解成稱為封包的較小片段,而且所有封包都有兩個部分:裝載和標頭。裝載是封包的實際內容,即被傳送的資料。標頭包含有關封包來源及其所屬封包群組的資料。每個網路通訊協定都附加一個標頭到每個封包。

GRE 為每個封包新增兩個標頭:4 個位元組長的 GRE 標頭和 20 個位元組長的 IP 標頭。GRE 標頭會表明封裝的封包使用的通訊協定類型。IP 標頭封裝原始封包的標頭和裝載。這意味著 GRE 封包通常具有兩個 IP 頭:一個用於原始封包,另一個由 GRE 通訊協定新增。只有 GRE 通道兩端的路由器將參照原始的非 GRE IP 標頭。

GRE 的使用對 MTU 和 MSS 要求有何影響?

MTUMSS 是限制透過網路傳輸的大型資料封包的測量值,就像對過橋車輛限重一樣。MTU 測量封包的總大小,包括標頭;MSS 僅測量裝載。超過 MTU 的封包會被分割或分解成較小的部分,以便它們能透過網路傳輸。

像任何通訊協定一樣, 使用 GRE 會向資料封包大小增加幾個位元組。這必須考慮到封包的 MSS 和 MTU 設定中。如果 MTU 是 1,500 個位元組,而 MSS 是 1,460 個位元組(用來說明必要的 IP 和 TCP 標頭的大小),則增加 GRE 24 位元組標頭會導致封包超過 MTU:

1,460 個位元組 [裝載] + 20 個位元組 [TCP 標頭] + 20 個位元組 [IP 標頭] + 24 個位元組 [GRE 標頭 + IP 標頭] = 1,524 個位元組

因此,封包將被分散。分散會減慢封包傳遞,並增加使用的運算能力,因為超出 MTU 的封包必須分解然後重新組合。

這可以透過減少 MSS 以容納 GRE 標頭來避免這種情況。如果將 MSS 設為 1,436 而不是 1,460,則 GRE 標頭的問題就得到瞭解決,且封包不會超過 MTU 值 1,500:

1,436 個位元組 [有效載荷] + 20 個位元組 [TCP 標頭] + 20 個位元組 [IP 標頭] + 24 個位元組 [GRE 標頭 + IP 標頭] = 1,500 個位元組

儘管避免了分散,但結果卻是裝載變小,這意味著需要額外的封包來傳遞資料。例如,如果目標是傳遞 150,000 位元組的內容(或大約 150 kB),假設 MTU 設定為 1,500,且未使用其他第 3 層通訊協定,那麼,比較一下使用 GRE 和不使用 GRE 時分別需要多少個封包:

  • 使用 GRE,MSS 1,460:103 個封包
  • 不使用 GRE,MSS 1,436: 105 個封包

額外的兩個封包會增加資料傳輸的延遲毫秒數。但是,使用 GRE 可能會允許這些封包採用比其他方式更快的網路路徑,這可以彌補損失的時間。

在 DDoS 攻擊中如何使用 GRE?

分散式拒絕服務 (DDoS) 攻擊中,攻擊者試圖用垃圾網路流量壓垮目標伺服器或網路,這有點像用虛假的送餐訂單轟炸餐廳,直到無法向合法客戶提供服務為止。

像任何網路通訊協定一樣,GRE 也可用於執行 DDoS 攻擊。記錄在案的最大 DDoS 攻擊之一發生在 2016 年 9 月。它是針對一個安全研究人員的網站,並使用 Mirai 殭屍網路進行。該網站被使用 GRE 通訊協定的封包所淹沒。

與某些其他通訊協定不同,GRE 封包的來源無法偽造或詐騙。(請參閱我們有關 SYN 洪水DNS 放大攻擊的文章,瞭解可以偽造來源的通訊協定範例。)要進行大規模的 GRE DDoS 攻擊,攻擊者必須控制殭屍網路中的大量真實運算裝置。

Cloudflare 如何防禦 GRE DDoS 攻擊?

Cloudflare 可防禦各種網路層 DDoS 攻擊,包括使用 GRE 的攻擊。Cloudflare Magic Transit 透過將 Cloudflare 全球網路的 DDoS 緩解功能擴展到網路基礎結構來保護內部部署、雲端混合網路。任何攻擊網路流量都會被篩選掉,而不會減慢合法流量。

Cloudflare 如何使用 GRE 通道?

為了讓 Magic Transit 保護和加速客戶的網路流量,Cloudflare 網路必須安全地連接到客戶的內部網路。為此,GRE 通道非常有用。透過 GRE 通道,Magic Transit 能透過公用網際網路安全地直接連接到 Cloudflare 客戶的網路。

Magic Transit 建立在 Cloudflare Anycast 網路上。這意味著任何 Cloudflare 伺服器都可以使用單個 IP 位址充當 GRE 通道的端點,從而消除 GRE 通道連線的單一故障點(Cloudflare 也使用這種方法連接 Magic WAN 客戶)。要詳細瞭解 Magic Transit 的運作原理,請參閱我們的 Magic Transit 產品頁面