Menu Close
Settings Close

Language and Page Formatting Options

2.4.4. 使用 nftables 配置目标 NAT

目标 NAT 可让您将路由器中的流量重新指向无法直接从互联网访问的主机。

以下流程描述了如何将发送到路由器上端口 80443 的流量重定向到 IP 地址为 192.0.2.1 的 web 服务器。

流程

  1. 创建一个表:

    # nft add table nat
  2. 向表中添加 preroutingpostrouting 链:

    # nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }
    # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
    重要

    即使您没有向 postrouting 链添加规则,nftables 框架也会要求此链与传出数据包回复相匹配。

    请注意,您必须将 -- 选项传递给 nft 命令,以防止 shell 将负优先级值解释为 nft 命令的选项。

  3. prerouting 链中添加一条规则,该规则将到路由器的 ens3 接口上端口 80443 的传入流量重定向到 IP 地址为 192.0.2.1 的 Web 服务器:

    # nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1
  4. 根据您的环境,添加 SNAT 或伪装规则,将从 Web 服务器返回的数据包的源地址改为发送者:

    1. 如果 ens3 接口使用动态 IP 地址,请添加一条伪装规则:

      # nft add rule nat postrouting oifname "ens3" masquerade
    2. 如果 ens3 接口使用静态 IP 地址,请添加一条 SNAT 规则。例如,如果 ens3 使用 198.51.100.1 IP 地址:

      # nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1
  5. 启用数据包转发:

    # echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf
    # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf

其他资源