业务应用系统的web容器无法更改IP地址,例如临时SSH端口,但是不想修改SSH配置;例如某些服务web服务需要通过公共IP进行统一访问;例如外网访问内网资源等;例如快速调整web容器的端口而不需要更改服务的任何配置等。
流量转发命令语法为:
firewalld-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
systemctl status firewalld
systemctl enable firewalld
systemctl restart firewalld
systemctl status firewalld
firewall-cmd --state
firewall-cmd --list-all
配置系统配置文件开启 ipv4 端口转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
firewall-cmd --add-masquerade --zone=public --permanent
firewall-cmd --reload
将 server1 10.10.7.1:111 端口 转发 至 server2 10.10.7.2:222端口
操作命令如下:
# firewall-cmd --list-all
# firewall-cmd -add-forward-port=port=111:proto=tcp:toport=222:toaddr=10.10.7.2 --zone=public --permanent
# firewall-cmd --reload
# firewall-cmd --list-all
将server-1 10.10.7.1:8443端口 转发 至 server-1 10.10.7.1:443
操作命令如下:
# firewall-cmd --list-all
# firewall-cmd --add-forward-port=port=8443:proto=tcp:toport=443 --zone=public --permanent
# firewall-cmd --reload
# firewall-cmd --list-all
执行成功前,原来的浏览器地址是:https://10.10.7.1
执行成功后,新的浏览器地址是:https://10.10.7.1/accounts/login/ 和https://10.10.7.1:8433/accounts/login/
有些情况是需要加上URL后缀地址,才能访问,直接访问IP:PORT会显示禁止访问或者403等。
特殊情况说明
通过以上方法firewall-cmd配置本地端口转发,例如将server-1 10.10.7.1:8443 端口转发至 server-1 10.10.7.1:443 ,在其他机器使用浏览器或者使用curl或者wget是正常的。但是在本地服务器使用curl或者wget就是提示failed: Connection refused.
为了解决这个问题,因为firewall-cmd-not-allowing-loopback-redirect,故需要执行这个命令:
# firewall-cmd --permanent --direct --add-rule ipv4 nat OUTPUT 0 -p tcp -o lo --dport 8443 -j REDIRECT --to-ports 443
# firewall-cmd --reload
# firewall-cmd --list-all
这时候,我们看到规则没有很大变化,但是我们在本地机器执行curl或者wget已经正常显示了。
参考文章:1445918 – firewalld does not allow port forwarding on localhost
# firewall-cmd --list-all
移除 将本地端口8443 转发 本地端口80
# firewall-cmd --remove-forward-port=port=8443:proto=tcp:toport=443--zone=public --permanent
移除 将本地端口1111 转发10.10.7.2 的222端口
# firewall-cmd -remove-forward-port=port=111:proto=tcp:toport=222:toaddr=10.10.7.2 --zone=public --permanent
# firewall-cmd --reload
# firewall-cmd --list-all
firewall-cmd --list-all
firewall-cmd --remove-masquerade --zone=public --permanent
firewall-cmd --reload
firewall-cmd --list-all