记一次CentOS下的跨IP转发端口操作
背景
由于自己在家搭建了一套云服务集群,绑定域名后发现一个问题,小米路由器的DMZ和NAT功能不能同时开启,考虑开启DMZ之后,通过DMZ主机利用端口转发实现集群的外网访问。
方案
DMZ主机端口全部默认,由于集群有四个节点,另外三个节点的22端口分别用1122,1222,1322进行代替,这样今后即可通过域名+对应端口实现CRT SSH免密码访问。
在DMZ主机执行命令:
# 开启端口 firewall-cmd --zone=public --add-port=1122/tcp --permanent firewall-cmd --zone=public --add-port=1222/tcp --permanent firewall-cmd --zone=public --add-port=1322/tcp --permanent #转发端口 firewall-cmd --permanent --zone=public --add-forward-port=port=1122:proto=tcp:toaddr=192.168.1.61:toport=22 firewall-cmd --permanent --zone=public --add-forward-port=port=1222:proto=tcp:toaddr=192.168.1.62:toport=22 firewall-cmd --permanent --zone=public --add-forward-port=port=1322:proto=tcp:toaddr=192.168.1.63:toport=22 #立即生效 firewall-cmd --reload
问题
执行后发现,通过“telnet 域名 转发端口”不通,进入DMZ主机,“telnet 局域网IP 22”没有问题,“telnet 本机 转发端口”不通,通过命令“firewall-cmd --list-all”查询,所有转发设置都没问题,考虑到对应端口都正常,应该是转发受到了屏蔽之类的操作
解决方案
综合百度各个文章,发现该问题受两部分配置影响,一个是CentOS内核默认禁止转发,另一个是防火墙默认禁止转发,需要同时开启两部分配置,端口转发方能生效,命令如下:
# 1、开启内核 IP 地址转发 # 查看net.ipv4.ip_forward值,1为允许转发,0为不允许,如果为0改为1 /etc/sysctl.conf # 使之立即生效 sysctl -p # 2、防火墙允许 IP 地址转发 # 执行 firewall-cmd --query-masquerade 查看状态,如果是 no,可执行下面的命令开启转发。 # 开启 IP 地址转发 firewall-cmd --add-masquerade --permanent # 重载防火墙规则,使之立即生效 firewall-cmd --reload # 保险起见,重启一下防火墙服务 systemctl restart firewalld
执行后,重新外网通过域名telnet测试成功。