現實生活中,港口轉發就像在一個大型公寓大樓裏告訴送貨司機該去哪裏。通常情況下,該建築羣的正門是不對外開放的。但如果裏面有人想要快遞,他們可以告訴保安讓司機進來,並指引他們到特定的公寓。
類似地,在計算機網絡中,端口轉發允許外部的人訪問他們通常無法到達的專用網絡中的服務。當你想讓網絡外的人使用 web 服務器,在你的遊戲服務器上玩遊戲,或者訪問你設置的其他類型的服務時,這是很有用的。
Linux 操作系 使用一個名為 iptables 的工具來設置端口轉發。Iptables 是一個程序,可以讓你設置數據包如何通過你的計算機防火牆的規則,這有助於保持你的網絡安全。這些規則根據它們的作用被分成不同的組。
在本教程中,我們將向您展示如何在 Linux 系統上使用 iptables 設置端口轉發。
必備條件
- A Linux machine with root or sudo access.
- The iptables package should be installed.
Step 1: Install Iptables
首先,確保在 Linux 機器上安裝了 iptables 包。
Debian / Ubuntu
sudo apt update
sudo apt install iptables
- CentOS / Fedora / RHEL
sudo dnf install iptables
Step 2: Check Existing Rules
在開始修改 iptables 規則之前,最好先查看一下當前的規則。
sudo iptables -L -v -n
-L 列出規則,-v 顯示更詳細的信息,-n 以數字格式顯示 IP 地址和端口號。
Step 3: Enable IP Forwarding
為了允許在內核級別轉發,我們需要啓用 IP 轉發。
編輯 /etc/sysctl.conf 配置文件
sudo nano /etc/sysctl.conf
添加或取消註釋下面一行
net.ipv4.ip_forward=1
應用更改,執行如下命令,這將確保在啓動時啓用 IP 轉發。
sudo sysctl -p
Step 4: Configure the Forwarding Rule
要將流量從一個端口轉發到另一個端口,請使用以下命令
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
將 8080 替換為系統接收流量的端口號,將 192.168.1.100 替換為希望轉發流量的設備的 IP 地址,將 80 替換為目的設備的端口號。
Step 5: Masquerade the IP
最後,為了確保返回數據包的正確路由,您應該使用 MASQUERADE 目標,它將用傳出網絡接口的 IP 地址偽裝傳入數據包的 IP 地址。
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
Step 6: Save the Changes
永久保存這些規則,以便在重新啓動後保持它們。
在 Ubuntu / Debian 中,你可以使用iptables-persistent 包,使用以下命令安裝它。
sudo apt install iptables-persistent
在安裝過程中,它會詢問您是否要保存現有的 iptables 規則,IPv4 和 IPv6 規則均選擇“Yes”。
在 CentOS / Fedora / RHEL 系統中,可以直接保存。
sudo service iptables save
規則將保存到 /etc/sysconfig/iptables 配置文件中。
Step 7: Verify the Configuration
可以通過在其他設備上連接源端口來驗證端口轉發是否正常。您可以使用 nc、telnet 或 curl 之類的工具來驗證這一點。
記住檢查是否有任何現有防火牆規則或安全組可能阻止對源或目標端口的訪問。
我的開源項目
- course-tencent-cloud(酷瓜雲課堂 - gitee倉庫)
- course-tencent-cloud(酷瓜雲課堂 - github倉庫)