Linux路由。 计算机A到计算机C

我有计算机A,计算机B和计算机C.计算机A和B已连接,计算机B和C已连接。 我怎样才能让电脑A和C相互沟通? 我假设我需要添加一些路由到每台机器,但我不确定他们应该看起来像什么。 为了举例,可以说计算机A是10.0.1.1,计算机C是10.0.2.1,计算机B是10.0.1.2。 不要让他们混在一起!

谢谢

您需要在计算机B上使用与计算机C位于同一networking上的另一个NIC,因此可以说您的IP地址为10.0.2.5

我们还假设这些networking被划分为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 

将子网掩码更改为255.255.0.0,并将所有机器连接到同一个交换机,不需要任何路由

这可能是一个简单的合并子网的问题(通过更改IP或放宽子网掩码),具体取决于您的设置。

假设它不是那么容易,那么基本上,你需要为一般情况做三件事:

  1. 告诉计算机B充当路由器。 这就是提到的“echo 1> / proc / sys / net / ipv4 / ip_forward”。 这只是告诉linux内核接受其他机器的数据包,并使用机器的路由表发送到他们的目的地。

  2. 告诉A通过B与C交谈。在A上工作,“ip route add c_ip via b_ip”应该这样做。

  3. 告诉C通过B与A交谈。在C上工作,“ip route add a_ip via b_ip”应该这样做。

但是,如果A和C都使用B作为它们的默认网关,那么他们将(根据定义)假设一切都应该经过B,所以步骤2和3在这种情况下是不必要的。

将第二个地址添加到与计算机c相同networking范围的计算机b并启用ip路由,这将使计算机b变成路由器。 不需要第二个网卡

这个问题实际上是由我的一个同事发布的。 问题出在这里,我们所有的服务器都有英特尔Pro / 1000s,把它们直接链接在一起比购买能够处理服务器到服务器负载(tbh,我们买不起这种交换机)的交换机更便宜。 我们在所有服务器上将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.1networking掩码255.255.255.0”
 routes_eth1 =“add 10.0.2.2 dev eth1
 add -net 10.0.1.0/24 dev eth1“ 

服务器B:

  config_eth1 =“10.0.2.2networking掩码255.255.255.0”
 routes_eth1 =“10.0.2.0/24 dev eth1”
 config_eth0 =“10.0.1.1networking掩码255.255.255.0”
 routes_eth0 =“10.0.1.2 dev eth0” 

服务器C:

  config_eth2 =“10.0.1.2networking掩码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拥有者请求。 我以前从来没有使用Linux作为路由器,所以我对这个主题的知识是相当有限的。

在机器B上:

 echo 1 > /proc/sys/net/ipv4/ip_forward