这是为了“研究”而不是务实的目的——我想知道这是如何工作的,因为我下面的猜测不是。换句话说,我不想要一个涉及/etc/network/interfaces
或任何其他特定于发行版或 NetworkManager 的答案。
请不要将其作为提供此类答案的问题的重复项而关闭。
我正在尝试使用常规(非交叉)以太网电缆连接两个 GNU/Linux 系统。有传言说,现在这应该不成问题了。
我试图做的是为两台机器上的接口添加一个私有IP:
ip addr add 10.0.0.1 dev eth0
在10.0.0.2
另一台机器上。两者都没有连接到可以通过这种方式识别的网络。
然后我添加了来回路线:
ip route add 10.0.0.2 via 10.0.0.1
反之亦然。随后,ip addr
和的输出ip route
似乎是正确的(见下文)。根据约翰的评论,我也尝试过这个而不添加任何路线;在这种情况下,ping 就会超时。
两台机器的 iptables 都是开放的; INPUT、OUTPUT 和 FORWARD 都是 ACCEPT,没有任何规则。
但当我尝试 ping 时会发生以下情况:
> ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
请注意,返回此值的是本地接口 (10.0.0.1)。
这里需要什么额外的步骤和/或我哪里出错了?
使用后的路由表ip route ...
如下所示:
default via 192.168.0.1 dev wlan0
10.0.0.2 via 10.0.0.1 dev eth0
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.19
Sans ip route ...
,看起来一样,但没有第 2 行。
ethtool 的输出(两个网卡都是相同的硬件)如下所示:
ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Link partner advertised pause frame use: Symmetric Receive-only
Link partner advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbag
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
ip a
以太网 NIC 的输出如下所示:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:f5:4f:7a brd ff:ff:ff:ff:ff:ff
inet 10.0.0.2/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::ba27:ebff:fef5:4f7a/64 scope link
valid_lft forever preferred_lft forever
答案1
正如注释中所写,您需要修复路由表。
该语法ip route add X via Y
用于网关流量,即流量是否X
应发送到(大多数情况下是外部地址)Y
。需要有一条额外的路线才能Y
到达。如果Y
是您自己的接口地址并且您不解决问题,否则就会创建环路并且路由不起作用。
您需要的是直接通过接口(而不是通过网关)发送到其他主机的流量。有许多不同的可能性,具体取决于您使用的网络掩码:
ip r add 10.0.0.2/32 dev eth0 # only 10.0.0.2 should go via eth0
...
ip r add 10.0.0.0/8 dev eth0 # 10.0.0.0 - 10.255.255.255 should go via eth0
答案2
这里的问题是默认情况下:
ip addr add 10.0.0.1 dev eth0
设置子网掩码为/32
,这意味着子网上不能有任何其他节点,并且尝试在那里设置路由via
毫无意义。
使用明确的、更理智的掩码:
ip addr add 10.0.0.1/24 dev eth0
解决问题;交替查看jofel的回答。