我有两个物理上独立且不同的网络。它们都具有相同的子网 192.168.1.0 网络掩码 255.255.255.0。我需要在两个网络上共享一个驱动器。我的主机都是 Linux。在一台 PC 上将两个网卡设置为同一子网不起作用。不,我无法更改其中一个网络的网络 IP,这当然是最简单的解决方案。使用两台 PC,其中一台尝试从另一台重新导出 NFS 共享,这不起作用,因为 NFS 不允许重新导出 NFS 共享。我尝试使用虚拟机 (VMWARE),它解决了所有连接问题,但它无法 NFS 导出 vmhgfs 类型的共享文件夹。当然,这种情况并不罕见。
我无法编辑网络,因为尝试 NFS 安装此共享驱动器的设备是飞机“黑匣子”,其嵌入代码已硬编码为在一个网络上执行 192.168.1.10:/diskB 的 NFS 安装,在另一个网络上执行 192.168.1.11:/diskB 的 NFS 安装。飞机上有两个网络用于冗余。在真实的飞机上,有一个盒子可以完成此操作,并通过这些硬编码的 IP 地址同时为两个网络提供服务。我试图模拟这个盒子,因为要获得一个飞行盒子需要一年多的时间(所有当前生产都分配给了实际的飞机)。
答案1
您的问题是 IPv4 中已解决的众多问题之一。从这个角度来看,我认为您的问题是如何在 IPv6 世界中支持仅支持 IPv4 的传统设备。
基于这样的观点,我将这样解决这个问题:
至少从内核的角度来看,将服务器作为仅 IPv6 运行。运行一个用户模式程序,该程序在单个物理网络接口上讨论 IPv4,并在将流量呈现给内核的虚拟网络接口上将其转换为 IPv6。
您可以运行与您需要支持的物理网络接口数量相同的此程序实例。程序的每个实例负责一个单独的网络接口。您需要为每个程序实例分配一个 /96 IPv6 范围,这是微不足道的 IPv6 地址数量。
使用这种方法,我之前实现了一个 NAT64 程序,它允许我将一台机器用作两个具有相同前缀和相同网关地址的独立 IPv4 网络上的客户端。
您的问题略有不同,因为与我需要解决的使用情况相比,客户端和服务器的角色似乎互换了。这意味着解决方案会略有不同,但对于您来说,这也是一个稍微简单一些的解决方案,因为它可能是无状态的,不需要连接跟踪。
该程序的参数如下:
- 使用哪个网络接口
- 程序在此接口上具有哪个 IPv4 地址
- 虚拟接口上有哪个 /96 IPv6 前缀
该程序需要接收针对其 IPv4 地址的 ARP 请求并做出响应。它需要对需要与之通信的任何客户端执行 ARP 查询并缓存响应。它还需要在 IPv4 和 IPv6 之间转换数据包。
IPv4 和 IPv6 之间的地址映射如下:
- 从 IPv4 到 IPv6,将配置的 /96 添加到地址前面。
- 从 IPv6 到 IPv4,将地址的前 96 位与配置的前缀进行比较。
- 如果匹配,则删除前 96 位以查找 IPv4 地址
- 如果没有匹配,则构造无路由到主机的响应
答案2
正确答案是
- 将两个物理上独立的网络放在不同的 IP 网络上,并使用路由器在它们之间进行路由,
- 或者使用第 2 层交换机上的 VLAN 连接两个物理上独立的网络。
另一个解决方案是在连接它们的任何链路上对一个或两个网络使用 NAT。
您的虚拟机解决方案听起来像是双宿主的,这可能会解决一些问题,但您可能会看到一些路由问题。您始终可以在 vmhgfs 以外的 FS 中格式化共享分区。
更新:使用无类 IP 子网划分 (CIDR),25 位。将网络 A 推到子网底部,将网络 B 推到顶部。您可能需要重新分配一个或两个网络的 IP。在第三个网络中设置存储设备(为了 Pete 的缘故,请使用不同的私有子网。)让存储设备导出到每个 25 位 CIDR 网络。
更新2:使用云存储。
如果您无法执行任何这些建议,我开始相信您正在尝试在您不是管理员的网络中设置某些东西。
答案3
您可以尝试调整与黑盒通信的接口上的子网,为其指定 IP 192.168.1.12、子网 255.255.255.248 和广播 192.16.1.15
然后将另一个接口的 IP 设置为 192.168.1.100,并为其指定子网 255.255.255.248,其广播地址为 192.16.1.103
答案4
好的,我设法让我早期的一次失败得以解决。我在 RHEL7 主机上创建了一个虚拟机 (VMware)。我还安装了 RHEL7 作为客户操作系统。在主机上,我的一个 NIC 上有 IP 192.168.1.10。另一个 NIC 已打开,但在主机中没有为其分配 IP。相反,VM 使用 IP 192.168.1.11 桥接 NIC。然后,我创建了我的磁盘 B 的“共享文件夹”,并将其作为 /diskB 安装在我的 VM 中,类型为 vmhgfs。我在主机上启用了 nfs,并导出 /diskB。现在这里有个窍门。在 VM 中,我无法使用内核 nfsd,而是构建了一个用户空间 NFS 守护进程 unfsd。然后,我在 VM 上以 root 身份运行此 unfsd,导出 /diskB。现在两个网络都正常,任一网络上的客户端都可以看到另一个网络上的客户端所做的更改。