虚拟机之间能够ping通,但是建立tcp连接时却显示Failed in connect to TCP server: No route to host

kakaa / 2024-10-14 / 原文

实验环境: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就可以正常进行通信了。