端口轉發簡介(如何對路由器進行端口轉發)
本文介紹了幾種端口轉發最常見的使用場景。
端口轉發就是把網絡流量從一個網絡監聽者(稱為一個“端口”)發送到另一個上,無論這兩個端口是否屬于同一臺電腦。在這里,端口不是某個物理實體,而是一個監聽網絡活動的軟件程序。
當流量被定向發往到某個特定的端口,它會先到達一個路由器或是防火墻,亦或是其他的網絡程序。它最終收到的響應可能會根據它想要通訊的端口來定義。比如,當你使用端口轉發時,你可以捕獲到發往 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 地址》。
一個簡單端口轉發規則
(圖片提供者是 Seth Kenlon,遵循 署名-相同方式共享 4.0 國際協議)
在這個例子中,訪問家庭網絡的 1234 端口的流量,都會被轉發到了我的家庭服務器的 30000 端口上,后者的 IP 地址是 10.0.1.2。
在繼續之前,先保存這個規則。
你需要知道你的家庭網絡的公網 IP 地址是多少。你可以從 ifconfig.me或者icanhazip.com上獲得這個地址。你可以在瀏覽器中打開這兩個網站的其中一個,也可以使用curl命令來獲取到這個 IP。
$ curl ifconfig.me93.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