Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

6.6. 使用 nftables 配置端口转发

端口转发可让管理员将发送到特定目的端口的数据包转发到不同的本地或者远程端口。
例如,如果您的 web 服务器没有公共 IP 地址,您可以在防火墙上设置一条端口转发规则,将防火墙上端口 80443 上的传入数据包转发到 web 服务器。使用这个防火墙规则,互联网中的用户可以使用防火墙的 IP 或主机名访问网页服务器。

6.6.1. 将传入的数据包转发到不同的本地端口

这部分描述了如何将端口 8022 上的传入 IPv4 数据包转发到本地系统的端口 22

过程 6.17. 将传入的数据包转发到不同的本地端口

  1. 使用 ip 地址系列创建一个名为 nat 的表:
    # nft add table ip nat
  2. 向表中添加 preroutingpostrouting 链:
    # nft -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; }
    注意
    -- 选项传给 nft 命令,以避免 shell 将负优先级值解析为 nft 命令的选项。
  3. 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. 将特定本地端口上传入的数据包转发到不同主机

  1. 使用 ip 地址系列创建一个名为 nat 的表:
    # nft add table ip nat
  2. 向表中添加 preroutingpostrouting 链:
    # 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 命令的选项。
  3. prerouting 链添加一条规则,该规则将端口 443 上的传入数据包重定向到 192.0.2.1 上的同一端口:
    # nft add rule ip nat prerouting tcp dport 443 dnat to 192.0.2.1
  4. postrouting 链中添加一条规则来伪装出站流量:
    # nft add rule ip nat postrouting ip daddr 192.0.2.1 masquerade
  5. 启用数据包转发:
    # echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf
    # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf