0 背景

业务应用系统的web容器无法更改IP地址,例如临时SSH端口,但是不想修改SSH配置;例如某些服务web服务需要通过公共IP进行统一访问;例如外网访问内网资源等;例如快速调整web容器的端口而不需要更改服务的任何配置等。

流量转发命令语法为:

firewalld-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

1.开启防火墙

  • 初始化防火墙

systemctl status firewalld

systemctl enable firewalld

systemctl restart firewalld

systemctl status firewalld

  • 查看防火墙配置端口转发之前的状态

firewall-cmd --state

firewall-cmd --list-all

  • ipv4 端口转发

配置系统配置文件开启 ipv4 端口转发

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

sysctl -p

  • 开启 IP 伪装

firewall-cmd --add-masquerade --zone=public --permanent

firewall-cmd --reload

2.内网服务器端口转发

将 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

3. 本地服务器内部端口转发

将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

4. 删除端口转发

# 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

5. 删除 IP 伪装

firewall-cmd --list-all

firewall-cmd --remove-masquerade --zone=public --permanent

firewall-cmd --reload

firewall-cmd --list-all

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐