快轉到主要內容

Linux設定通訊埠轉發 (port forwarding) 與No-IP動態DNS服務,以Ubuntu為例

· 民國114年乙巳年
·
切換繁體/簡體
分類   Linux系統 Self-hosting自架
標籤   Port Forwarding DNS Torrent
目錄

如果想要外網連內網,其中一個方法就是通訊埠轉發 (port forwarding) 了。

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

通訊埠轉發可以讓外部連線到到躲在NAT背後的機器,比如Minecraft伺服器連線、存取NAS資源、P2P分享檔案等等,有些人還會用No-IP的動態DNS服務架站!

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

另請參閱替代方案:開源的內網穿透軟體

1. 環境
#

需要系統:Ubuntu 24.04以上

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

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

2. Linux電腦端的設定
#

  1. 假設我要開放的伺服器服務,使用的通訊埠為8080/tcp,防火牆要允許8080連入:
sudo ufw allow 8080/tcp

sudo ufw reload
  1. 用NetworkManager讓Linux以固定IP連線到網際網路。這樣才不會被數據機重置區域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,務必用管理員帳號登入後台

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

  4. 勾選Custom ServiceServer IP Address填Linux電腦的IP。External Port StartExternal Port End填寫要轉發的通訊埠,這邊的例子我們都填寫8080,這樣外部連線到數據機8080通訊埠的時候,便會導向Linux電腦的8080通訊埠。Protocol改成TCP/UDP。

  5. 最後按下Apply/Save

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

4. 設定No-IP動態DNS服務
#

此為選擇性步驟。

如果你的公共IP時常變動,那麼你可以跑一個動態DNS (Dynamic DNS,簡稱DDNS) 服務,改用域名來連線到遠端主機。例如將http://140.112.91.11:8080改成http://myservice.ddns.net:8080來連線,再也不用記落落長的IP。

有很多公司提供動態DNS服務,以No-IP的為例,他們會給你一個免費域名。只要在Linux跑他們的閉源客戶端No-IP DUC,定期按照你的公共IP更新DNS即可。

  1. No-IP註冊一個帳號。點選Create Hostname,建立一個域名。例如這裡我用myownserverhost.ddns.net

  2. 參考官方說明,下載Ubuntu的No-IP DUC套件,安裝。

wget --content-disposition https://www.noip.com/download/linux/latest

tar xf noip-duc_*.tar.gz

cd noip-duc_*/binaries

sudo apt install ./noip-duc_*_amd64.deb
  1. 編輯No-IP DUC設定檔
sudo vim /etc/default/noip-duc
  1. 填入No-IP帳號密碼,還有要使用的域名
NOIP_USERNAME=帳號

NOIP_PASSWORD=密碼

NOIP_HOSTNAMES=剛剛建立的域名
  1. 設定開機自動啟動No-IP DUC服務:
sudo systemctl enable --now noip-duc
  1. 查看服務狀態,出現update successful就是成功連上了。
sudo systemctl status noip-duc
  1. 日後便能透過https://myownserverhost.ddns.net:8080網址存取服務了。

相關文章

Gluetun:讓Docker容器走VPN連線,沒網路就斷線,使用教學
分類   Linux系統 Self-hosting自架
標籤   Docker VPN Torrent
Docker架設Joplin同步伺服器 (Joplin Server) ,雲端同步筆記,筆記發表為公開網頁
分類   Linux系統 Self-hosting自架
標籤   Joplin Note-Taking Docker
利用VSCode網頁版遠端開發,Linux安裝code-server教學
分類   Linux系統 Self-hosting自架
標籤   Visual Studio Code Linux

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

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