Red Hat Training

A Red Hat training course is available for RHEL 8

7.9. 使用 DNAT 将 HTTPS 流量转发到不同主机

如果您的 web 服务器使用私有 IP 地址在 DMZ 中运行,您可以配置目标网络地址转换 (DNAT) 以使互联网上的客户端能够连接到此 web 服务器。在本例中,Web 服务器的主机名解析为路由器的公共 IP 地址。当客户端建立到路由器上定义的端口的连接时,路由器会将数据包转发到内部 Web 服务器。

前提条件

  • DNS 服务器将 Web 服务器的主机名解析为路由器的 IP 地址。
  • 您知道以下设置:

    • 您要转发的专用 IP 地址和端口号
    • 要使用的 IP 协议
    • 要重定向数据包的 web 服务器的目标 IP 地址和端口

流程

  1. 创建防火墙策略:

    # firewall-cmd --permanent --new-policy ExamplePolicy

    与区域不同,策略也允许数据包过滤输入、输出和转发流量。这很重要,因为将流量转发到本地的 web 服务器、容器或虚拟机上的端点需要此类功能。

  2. 为入站和出站流量配置符号链接区域,以便路由器本身连接到其本地 IP 地址并转发此流量:

    # firewall-cmd --permanent --policy=ExamplePolicy --add-ingress-zone=HOST
    # firewall-cmd --permanent --policy=ExamplePolicy --add-egress-zone=ANY

    --add-ingress-zone=HOST 选项是指在本地生成的数据包,这些数据包从本地主机中传输。--add-egress-zone=ANY 选项是指目标为任何区域的流量。

  3. 添加将流量转发到 Web 服务器的富规则:

    # firewall-cmd --permanent --policy=ExamplePolicy --add-rich-rule='rule family="ipv4" destination address="192.0.2.1" forward-port port="443" protocol="tcp" to-port="443" to-addr="192.51.100.20"'

    富规则将路由器 IP 地址 192.0.2.1 上的端口 443 上的 TCP 流量转发到 web 服务器 IP 192.51.100.20 的端口 443。规则使用 ExamplePolicy 来确保路由器也可以连接到其本地 IP 地址。

  4. 重新载入防火墙配置文件:

    # firewall-cmd --reload
    success
  5. 在内核中激活 127.0.0.0/8 的路由:

    # echo "net.ipv4.conf.all.route_localnet=1" > /etc/sysctl.d/90-enable-route-localnet.conf
    # sysctl -p /etc/sysctl.d/90-enable-route-localnet.conf

验证

  1. 连接到您转发到 web 服务器的路由器 IP 地址和端口:

    # curl https://192.0.2.1:443
  2. 可选:验证 net.ipv4.conf.all.route_localnet 是否活跃:

    # sysctl net.ipv4.conf.all.route_localnet
    net.ipv4.conf.all.route_localnet = 1
  3. 验证 ExamplePolicy 是否活跃并包含您需要的设置。特别是源 IP 地址和端口,要使用的协议以及目标 IP 地址和端口:

    # firewall-cmd --info-policy=ExamplePolicy
    ExamplePolicy (active)
      priority: -1
      target: CONTINUE
      ingress-zones: HOST
      egress-zones: ANY
      services:
      ports:
      protocols:
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:
    	rule family="ipv4" destination address="192.0.2.1" forward-port port="443" protocol="tcp" to-port="443" to-addr="192.51.100.20"

其他资源