我需要将两个机器人设备连接到我的计算机上,为此我想使用连接到这些不同硬件的两个网卡。两个设备碰巧使用相同的网络(IP 地址 10.0.0.70 和 10.0.0.21,网络掩码 255.255.255.0 在这两种情况下)。
我发现,如果我配置并建立任何单个卡的网络,它就没有问题:我可以 ping 机器人设备,并且我与它有所有其他连接。但是,一旦我放第二张卡,两张卡中只有一张在工作。我尝试给主计算机不同的IP地址,尝试给相同的,没有区别。我尝试指定主机的IP地址作为网关,每张卡都不一样,相同,完全没有区别。当两张卡都启动时,即使在其中一张卡上 ping 也不起作用,即使我在 ping 时指定要使用哪个接口。
我的内核是 4.15.0-39-generic #42~16.04.1-Ubuntu SMP Wed Oct 24 17:09:54 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux。
如果我将它们分配到不同的网络,两个网卡可以一起工作。然而,最好不要更改机器人设备一侧的网络设置。我不需要在这两张卡之间路由数据包。
这是我得到的工作配置:
enp3s0 Link encap:Ethernet HWaddr 18:d6:c7:00:d9:3e
inet addr:10.0.1.30 Bcast:10.0.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16929681 errors:0 dropped:0 overruns:0 frame:0
TX packets:56504 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1219898415 (1.2 GB) TX bytes:5267812 (5.2 MB)
enp6s0 Link encap:Ethernet HWaddr 18:d6:c7:01:69:35
inet addr:10.0.0.22 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::1ad6:c7ff:fe01:6935/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:52316 errors:0 dropped:0 overruns:0 frame:0
TX packets:16935487 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4325056 (4.3 MB) TX bytes:1220948325 (1.2 GB)
一旦我将第一台设备的 IP 更改为 10.0.0.30(并且广播地址更改为 10.0.0.255),它就会停止工作。
我刚刚在 Kali Linux live 发行版下尝试过,即使在那里它也不起作用。Kali Linux 下
ifconfig eth0 10.0.0.21 netmask 255.255.255.0 up
ifconfig eth1 10.0.0.70 netmask 255.255.255.0 up
同样,我希望至少 ping -我应该工作,但不,要 ping 任何一个,另一个必须关闭。任何简单的交换机怎么会有多个物理端口连接到同一个网络而大型计算机却不能?
默认情况下,Linux 的 IP 协议驱动程序使用技术名称为“弱端系统模型”或“弱主机模型”的优化。有关更多详细信息,请参阅此问题。
归根结底,当您使用属于同一 IP 地址空间块的 IP/网络掩码组合配置两个 NIC 时,负责路由传出 IP 地址的代码将假定这意味着这两个 NIC 都连接到同一个物理网段,因此它们中的任何一个都可用于与该块中具有 IP 地址的任何主机通信。然后它只使用恰好在路由表中首先列出的接口来处理到该网段的所有传出流量。它没有使用相同 IP 地址空间副本的多个不同物理网络的概念。
如果您的系统碰巧启用了反向路径过滤(路由到该源 IP 将通过,因此这个传入的数据包必须是伪造的。如果启用log_martians设置,您可以查看是否发生这种情况:
/proc/sys/net/ipv4/conf/*/rp_filter
eth1
eth1
eth0
eth1
然后尝试 ping 您的机器人,然后检查
dmesg
输出的结尾:您可能会看到有关丢弃数据包的消息。您的情况将要求路由在决定将哪个 NIC 用于传出数据包时考虑源 IP 地址,因此要根据所谓的“强端系统模型”或“强主机模型”来运行。好吧,Linux可以使用“高级路由”功能来做到这一点,但它绝对不是默认设置,而且配置起来相当棘手。如果您真的想这样做,请参阅我在上述问题中的答案以获取配置配方。
然而,由于机器人的 IP 地址不重叠,就软件配置而言,最简单的解决方案是获得一个小型廉价网络交换机(甚至是集线器),并将机器人和计算机的一根网线插入其中。
或者,如果您希望以最少的硬件数量实现简单性,那么如果您想将机器人直接连接到同一台计算机上的多个 NIC,只需将机器人配置为使用不同的 IP 段。
由于机器人设备具有不同的 IP,最简单的方法是使用两个以太网接口作为端口创建一个 Linux 网桥。类似的东西
然后在面向内部的接口上设置一个 IP地址
br0
:你应该很高兴,没有开关挂在盒子的尾部,但一切仍然在同一个网络上。
并且请,请不要将 Kali Linux 用于此类事情。阅读这篇文章,帮自己一个忙,并切换到一些用于日常工作的发行版(基于 Debian,因为 Kali 也是基于 Debian)。你会遇到更少的麻烦。Kali 拥有的所有闪亮工具也可以安装。
对于 21 和 70,您可以使用两个不重叠的子网 10.0.0.0/26 和 10.0.0.64/26(/26 = 掩码 255.255.255.192)。假设没有其他接口包括 10.0.0.0/25。