[1036]kvm虚拟机访问时提示no route to host分析

kvm,虚拟机,访问,提示,no,route,to,host,分析 · 浏览次数 : 317

小编点评

**分析结果:** * 136.43上的虚拟机可以正常访问 136.56(Kylin V10)。 * 136.59 上的虚拟机可以正常访问 136.43,但不能访问其他服务器。 * 136.59 上的虚拟机上存在arp信息。 * 136.43 上没有arp信息。 * 136.59 上的虚拟机可以正常访问 136.56,说明 iptables 规则可能导致问题。 ** possible cause:** * **iptables 规则**: * 136.43 上的防火墙可能设置 `iptables -A INPUT -p icmp --dport 22 -j ACCEPT`,从而阻止了其他服务器的 `ssh` 连接。 * 136.59 上的防火墙可能设置 `iptables -A INPUT -p tcp --dport 22 -j ACCEPT`,从而阻止了其他服务器的 `ssh` 连接。 **解决方案:** 1. **检查 iptables 规则:** * 使用 `iptables -L INPUT -n` 命令检查防火墙规则,以确保 `ssh` 连接被允许。 * 使用 `iptables -L INPUT -n --line-number` 命令检查每个规则的详细信息。 2. **调整 iptables 规则:** * 如果 `iptables -A INPUT -p icmp --dport 22 -j ACCEPT` 被使用,则可以尝试以下两种方法: * 修改 `iptables -A INPUT -p icmp --dport 22 -j ACCEPT` 的规则,例如 `iptables -A INPUT -p icmp --dport 22 -j ACCEPT --dport 22 --source 10.110.136.59`。 * 使用 `iptables -A INPUT -p tcp --dport 22 -j ACCEPT` 的规则。 3. **重启防火墙服务:** * 使用 `sudo systemctl restart iptables` 命令重启防火墙服务。 4. **验证 SSH 连接:** * 重新启动 `ssh` 服务并尝试再次连接。 5. **确认 arp 信息:** * 使用 `arp -n` 命令检查 136.59 上和 136.43 上的 ARP 信息。 * 确保所有机器的 ARP 信息正确配置。

正文

环境

宿主机:

IP: 10.110.136.43
版本:Kylin Linux Advanced Server release V10 (Sword)

KVM vm:

IP: 10.110.136.59
版本:UnionTech OS Server 20

故障描述

kvm虚拟机136.59可以被其他服务器ping通,但是ssh时报错:“ssh: connect to host 10.110.136.59 port 22: No route to host”;仅宿主机136.43可以ssh。

分析

  • 分析时确定,136.43上的另外一台虚拟机136.56(Kylin V10)能正常访问。

  • 分析各个机器的arp,有机器上存在arp信息:

? (10.110.136.59) at 52:54:00:42:3a:97 [ether] on enp111s0f0
  • 从136.59对外SSH,相同报错
  • 检查各个forward,均开启
  • 检查防火墙,136.43防火墙开启

处理

  • 关闭宿主机136.43防火墙

  • 或者防火墙增加策略

    firewall-cmd --permanent --direct --passthrough ipv4 -I FORWARD -i br0 -j ACCEPT
    firewall-cmd --permanent --direct --passthrough ipv4 -I FORWARD -o br0 -j ACCEPT
    firewall-cmd --reload
    

进一步

为什么ping可以通呢?

防火墙默认的策略里ICMP协议是通过的

ACCEPT     icmp --  anywhere             anywhere

与[1036]kvm虚拟机访问时提示no route to host分析相似的内容: