![Linux 路由。计算机 A 到计算机 C](https://linux22.com/image/490677/Linux%20%E8%B7%AF%E7%94%B1%E3%80%82%E8%AE%A1%E7%AE%97%E6%9C%BA%20A%20%E5%88%B0%E8%AE%A1%E7%AE%97%E6%9C%BA%20C.png)
我有计算机 A、计算机 B 和计算机 C。计算机 A 和 B 已连接,计算机 B 和 C 也已连接。如何让计算机 A 和 C 相互通信?我假设我需要向每台机器添加一些路由,但我不确定它们应该是什么样子。为了举例说明,假设计算机 A 是 10.0.1.1,计算机 C 是 10.0.2.1,计算机 B 是 10.0.1.2。不要混淆它们!
谢谢
答案1
您需要在计算机 B 上安装另一个 NIC,其地址与计算机 C 位于同一网络,因此假设您有该 NIC,其 IP 为 10.0.2.5
我们还假设这些网络被划分为 C 类 /24
使计算机 A 的默认网关为 10.0.1.2(计算机 B)
使计算机 C 的默认网关为 10.0.2.5(计算机 B)
在计算机 B 上运行此命令:
echo 1 > /proc/sys/net/ipv4/ip_forward
ip route add 10.0.2.0/24 via 10.0.2.5
ip route add 10.0.1.0/24 via 10.0.1.2
答案2
将子网掩码更改为 255.255.0.0 并将所有机器连接到同一台交换机,无需任何路由
答案3
这可能只是合并子网的问题(通过更改 IP 或放宽子网掩码),具体取决于您的设置。
假设这不是那么容易,那么基本上,你需要针对一般情况做三件事:
告诉计算机 B 充当路由器。这就是之前提到的“echo 1 > /proc/sys/net/ipv4/ip_forward”。这只是告诉 Linux 内核接受其他机器的数据包,并使用机器的路由表将它们发送到目的地。
告诉 A 通过 B 与 C 对话。在 A 上,“ip route add c_ip via b_ip”应该可以做到。
告诉 C 通过 B 与 A 对话。在 C 上,“ip route add a_ip via b_ip”应该可以做到。
但是,如果 A 和 C 都使用 B 作为其默认网关,那么它们将(根据定义)假定一切都应通过 B,因此在这种情况下步骤 2 和 3 是不必要的。
答案4
这个问题实际上是我的一个同事提出的。问题是,我们所有的服务器都配有 Intel Pro/1000,直接将它们连接在一起比购买能够处理服务器到服务器负载的交换机更便宜(说实话,我们买不起这样的交换机)。我们在所有服务器上将 ip_forward 设置为 1。我们使用带有 iproute2 的 Gentoo。服务器 C 是带有 ifconfig 的 Gentoo。以下是它们的 conf.d/net 的副本,其中唯一改变的是服务器名称:
服务器地图:
服务器 A eth1 -> 服务器 B eth1 服务器 B eth0 -> 服务器 C eth2
服务器 A:
config_eth1="10.0.2.1 网络掩码 255.255.255.0" routes_eth1="添加 10.0.2.2 dev eth1 添加-net 10.0.1.0/24 dev eth1”
服务器B:
config_eth1="10.0.2.2 网络掩码 255.255.255.0" routes_eth1="10.0.2.0/24 dev eth1" config_eth0="10.0.1.1 网络掩码 255.255.255.0" routes_eth0="10.0.1.2 dev eth0"
服务器C:
config_eth2="10.0.1.2 网络掩码 255.255.255.0" routes_eth2=10.0.1.1 dev eth2 10.0.2.0/24 经由 10.0.1.2”
服务器 A 可以毫无问题地与服务器 B 通信,服务器 B 也可以毫无问题地与服务器 C 通信,但 A 和 C 无法通过 B 通信。在尝试通信期间,tcpdump 显示未答复的 arp who-has 请求。我以前从未使用 Linux 作为路由器,因此我对此主题的了解非常有限。