Linux

這是什麼sit0 設備?

  • August 4, 2021

我正在為 Hurricane Electric 的 IPv6 隧道代理設置我的電腦(執行 Debian Buster)。它們提供了幾種配置方法的說明,但這裡是針對 iproute2 的,我一直在使用它進行測試:

ip tunnel add he-ipv6 mode sit remote 216.66.22.2 local <local-IP-addr> ttl 255
ip link set he-ipv6 up
ip addr add <IPv6-addr>/64 dev he-ipv6
ip route add ::/0 dev he-ipv6
ip -f inet6 addr

當我這樣做時,一個神秘的sit0界面也出現了。顯然,它與 6in4 隧道有關,但我找不到更多關於它的資訊,只是它有點特殊,並且在載入模組時就存在sit。出於好奇,我嘗試為隧道代理配置它,而不是創建一個新介面,但它似乎無法做到這一點。

這是什麼設備?

根據我在Red Hat 的這篇博文中找到的資訊,我想我理解其目的。(我不是 Linux 網路專家,所以如果任何知識淵博的人發現任何錯誤,請隨時在評論中糾正我或發布您自己的答案。)

首先,一些背景:

設備是一種sit虛擬網路設備,它接收您的 IPv6 流量,將其封裝/解封裝在 IPv4 數據包中,並通過 IPv4 Internet 將其發送/接收到另一台主機(例如您的 IPv6 隧道代理)。外部數據包有一個特殊的協議號:41。(這就像一個埠號,但在 IP 層而不是 TCP/UDP 層。)

  • 發送相當簡單:sit設備具有與之關聯的本地和遠端 IPv4 地址,這些地址成為外部 IPv4 標頭中的源地址和目標地址。(源地址也可以是“any”或 0.0.0.0,在這種情況下,Linux 會根據封裝數據包發送自的 IPv4 介面為您選擇一個源地址。)
  • 接收只是稍微複雜一點:當一個協議 41 數據包到達時,Linux 需要確定sit它屬於哪個設備。它通過查看數據包的外部 IPv4 源地址和目標地址來做到這一點。它將這些與每個sit設備的本地和遠端地址進行比較,匹配的就是獲取數據包並解封裝的設備。

如何sit0發揮作用:

您可能想知道當 Linux 接收到與任何sit設備都不匹配的協議 41 數據包時會發生什麼(例如,它來自某個隨機地址)。在這種情況下,它被傳遞到sit0.

sit0``sit是由核心模組設置的一個特殊的“備份”設備來處理這些數據包。sit它的本地和遠端地址設置為 0.0.0.0(即“任何”),並且它不附加到任何特定的物理設備,因此它將接受任何其他設備尚未處理的協議 41 數據包。

這有用嗎?也許在特定情況下,但我想在絕大多數情況下,你會想要丟棄這樣的數據包。我不確定為什麼不應該由管理員決定是否應該創建這樣一個包羅萬象的設備。也許有一些歷史原因。

引用自:https://unix.stackexchange.com/questions/643890