快轉到主要內容

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

分類   Linux系統 Linux使用技巧
標籤   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 24.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公司的方案

4. 設定動態DNS服務
#

此為選擇性步驟,如果你的公共IP時常變動,那麼你可以跑一個動態DNS (Dynamic DNS) 服務,改用域名來連線到遠端主機。

例如將http://140.112.91.11:8080改成http://myservice.ddns.net:8080來連線。

有很多公司提供動態DNS服務,以No-IP的為例,在Linux跑他們的客戶端,他們就會給你一個免費域名,定期按照你的公共IP更新DNS,再也不用記落落長的IP。

參考 How to Install the Linux Dynamic Update Client on Ubuntu

相關文章

Linux設定固定IP & 修改DNS伺服器,加快上網速度
分類   Linux系統 Linux使用技巧
標籤   DNS Ubuntu Arch Linux
管理Linux系統家目錄泛濫成災的dotfile
分類   Linux系統 Linux使用技巧
標籤   Dotfile Flatpak
用Systemd-boot取代GRUB作為Linux的bootloader
分類   Linux系統 Linux使用技巧
標籤   Linux Systemd GRUB

留言板

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

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

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。