6.6. 使用 nftables 配置端口转发
端口转发可让管理员将发送到特定目的端口的数据包转发到不同的本地或者远程端口。
例如,如果您的 web 服务器没有公共 IP 地址,您可以在防火墙上设置一条端口转发规则,将防火墙上端口
80 和 443 上的传入数据包转发到 web 服务器。使用这个防火墙规则,互联网中的用户可以使用防火墙的 IP 或主机名访问网页服务器。
6.6.1. 将传入的数据包转发到不同的本地端口 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
这部分描述了如何将端口
8022 上的传入 IPv4 数据包转发到本地系统的端口 22 。
过程 6.17. 将传入的数据包转发到不同的本地端口
- 使用 ip 地址系列创建一个名为
nat的表:nft add table ip nat
# nft add table ip natCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 向表中添加
prerouting和postrouting链:nft -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; }# nft -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将--选项传给 nft 命令,以避免 shell 将负优先级值解析为 nft 命令的选项。 - 向
prerouting链中添加一条规则,将端口8022上的传入数据包重定向到本地端口22:nft add rule ip nat prerouting tcp dport 8022 redirect to :22
# nft add rule ip nat prerouting tcp dport 8022 redirect to :22Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6.2. 将特定本地端口上传入的数据包转发到不同主机 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
您可以使用目标网络地址转换(DNAT)规则将本地端口上传入的数据包转发到远程主机。这可让互联网中的用户访问使用专用 IP 地址在主机上运行的服务。
这个流程描述了如何将本地端口
443 上的传入 IPv4 数据包转发到 IP 地址为 192.0.2.1 的远程系统上的同一端口。
前提条件
- 您以
root用户身份登录应该转发数据包的系统上。
过程 6.18. 将特定本地端口上传入的数据包转发到不同主机
- 使用 ip 地址系列创建一个名为
nat的表:nft add table ip nat
# nft add table ip natCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 向表中添加
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 -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将--选项传给 nft 命令,以避免 shell 将负优先级值解析为 nft 命令的选项。 - 向
prerouting链添加一条规则,该规则将端口443上的传入数据包重定向到192.0.2.1上的同一端口:nft add rule ip nat prerouting tcp dport 443 dnat to 192.0.2.1
# nft add rule ip nat prerouting tcp dport 443 dnat to 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 向
postrouting链中添加一条规则来伪装出站流量:nft add rule ip nat postrouting ip daddr 192.0.2.1 masquerade
# nft add rule ip nat postrouting ip daddr 192.0.2.1 masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 启用数据包转发:
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow