UFW端口转发
1. 启用 IP 转发
首先,确保您的系统允许 IP 转发:
sudo nano /etc/ufw/sysctl.conf
在打开的文件中,确保以下两行没有被注释掉(去掉 #
):
net/ipv4/ip_forward=1
net/ipv6/conf/all/forwarding=1
保存并退出 (Ctrl + X
-> Y
-> Enter
)。
编辑 /etc/default/ufw
# Set the default output policy to ACCEPT, DROP, or REJECT. Please note that if
# you change this you will most likely want to adjust your rules.
DEFAULT_OUTPUT_POLICY="ACCEPT"
# Set the default forward policy to ACCEPT, DROP or REJECT. Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="ACCEPT" // 找到这一行,大概在18行这里,将其改成 ACCEPT
# Set the default application policy to ACCEPT, DROP, REJECT or SKIP. Please
# note that setting this to ACCEPT may be a security risk. See 'man ufw' for
# details
DEFAULT_APPLICATION_POLICY="SKIP"
2. 编辑 before.rules
文件
接下来,编辑 UFW 的 before.rules
文件,以添加转发规则:
sudo nano /etc/ufw/before.rules
在文件的开头部分,找到 *filter
行。在此行之前添加以下内容:
示例 1: 转发特定端口到本机其他端口
将本地服务器的 端口 1000
的流量(TCP 和 UDP)转发到本地 8080
端口:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# 转发规则,将端口 1000 的流量转发到本地端口 8080
-A PREROUTING -p tcp --dport 1000 -j REDIRECT --to-port 8080
-A PREROUTING -p udp --dport 1000 -j REDIRECT --to-port 8080
COMMIT
示例 2: 转发特定端口到其他服务器的指定端口
将本地服务器的 端口 1000
的流量(TCP 和 UDP)转发到远程服务器 192.168.1.100
的 8080
端口:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# 转发规则,将端口 1000 的流量转发到远程服务器 192.168.1.100 的端口 8080
-A PREROUTING -p tcp --dport 1000 -j DNAT --to-destination 192.168.1.100:8080
-A PREROUTING -p udp --dport 1000 -j DNAT --to-destination 192.168.1.100:8080
# 使转发的流量能够正确返回
-A POSTROUTING -p tcp -d 192.168.1.100 --dport 8080 -j MASQUERADE
-A POSTROUTING -p udp -d 192.168.1.100 --dport 8080 -j MASQUERADE
COMMIT
示例 3: 转发端口范围到本机指定端口
将本地服务器端口范围 1000-2000
的流量(TCP 和 UDP)转发到本地 8080
端口:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# 转发规则,将端口范围 1000-2000 的流量转发到本地端口 8080
-A PREROUTING -p tcp --dport 1000:2000 -j REDIRECT --to-port 8080
-A PREROUTING -p udp --dport 1000:2000 -j REDIRECT --to-port 8080
COMMIT
示例 4: 转发端口范围到其他服务器的指定端口
将本地服务器端口范围 1000-2000
的流量(TCP 和 UDP)转发到远程服务器 192.168.1.100
的 8080
端口:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# 转发规则,将端口范围 1000-2000 的流量转发到远程服务器 192.168.1.100 的端口 8080
-A PREROUTING -p tcp --dport 1000:2000 -j DNAT --to-destination 192.168.1.100:8080
-A PREROUTING -p udp --dport 1000:2000 -j DNAT --to-destination 192.168.1.100:8080
# 使转发的流量能够正确返回
-A POSTROUTING -p tcp -d 192.168.1.100 --dport 8080 -j MASQUERADE
-A POSTROUTING -p udp -d 192.168.1.100 --dport 8080 -j MASQUERADE
COMMIT
注意:根据需求,您可以选择性地添加这些规则。
保存并退出 (Ctrl + X
-> Y
-> Enter
)。
3. 允许 UFW 通过相关端口或端口范围的流量
使用以下命令允许 UFW 通过端口或端口范围的流量:
# 允许特定端口
sudo ufw allow 1000/tcp
sudo ufw allow 1000/udp
# 允许端口范围
sudo ufw allow 1000:2000/tcp
sudo ufw allow 1000:2000/udp
4. 重新加载 UFW
为了使更改生效,重新加载 UFW:
sudo ufw disable
sudo ufw enable
5. 验证端口转发
使用 curl
或其他工具测试端口转发是否成功:
# 测试特定端口
curl http://localhost:1000
# 测试端口范围
curl http://localhost:1000
curl http://localhost:1500
curl http://localhost:2000