我的一台電腦位於僅 IPv4 的 ISP 上,因此我使用 miredo 來獲得 IPv6 位址。現在我需要使用 IPv6 遠端存取這台電腦。 (我在這裡無法使用 IPv4,因為它位於 NAT I 之後,無法添加新的連接埠轉送。)問題是我無法新增 AAAA DNS 記錄,因為每次電腦執行時,IP 位址的某些部分都會隨機變更連接到網路。
所以我的問題是:有沒有辦法讓 Teredo 總是使用相同的 IP 位址?
答案1
Teredo IP 位址取決於以下幾個因素維基百科。
首先,取決於路由器的IPv4位址。如果這可能會改變,那麼你就有問題了。
其次,它取決於 Teredo 使用的來源端口,該端口可能會被 NAT 設備轉換和更改。如果您的 NAT 設備確實保留了內部應用程式使用的來源端口,那麼您可能能夠使其保持不變。如果您使用的是 Windows,Teredo 的「clientport」選項可能會很有用。請參閱這篇技術網文章。
簡短回答:你可能能夠使其在大多數時間都相同,但您的里程可能會相差很大。您可能無法獲得這種可靠性,因為 NAT 裝置可能會破壞您的來源連接埠。您也許可以透過在防火牆上設定連接埠轉送來阻止這種情況...但您已經不能這樣做...所以...
更好的選擇可能是設定一個動態 DNS 用戶端,假設您可以找到一個能夠發布 teredo 介面的 IPv6 位址的用戶端。
答案2
顯然,自從RFC 5991,IPv6 位址的某些部分始終是隨機的,以使其不可預測。
因此,對我來說最簡單的解決方案是使用支援 IPv6 的動態 DNS 服務,例如 dynv6.com。
答案3
是的,可以使用 Teredo 協定來做到這一點。但它需要在 Teredo 用戶端和 Teredo 伺服器上修改程式碼。
為了解釋為什麼在客戶端和伺服器都被修改後仍然可以被認為是相同的協議,我首先必須解釋通訊中涉及的其他元件是什麼。
特雷多基礎知識
使用 Teredo 協定進行通訊的四個關鍵網路節點是:
- 特雷多客戶端
- Teredo 伺服器(由客戶端選擇)
- Teredo 中繼(由本機 IPv6 節點選擇)
- 本機 IPv6 節點
最終是 Teredo 用戶端和本機 IPv6 節點想要交換 IPv6 封包。 Teredo 伺服器和 Teredo 中繼的存在是為了促進該流量。
Teredo 伺服器僅參與初始連線設定。一旦建立了 Teredo 用戶端和本機 IPv6 節點之間的連接,流量就會通過中繼,而 Teredo 伺服器不會看到任何流量。
由於客戶對 Teredo 繼電器的選擇沒有影響,因此任何需要更改繼電器的解決方案都行不通。幸運的是這不是必要的。發送大量流量的用戶端和中繼之間的連線仍將是完全標準的 Teredo 流量。
由於客戶端和中繼仍然使用標準 Teredo 進行通信,並且客戶端的前綴中仍然具有 IPv6 位址2001::/32
,因此這仍然符合 Teredo。
需要改變
Teredo 位址中的 12 位元由 Teredo 用戶端隨機選擇。客戶端需要進行修改以使其不是隨機的。
Teredo 位址中的 48 位元是 Teredo 伺服器看到的 Teredo 用戶端的 IPv4 位址和 UDP 連接埠號碼。
這裡非常重要的是,這 48 位元是伺服器看到的連接埠位址。由於 NAT,客戶端和中繼可能會認為 UDP 連接埠具有完全不同的位址。但客戶端和中繼看到的IPv4位址和連接埠號碼對最終的IPv6位址沒有影響。
通常,唯一涉及的 NAT 位於 Teredo 用戶端附近。但如果您想影響最終的 IPv6 位址,可以將 NAT 放置在與 Teredo 伺服器相同的電腦上。如果您願意,甚至可以將 NAT 直接建置到 Teredo 伺服器中。
是否有任何實現?
可能不會。
我之前已經實現過最多Teredo 伺服器執行此操作的程序。但用戶端只能選擇 IPv4 位址,而不能選擇 UDP 連接埠號碼。我需要 UDP 連接埠號碼來區分客戶端。
支援為特定使用者保持 IPv4 位址和 UDP 連接埠靜態的 Teredo 伺服器需要某種方式來識別使用者。協定中有一些欄位可以用於此目的。但我不知道有任何實作支援識別 Teredo 伺服器的 Teredo 用戶端。
此外,Teredo 還存在嚴重的可靠性問題。這個可靠性問題與 Teredo 協議的部分有關,我在這裡描述的任何修改都沒有觸及該部分。
特雷多的問題
問題在於本地 IPv6 節點如何選擇使用哪個 Teredo 中繼。理想情況下,本機 IPv6 節點所在網路的管理員將為該網路設定 Teredo 中繼(如果 NAT 用於 IPv4,則將其定位在 NAT 之外)。
但許多管理員選擇不部署 Teredo 中繼。通常推理認為,既然 Teredo 如此不可靠,他們就不需要支持它(從未意識到這種推理使 Teredo 不可靠成為一種自我實現的預言)。
相反,來自本機IPv6 節點的流量將透過預設路由傳送至上游供應商,而上游提供者又可將其傳送至其上游供應商,最終流量可能會到達AS 上的公用第三方中繼,該AS上有公共第三方中繼2001::/32
。
使用第三方中繼意味著更長的網路路徑,這反過來又意味著增加的延遲。這也意味著沒有 SLA,並且 Teredo 中繼可能沒有足夠的容量來發送給它的流量。
在大多數需要靜態 IP 位址的情況下,還需要一定的可靠性。由於您很少能夠控制要與之通訊的所有遠端節點,因此您也無法控制將使用哪些 Teredo 中繼。
這使得具有靜態 IP 位址的 Teredo 成為少數願意安裝修改後的 Teredo 用戶端以獲得靜態 IP 位址但不保證可靠性的人的利基產品。
答案4
隧道可能會更好6in4
。這使用協定 41 不需要額外的 NAT 規則。有經紀人提供免費隧道。只要您是網路上唯一使用隧道代理 IP 的人,就不會有問題。
如果您的路由器的 IP 位址不是靜態的,則當 IP 位址變更時,您將需要進行額外的設定來重新設定網路。這與您需要使用 DDNS 執行的操作類似。
對您的連線設定防火牆,因為您將沒有 NAT 來保護您免受不需要的流量的影響。
對兩者的支援6in4
並且6to4
內建於 Linux 中。我最初使用 6to4,它可以工作,但不如我喜歡的那麼穩定。我6in4
已經有了穩定的連接。我一直使用它進行 NTP 連接,並透過 IPv6 獲得穩定的時間源。