快轉到主要內容

Linux設定通訊埠轉發方法 (port forwarding),以Ubuntu為例

Linux系統 Self-hosting自架 Port Forwarding DNS Torrent
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

如果想要外部網路存取家中的電腦上的伺服器服務,其中一個方法就是通訊埠轉發 (port forwarding) 了。

port forwarding也有人翻譯為「端口映射」,有些機器則會把port forwarding稱作虛擬伺服器 (virtual server)。

通訊埠轉發可以讓外部連線到到躲在NAT背後的機器,比如Minecraft伺服器連線、存取NAS資源、P2P分享檔案等等。

舉個更具體的例子吧:我想要從外面的網路,連線到 Linux版qBittorrent的網頁界面,在家裡的時候我使用區域IPhttp://192.168.0.250:8080就可以連線。但外部網路怎麼辦呢?我希望可以打http://140.112.91.11:8080的公共IP連線到qBittorrent,此時就得設定通訊埠轉發了!

1. 環境
#

  • 測試過的作業系統:Ubuntu 22.04、Arch Linux 6.5.0

  • 數據機:Zyxel P880(中華電信的數據機)

  • 網路架構:本文假定Linux電腦透過網路線直接跟數據機(小烏龜,modem)連線的情況,中間沒有經過任何路由器。此時數據機作為NAT的角色。

2. Linux電腦端的設定
#

  1. 假設我要開放的伺服器服務,使用的通訊埠為8080/tcp,防火牆要允許8080通過:
sudo ufw allow 8080/tcp
sudo ufw reload
  1. 用nmtui讓 Linux以固定IP連線到網際網路

  2. 使用ip addr指令取得Linux電腦的區域IP,應該是192.168.開頭,例如下面是192.168.1.101

# 範例輸出

2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 192.168.1.101/24 brd 192.168.1.255 scope global dynamic noprefixroute enp2s0
  1. 要取得Linux電腦的公共IP,可以使用curl工具連線到ifconfig.io網站確認,例如下面是140.112.91.11
curl ifconfig.io

# 範例輸出
140.112.91.11

3. 數據機端的設定
#

  1. 開啟Linux電腦的瀏覽器,登入數據機後台。每台的數據機IP不同,Zyxel P880的IP是為http://192.168.1.1

  2. P880的帳密自行google,務必用admin管理員帳號登入後台

  3. 在左邊的選單勾選Expert ModeAdvanced SetupNAT裡面就會出現Virtual Servers,功能等同port forwarding。按下Add。

  4. 勾選Custom Service

如下填寫:

Server IP Address填Linux電腦的IP。

External Port StartExternal Port End填寫要轉發的通訊埠,這邊的例子我們都填寫8080,這樣外部連線到數據機8080通訊埠的時候,便會導向Linux電腦的8080通訊埠。

Protocol改成TCP/UDP。

  1. 最後按下Apply/Save

  2. 嘗試用另外一台裝置,輸入Linux電腦的公共IP,連線到Linux電腦吧。

  3. 需要注意家用網路的公共IP通常是浮動的,每過一段時間就會變化。如果你沒有買網域,最好搭配動態DNS的方案固定連線網址,比如 No-IP公司的方案

相關文章

Linux系統如何以Docker架設Minecraft基岩版伺服器 (Bedrock Dedicated Server)
Linux系統 Self-hosting自架 Minecraft Bedrock Docker
LunaSea,手機控制Sonarr/Radarr下載BT種子任務的APP
Linux系統 Self-hosting自架 Torrent
Sonarr使用教學:免費下載電視劇/電影/動漫,自架BT種子管理服務
Linux系統 Self-hosting自架 Torrent Anime

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。