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 地址和端口
流程
创建防火墙策略:
# firewall-cmd --permanent --new-policy ExamplePolicy
与区域不同,策略也允许数据包过滤输入、输出和转发流量。这很重要,因为将流量转发到本地的 web 服务器、容器或虚拟机上的端点需要此类功能。
为入站和出站流量配置符号链接区域,以便路由器本身连接到其本地 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
选项是指目标为任何区域的流量。添加将流量转发到 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 地址。重新载入防火墙配置文件:
# firewall-cmd --reload success
在内核中激活 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
验证
连接到您转发到 web 服务器的路由器 IP 地址和端口:
# curl https://192.0.2.1:443
可选:验证
net.ipv4.conf.all.route_localnet
是否活跃:# sysctl net.ipv4.conf.all.route_localnet net.ipv4.conf.all.route_localnet = 1
验证
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"
其他资源
-
firewall-cmd (1)
,firewalld.policies (5)
,firewalld.richlanguage (5)
,sysctl (8)
, 和sysctl.conf (5)
man page - 使用 /etc/sysctl.d/ 中的配置文件调整内核参数