实验环境:A、B、C三台虚拟机,A、B一个子网、B、C一个子网,AC之间通信通过B进行转发。
现象:A、C相互能够ping通,但是尝试建立TCP连接时却一直显示No route to host。
能够ping通,按理讲路由表应该没问题,但是还是先对几个虚拟机之间的路由表进行检查。
通过以下指令查看路由表:
ip route
查看之后确实都是正常的,B也开启了数据转发。
怀疑是防火墙的问题。
查看iptables规则
iptables -L
默认都接收并转发。
查看firewalld。
sudo firewall-cmd --list-all
都开启firewalld,并且未配置规则。
尝试直接从B与C建立TCP连接,发现被拒绝。
打开C对应的防火墙端口:
sudo firewall-cmd --permanent --add-port=10001/tcp
sudo firewall-cmd --reload
打开后B可以和C建立TCP连接了,但是A仍旧没法正常建立连接。
尝试关闭B的防火墙:
sudo systemctl stop firewalld
尝试连接,发现可以正常连接了,那么也就是说B也应该要对firewalld进行配置。
重新启动防火墙,并将两个端口加入信任区域,允许转发所有流量:
sudo systemctl start firewalld
sudo firewall-cmd --zone=trusted --change-interface=ens192 --permanent
sudo firewall-cmd --zone=trusted --change-interface=ens224 --permanent
sudo firewall-cmd --zone=trusted --add-masquerade --permanent
sudo firewall-cmd --reload
之后A、C就可以正常进行通信了。
标签:sudo,--,虚拟机,cmd,firewalld,TCP,firewall,route From: https://www.cnblogs.com/kakaa/p/18463841