6.6. 使用 nftables 配置端口转发
端口转发可让管理员将发送到特定目的端口的数据包转发到不同的本地或者远程端口。
例如,如果您的 web 服务器没有公共 IP 地址,您可以在防火墙上设置一条端口转发规则,将防火墙上端口
80
和
443
上的传入数据包转发到 web 服务器。使用这个防火墙规则,互联网中的用户可以使用防火墙的 IP 或主机名访问网页服务器。
6.6.1. 将传入的数据包转发到不同的本地端口
这部分描述了如何将端口
8022
上的传入 IPv4 数据包转发到本地系统的端口
22
。
过程 6.17. 将传入的数据包转发到不同的本地端口
-
使用 ip 地址系列创建一个名为
nat
的表:# nft add table ip nat
-
向表中添加
prerouting
和postrouting
链:# nft -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; }
注意将--
选项传给 nft 命令,以避免 shell 将负优先级值解析为 nft 命令的选项。 向prerouting
链中添加一条规则,将端口8022
上的传入数据包重定向到本地端口22
:# nft add rule ip nat prerouting tcp dport 8022 redirect to :22
6.6.2. 将特定本地端口上传入的数据包转发到不同主机
您可以使用目标网络地址转换(
DNAT
)规则将本地端口上传入的数据包转发到远程主机。这可让互联网中的用户访问使用专用 IP 地址在主机上运行的服务。
这个流程描述了如何将本地端口
443
上的传入 IPv4 数据包转发到 IP 地址为
192.0.2.1
的远程系统上的同一端口。
您以
root
用户身份登录应该转发数据包的系统上。
过程 6.18. 将特定本地端口上传入的数据包转发到不同主机
-
使用 ip 地址系列创建一个名为
nat
的表:# nft add table ip nat
-
向表中添加
prerouting
和postrouting
链:# nft -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }
注意将--
选项传给 nft 命令,以避免 shell 将负优先级值解析为 nft 命令的选项。 向prerouting
链添加一条规则,该规则将端口443
上的传入数据包重定向到192.0.2.1
上的同一端口:# nft add rule ip nat prerouting tcp dport 443 dnat to 192.0.2.1
-