直接连接的网络设备可以从 Windows 10 ping 通,但不能从 Debian 10 ping 通

直接连接的网络设备可以从 Windows 10 ping 通,但不能从 Debian 10 ping 通

我的设置如下:

  1. 我有一台双启动计算机。
  2. 我有一个直接连接到 PC 的网络设备(IP 地址 192.168.1.251)。
  3. 当 PC 启动 Windows 10 时,我可以 ping 该设备。
  4. 当 PC 使用 Debian 10 启动时,我无法 ping 通该设备。
$ ping 192.168.1.251
PING 192.168.1.251 (192.168.1.251) 56(84) bytes of data.
From 192.168.1.22 icmp_seq=1 Destination Host Unreachable
From 192.168.1.22 icmp_seq=2 Destination Host Unreachable
From 192.168.1.22 icmp_seq=3 Destination Host Unreachable
^C
--- 192.168.1.251 ping statistics ---
5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 80ms
pipe 4
  • 在 Windows 10 和 Debian 10 下,接口的配置方式相同,即它们都具有相同的静态 IP 地址(192.168.1.22)和相同的子网掩码(255.255.255.0)。

  • ARP 可以看到该设备(IP 地址为 192.168.1.251)也在那里。

$ sudo arp-scan 192.168.1.251
Interface: enp0s25, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9.5 with 1 hosts (https://github.com/royhills/arp-scan)

0 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.5: 1 hosts scanned in 2.538 seconds (0.39 hosts/sec). 0 responded

如果我连接和断开电缆,我可以看到,在我尝试 ping 设备的这个接口上,“链接已连接”确实变成了“是”和“否”。

$ sudo ethtool enp0s25
Settings for enp0s25:
  Supported ports: [ TP ]
  Supported link modes:   10baseT/Half 10baseT/Full 
                          100baseT/Half 100baseT/Full 
                          1000baseT/Full 
  Supported pause frame use: No
  Supports auto-negotiation: Yes
  Supported FEC modes: Not reported
  Advertised link modes:  10baseT/Half 10baseT/Full 
                          100baseT/Half 100baseT/Full 
                          1000baseT/Full 
  Advertised pause frame use: No
  Advertised auto-negotiation: Yes
  Advertised FEC modes: Not reported
  Speed: 1000Mb/s
  Duplex: Full
  Port: Twisted Pair
  PHYAD: 1
  Transceiver: internal
  Auto-negotiation: on
  MDI-X: on (auto)
  Supports Wake-on: pumbg
  Wake-on: g
  Current message level: 0x00000007 (7)
                 drv probe link
  Link detected: yes

问题:那么,为什么我无法从 Debian 10 ping 设备,但从 Windows 10 却可以轻松做到呢?我已经与此斗争了 3 到 4 个小时,测试了我能想到的所有可能的排列和组合。

ps 我甚至可以从运行在 Windows 10 主机上的 Linux VM 成功 ping 设备(只是说,以防万一添加任何信息)但不能从直接安装在裸机上的 Linux 成功 ping 设备。


更新/编辑:

根据评论的反馈,我做了以下测试:

  1. 首先,我从 Debian 10 运行 traceroute,同时仅连接到目标网络设备。(PC 和设备都与任何其他网络/PC 完全隔离。)
    $ traceroute -UL 192.168.1.251
    traceroute to 192.168.1.251 (192.168.1.251), 30 hops max, 60 byte packets
     1  192.168.1.252 (192.168.1.252)  3070.385 ms !H  3070.330 ms !H  3070.314 ms !H

最终成功了...。耗时约 3 秒(嗯!为什么?)。

  1. 然后我从 Debian 10 运行了路由命令,
    $ sudo route
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    link-local      0.0.0.0         255.255.0.0     U     1000   0        0 enp0s25
    172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
    192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s25
    192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
  1. 抱歉重复了一遍,但在 ping 设备时,出现了同样的错误:
$ ping -r 192.168.1.251
PING 192.168.1.251 (192.168.1.251) 56(84) bytes of data.
From 192.168.1.252 icmp_seq=1 Destination Host Unreachable
From 192.168.1.252 icmp_seq=2 Destination Host Unreachable
From 192.168.1.252 icmp_seq=3 Destination Host Unreachable
From 192.168.1.252 icmp_seq=4 Destination Host Unreachable
From 192.168.1.252 icmp_seq=5 Destination Host Unreachable
From 192.168.1.252 icmp_seq=6 Destination Host Unreachable
^C
--- 192.168.1.251 ping statistics ---
7 packets transmitted, 0 received, +6 errors, 100% packet loss, time 147ms
pipe 4

然后我继续将笔记本电脑重新启动到 Windows 10 并启动 Ubuntu 18.04 LTS 虚拟机。

  1. 首先,从 Windows 10 开始就可以 ping 设备。
# ping 192.168.1.251

Pinging 192.168.1.251 with 32 bytes of data:
Reply from 192.168.1.251: bytes=32 time<1ms TTL=255
Reply from 192.168.1.251: bytes=32 time<1ms TTL=255
Reply from 192.168.1.251: bytes=32 time<1ms TTL=255
Reply from 192.168.1.251: bytes=32 time<1ms TTL=255

Ping statistics for 192.168.1.251:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms
  1. 接下来从 Windows 10 主机上运行的 Ubuntu 虚拟机进行 ping 操作:
$ ping 192.168.1.251
PING 192.168.1.251 (192.168.1.251) 56(84) bytes of data.
64 bytes from 192.168.1.251: icmp_seq=1 ttl=255 time=0.459 ms
64 bytes from 192.168.1.251: icmp_seq=2 ttl=255 time=0.561 ms
64 bytes from 192.168.1.251: icmp_seq=3 ttl=255 time=0.385 ms
64 bytes from 192.168.1.251: icmp_seq=4 ttl=255 time=0.428 ms
^C
--- 192.168.1.251 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3066ms
rtt min/avg/max/mdev = 0.385/0.458/0.561/0.066 ms
  1. Traceroute 也成功了(并且响应很快):
$ traceroute -UL 192.168.1.251
traceroute to 192.168.1.251 (192.168.1.251), 30 hops max, 60 byte packets
 1  192.168.1.251 (192.168.1.251)  0.594 ms !P  0.527 ms !P  0.497 ms !P
  1. 最后是网关(虽然我认为这里设置什么网关没有区别,因为我直接连接到设备,没有其他中介)。
$ sudo route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.3.0        0.0.0.0         255.255.255.0   U     0      0        0 lxcbr0
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 virbr0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 enp0s9
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

最后一句话:我没有在笔记本电脑上安装的 Debian 10 上设置任何特殊的防火墙或 iptable 规则。这是标准/默认安装,当然还根据需要安装了其他用户包(但没有进行特殊的网络配置)。


编辑2: 因此,在最近的评论之后,我关注了禁用任何可能阻止 ping 的“防火墙”或 iptable 规则(实际上 ping 只是症状之一。PC 端有一个服务器也无法与网络设备通信,这是我最初的问题。)

这是我尝试过的,结果如下:

  1. 显然ufwnftables或未firewalld安装。我也没有host.deny文件。
$ sudo ufw status
sudo: ufw: command not found
$ sudo nftables
sudo: nftables: command not found
$ cat /etc/host.deny
cat: /etc/host.deny: No such file or directory
$ sudo systemctl disable firewalld
Failed to disable unit: Unit file firewalld.service does not exist.
$ sudo firewall-cmd --state
sudo: firewall-cmd: command not found
  1. 到目前为止一切顺利。然后iptables我们开始查看。有趣的是,找到了 iptable 的所有条目:
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:67

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

Chain DOCKER (1 references)
target     prot opt source               destination         

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere

我们看到了一些规则,一些是针对 Docker 的,一些是一般规则。我不知道这些规则和设置的作用是什么,但让我们删除它们并禁用所有控件(仅用于测试目的 - 看看是否有用)。为了实现这一点,我采取了以下步骤(直接复制自上面提到的一个链接):

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

这产生了一些美观的iptable配置,如下所示。

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
  • 不幸的是,兔子洞越来越深。即使所有规则都消失了。而且我没有配置其他规则/防火墙等(至少我知道没有),不幸的是,什么都没有改变。ping仍然失败,traceroute仍然需要大约 3000 多毫秒。

我开始怀疑network-managerdebian 10 上的服务在某种程度上是负责任的,因为这是笔记本电脑上 debian 10 的裸机安装与在 windows 10 上运行的 ubuntu 18.04 虚拟机之间唯一的区别,我从中 ping 设备没有任何问题。)

附加信息:我有另一台在 Windows 10 上运行 Debian 6 的虚拟机,甚至可以 ping 网络设备。

编辑3:

nmap 可以找到主机。

nmap -Pns 192.168.1.200/32
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-21 14:42 CET
Nmap scan report for 192.168.1.200
Host is up (0.062s latency).
All 1000 scanned ports on 192.168.1.200 are filtered

Nmap done: 1 IP address (1 host up) scanned in 5.90 seconds

答案1

因此,在近一年没有跟进此事之后,我今天尝试了十几种不同的方法,并搜索了不同的 Linux 发行版论坛,终于找到了金矿这里

完成以下操作后,我可以成功 ping 通(我希望它能保持这种状态,但目前一切看起来不错)。

这里,我试过这个。

sudo lshw -C network

它向我展示了该以太网端口的硬件。

*-network                 
       description: Ethernet interface
       product: Ethernet Connection I217-LM
       vendor: Intel Corporation
       physical id: 19
       bus info: pci@0000:00:19.0
       logical name: enp0s25
       version: 04
       serial: 70:5a:df:b9:a7:47
       size: 100Mbit/s
       capacity: 1Gbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=0.13-4 ip=192.168.1.34 latency=0 link=yes multicast=yes port=twisted pair speed=100Mbit/s
       resources: irq:31 memory:d2100000-d211ffff memory:d213a000-d213afff ioport:6040(size=32)

我从英特尔

cp e1000e-3.0.4.tar.gz /usr/local/src/
cd /usr/local/src/
tar xzvf e1000e-3.0.4.tar.gz
rmmod e1000e
apt-get install linux-headers-amd64
cd e1000e-3.0.4/src/
make install

重启后,砰!ping 声响起,一切正常!有时,为了让事情正常运转,你必须自己动手。

让我走上这条路的想法是,我可以通过另一个以太网端口 (实际上这不是一个真正的以太网端口。它是一个 USB 加密狗,但这不是重点。) 执行 ping 操作并执行几乎所有操作,但在以太网端口本身上,什么都行不通 (除了 traceroute 和 nmap 以某种方式通过了,我不知道是怎么回事)。

可能是 3~4 年前,当我在这台笔记本电脑上安装 Debian 时(Windows 10 旁边),BIOS 中可能启用了“快速启动”,也许以太网驱动程序没有安装或类似问题。也许吧!

几周后的反馈/更新:

经过几周的观察,我发现这个功能不知为何只能间歇性地工作。它能用,但后来就停止工作了。然后今天它又开始工作了。真正的问题可能出在别的地方。今天我做了一件不同的事情,就是从网络管理器关闭了“自动连接”。也许这有区别?

相关内容