我似乎无法ping
从连接(PC1 到 PC2 直接通过 CAT5 工厂电缆连接)获得 IP 地址,但arping
效果很好。说明:IPv4 不起作用,尽管数据链路存在且起作用,我阅读了 ARP 的维基百科文章,我知道其中的区别。我也试过,但ping -I eth0 addr
没有成功。
步骤如下:通过以太网将 PC1 连接到 PC2;udhcpd
在 PC1 上启动;udhcpc
在 PC2 上启动;在 PC1 上确认 dhcp OFFER 和 ACK;在 PC2 上确认地址;在任一方向 ping(PC1:100% 数据包丢失,PC2:网络不可达)注意:手动设置 IP 会导致上述情况,没有 dhcp。
注意:udhcpd 设置。
# ip addr add 192.168.1.1/32|24 # tried both 24&32 for subnet
# /etc/udhcpd.conf
interface eth0
lease_file /var/lib/udhcpd/udhcpd.leases
start 192.168.1.2
end 192.168.1.255
# udhcpd -f -I 192.168.1.1
我不确定哪里出了问题,因为之前这个方法已经奏效了,似乎 udhcpc/d 没有分配路由,我目前正在研究这个问题。我还阅读了有关网络和 ad-hoc 的 Arch wiki,但由于我在 PC1 上使用 Artix,在 PC2 上使用 busybox/Linux,所以它只略微适用,我还阅读了没有 systemd 的文章和手册,我不记得引用过它们。
我之所以尝试,是想让 PC2 成为 NAS/IP-USB 扩展集线器/我想到的其他东西
# routel
Dst Gateway Prefsrc Protocol Scope Dev Table
default 192.168.114.214 192.168.114.220 dhcp usb0
127.0.0.0/8 127.0.0.1 lo
192.168.1.0/24 192.168.1.1 kernel link eth0
192.168.114.0/24 192.168.114.220 dhcp link usb0
127.0.0.0/8 127.0.0.1 kernel host lo local
127.0.0.1 127.0.0.1 kernel host lo local
127.255.255.255 127.0.0.1 kernel link lo local
192.168.1.1 192.168.1.1 kernel host eth0 local
192.168.1.255 192.168.1.1 kernel link eth0 local
192.168.114.220 192.168.114.220 kernel host usb0 local
192.168.114.255 192.168.114.220 kernel link usb0 local
在 PC1 上,而 PC2route
为空。
旧笔记:ip a
PC1 上显示预期的 192.168.1.1/24,但在 PC2 上却是 192.168.1.150/0;如果我没看错的话,子网是不同的:https://superuser.com/a/1724094/1719820
笔记:新程序。
启动后两个都机器进入 Minimal Linux Live(以前是 busybox/Linux)我尝试在 PC1 上只运行 dhcp 服务器,在 PC2 上只运行 dhcp 客户端,使用默认设置,结果 PC1 的 IP192.168.0.1/32
和 PC2 的 IP192.168.0.20/32
仍然没有路由,并且ping
双方都导致network unreachable
手动 IP 分配不起作用。
答案1
该问题源于没有完全理解当前的问题(IPv4 和网络堆栈)并且错过了重要但容易被忽视的线索(mml 的 udhcpc 脚本在启动时通知缺少网络掩码/网关)。
实际的问题是,udhcpd 虽然执行了 DHCP 部分,但由于未知的原因,它没有执行网络掩码/网关部分,或者我缺少关键的配置。
解决方案也很简单:设置 IP/NetMask/GateWay。
通过ip
iproute2 包
# ip set link 'iface' up
# ip addr add 'local'/'netmask' dev 'iface'
# ip route add 'remote'/'netmask' via 'local' dev 'iface'
# ping 'remote'
解释变量:
iface
- 本地机器的接口
local
- 本地机器的 IP 地址(本地,即您正在输入命令的机器)
netmask
- 不言自明,应该在两侧相同,写为 [0-32] 或以 64 为增量的 ip,即 255.255.255.128,尽管通常以 256 为增量
remote
- 远程机器的 IP 地址(远程,即您想要连接到本地机器的机器,反之亦然),
添加路由时请确保您的远程机器已分配其 ip
答案2
您描述的一切都非常合乎逻辑。我会详细解释发生了什么。
我似乎无法从连接(PC1 到 PC2 直接通过 CAT5 工厂电缆连接)获得 ping 信息,但 arping 可以正常进行。
这种行为完全正常,是一个使用协议(层)arping
的命令ARP
2 & 3)OSI model
检查与同一子网中另一台计算机的连接。它不用于IPv4 / IPv6
通信。所以对我来说,这是合乎逻辑的。
但是,ping
协议使用 ICMP(层3)OSI model
需要正确的路线表双方和正确的IPv4 / IPv6
地址(在您的情况下,仅限 IPv4)。
(PC1:100%数据包丢失,PC2:网络不可达)
PC2
由于没有任何路由,这种行为完全正常。数据包无法传输,一旦到达就会被阻止PC2
。
PC1 上的 ip a 显示预期的 192.168.1.1/24,但在 PC2 上却是 192.168.1.150/0
这是你的问题PC2
,IPv4
是无效的: 192.168.1.150/0
。 不能使用IPv4
的/0
子网掩码IPv4 procotol
,最小值为/1
。此外,两台机器不在同一网络中。要进行通信,这些机器需要路由器(假设/0
正确)。此配置无法进行 ping。
PC2
您的 存在问题IPv4
,这也破坏了 上的路由表。您需要检查DHCP
为 分配 IP 的服务器配置PC2
。目标是在两台机器中都使用相同的掩码,因此 :/24
或255.255.255.0
。完成后,您将能够 ping 并双向通信(您只需要注意内部防火墙(Windows Firewall
/iptables
规则等...)。
您也可以尝试修复 IP,PC2
而不是使用DHCP
协议。它应该也能完美运行。
请注意,将两台DHCP
服务器放在同一个网络中需要更多的操作和设置 - 您可以参考此帖子这里。您可以只放置一个udhcpd
并PC1
使用它来为子网中的所有机器(包括它自己)分配 IP。