Linux中國

埠轉發簡介

埠轉發就是把網路流量從一個網路監聽者(稱為一個「埠」)發送到另一個上,無論這兩個埠是否屬於同一台電腦。在這裡,埠不是某個物理實體,而是一個監聽網路活動的軟體程序。

當流量被定向發往到某個特定的埠,它會先到達一個路由器或是防火牆,亦或是其他的網路程序。它最終收到的響應可能會根據它想要通訊的埠來定義。比如,當你使用埠轉發時,你可以捕獲到發往 8080 埠的流量,然後把它轉發到 80 埠。對於接收信號的原埠來說,這個新的目標埠可能和它在同一台設備上,也可能是在另一台設備上。我們在很多情況下都會用到埠轉發,實現的方式也有很多。本文將介紹其中最常見的幾種使用場景。

使用路由器來進行埠轉發

如果你在把伺服器架設在家裡,那麼你通常是不需要轉發埠的。你的家庭路由器(通常是你從 網路服務提供商 Internet Service Provider (ISP)獲得的 WiFi 設備)有一個內置的防火牆,它的作用是阻止外面的世界訪問到你的家庭網路。通過使用埠轉發,你可以允許某個指定埠的流量穿過路由器的防火牆,並發送到區域網中的某個指定的 IP 地址。

比如說,你架設了一個 Minetest 服務,並想要邀請你的朋友們來試試。為了讓他們能夠「穿過」你的路由器,從而到達這個 Minetest 服務,你必須把路由器上的某個埠轉發到託管 Minetest 服務的電腦上。Minetest 服務默認運行在 30000 埠。你可以把路由器的 30000 埠轉發到你的電腦的 30000 埠上,或者你也可以隨便轉發到一個更簡單的埠上,這樣玩家們會更容易記住它。我發現,當使用 30000 埠的時候,人們時常會少數幾個 0(特別是沒有逗號分隔符的幫助時),所以我一般使用路由器的 1234 埠,然後把它轉發到我內部的 30000 埠。

每個製造商的路由器介面都不一樣,但是不管你用的是什麼牌子的路由器,方法都是相同的。首先,你需要登錄到你的路由器。

通常,路由器的 IP 地址和登錄信息都會列印在路由器上,或者在是它的文檔里。我有一個型號為 TP-Link GX90 的路由器,我在瀏覽器里訪問 10.0.1.1 就可以登錄它,但你的路由器可能是 192.168.0.1 或者其他的地址。

我的 GX90 路由器把埠轉發功能稱為「 虛擬伺服器 virtual servers 」,它是路由器的「NAT 轉發」標籤下的一個功能選項。NAT 的意思是 「 網路地址轉換 Network Address Translation 」。在其他路由器中,這個功能可能直接就叫做「埠轉發」,或者叫「防火牆」、「服務」等。找到正確的功能選項可能需要花費一些時間,因此,你可能需要花點時間研究下你的路由器文檔。

當你找到了路由器的埠轉發設置,添加一個新規則,命名一個外部埠(在我的例子中是 1234)和一個內部埠(30000)。把外部埠轉發到內部埠上,而內部埠綁定在你想要大家訪問的電腦的 IP 地址上。如果你需要一些查詢本機 IP 地址的幫助,你可以閱讀 Archit Modi 寫的 《在 Linux 上如何查詢本地 IP 地址》。

![A sample port forwarding rule](/data/attachment/album/202203/31/085036qblrwb0ksr61cm0r.jpg "A sample port forwarding rule")

一個簡單埠轉發規則

(圖片提供者是 Seth Kenlon,遵循 署名-相同方式共享 4.0 國際 協議)

在這個例子中,訪問家庭網路的 1234 埠的流量,都會被轉發到了我的家庭伺服器的 30000 埠上,後者的 IP 地址是 10.0.1.2。

在繼續之前,先保存這個規則。

接下來,你需要知道你的家庭網路的公網 IP 地址是多少。你可以從 ifconfig.me 或者 icanhazip.com 上獲得這個地址。你可以在瀏覽器中打開這兩個網站的其中一個,也可以使用 curl 命令來獲取到這個 IP。

$ curl ifconfig.me
93.184.216.34

現在,你的朋友們就可以在 Minetest 客戶端里輸入 169.169.23.49:1234,加入你的 Minetest 伺服器啦。

使用防火牆來進行埠轉發

系統管理員有時候需要轉發訪問伺服器的流量。比如說,你可能想要接收來自 80 埠的流量,但是用戶的服務卻運行在 8065 埠。如果不進行埠轉發的話,你的用戶就不得不在輸入瀏覽器的 URL 末尾,加上一個指定的埠號,例如 example.com:8065。大多數用戶都不習慣於考慮埠的問題,所以你需要把訪問網路通用的 80 埠的請求攔截下來,然後轉發到你的網路應用的具體埠,這會給用戶帶來巨大的方便。

你可以在伺服器上使用 firewall-cmd 來轉發流量,它是訪問 firewalld 後台進程的 前端 front-end 命令。

首先,設置好你想要轉發的埠和協議:

$ sudo firewall-cmd 
    --add-forward-port 
    port=80:proto=tcp:toport=8065

為使修改永久生效,你需要加上 --runtime-to-permanent 選項:

$ sudo firewall-cmd --runtime-to-permanent

網路轉發

在網路傳輸中,除了埠轉發外,還有其他種類的 轉發 forwarding 形式,例如 IP 轉發和代理等。當你熟悉了網路信息在路由時是怎麼被處理的之後,你可以試試不同的轉發形式(然後使用 tcpdump 或類似的工具)來看看哪一種最好、最符合你的需求。

via: https://opensource.com/article/21/9/what-port-forwarding

作者:Seth Kenlon 選題:lujun9972 譯者:lkxed 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國