正确配置不同子网上的两个以太网接口

正确配置不同子网上的两个以太网接口

有哪位对 Linux 和网络有深厚背景的人能帮我吗?我在网上搜索了这个问题的明确答案,甚至还比较了我能访问的具有相同设置的盒子,但我的盒子就是无法工作。

基本情况是这样的:

===========================

RHEL 6 Linux 机有两个以太网接口:

eth0 = 10.10.5.10/24
eth1 = 10.10.6.10/24

[root@box ~]# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.10.5.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0
10.10.6.0      0.0.0.0         255.255.255.0   U         0 0          0 eth1
0.0.0.0        10.10.5.254     0.0.0.0         UG        0 0          0 eth0

ip 转发已启用并且处于活动状态。

问题:

与 eth1 或 10.10.6.x 网络位于同一子网的客户端可以 ping 和 telnet 到此框中 eth1 上运行的资源。

但是,其他子网上的客户端则不能。因此,从我的工作站,我可以整天 ping 和 telnet 到盒子的 eth0 上的资源,但 eth1 上什么都做不了... 怎么回事?

将此设置与我的环境中另一个类似性质的盒子进行比较,没有发现明显差异。

以下是一些文件:

# cat ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="none"
HWADDR="Omitted"
IPADDR="10.10.5.10"
NETMASK="255.255.255.0"
NETWORK="10.10.5.0"
ONBOOT="yes"
TYPE="Ethernet"
USERCTL="no"

# cat ifcfg-eth1
DEVICE="eth1"
BOOTPROTO="none"
HWADDR="omitted"
IPADDR="10.10.6.10"
NETMASK="255.255.255.0"
NETWORK="10.10.6.0"
ONBOOT="yes"
TYPE="Ethernet"
USERCTL="no"

# cat route-eth0 
default via 10.10.5.254 dev eth0

# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=box
GATEWAY=10.10.5.254
NOZEROCONF=yes

如您提供任何帮助我们将不胜感激!

谢谢。

添加更多信息,但简洁明了:

# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    inet 10.10.5.10/24 brd 10.10.5.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    inet 10.10.6.10/24 brd 10.10.6.255 scope global eth1

答案1

使用您当前显示的设置:

  • 你有两面:

    • eth1 端(10.10.6.10 接口,在 10.10.6.0/24 局域网上)
    • eth0 端(10.10.5.10 接口,在 10.10.5.0/24 局域网上)
    • 您在 eth0 端定义了该机器的默认网关(默认网关 ip:10.10.5.254)
  • 所以

    • 在 eth1 端:
      • [要求] 10.10.6.0/24 中的任何机器都应该能够与 10.10.6.10 通信(并且彼此之间也可以通信)(我认为没有防火墙问题)
      • [必要条件] 此外:10.10.6.0/24 中已将其默认网关定义为“10.10.6.10”的任何机器都能够通过您的机器(10.10.6.10/24->eth1[machine]eth0-> 其他局域网)向其他机器发送数据包。实际上,您不需要将其作为默认网关,但对于 eth0 端的任何局域网,它们都需要将该局域网与 10.10.6.10 网关关联。
    • 在 eth0 端:
      • [要求] 10.10.5.0/24 上的任何机器都应该看到 10.10.5.10 (eth0) 并可以与它通信(以及相互通信)。
      • [要求] 另一个 LAN 上的任何机器都应该能够通过(可能有额外的跳数)具有 10.10.5.254 ip 的机器与 eth0 进行通信(例如:如果该机器有 2 个子网,10.10.5.254/24 在与 eth0 同一侧,10.xyz/24 在另一个接口上,则 10.xy0/24 中的机器可以通过路由将数据包发送到 10.10.5.10:10.10.5.0/24 和网关 10.xyz)。
      • 如果是这样,那么他们只需要有一条额外的路由到达 10.10.6.0/24:通过网关 10.xyz 到达 10.10.6.0/24

用语言表达可能会很复杂...

什么会有所帮助:告诉我们网络列表()以及每个网络的网关。

现在我猜你尝试过:

 [everything other machines (even internet, via the exterior internet gateway)]
                  |
                  |(links via switch(s) for 10.x.y.0/24 network, for example.
                  |   If you have such an additionnal LAN.
                  |   Maybe it's even "the Internet", and therefore not in 10.x anything,  
                  |   but this is just an example.)
                  |
                  |      
      (10.x.y.z?) |  [---------------]
   (or Internet?)ethZ[some router/box]ethW(10.10.5.254)
                     [---------------] |
                                       |
                                       |(links via switch(s) for 10.10.5.0/24 network)
                                       |
                             [-------] |
             (10.10.6.10)eth1[yourbox]eth0(10.10.5.10)
                          |  [-------]   
                          |
                          |(links via switch(s) for 10.10.5.0/24 network)
                          |
                          |  [---------------------------]
                         ethx[any machine in 10.10.6.0/24]
                             [---------------------------]

调试设置的一般方法:

  • 想象一下你就是 IP 数据包:你有一个源 IP 和一个目标 IP。
  • 现在,在源所在的接口上,查看该机器的路由告诉您下一跳是哪个。然后前往那里(但首先确保机器的设置允许您这样做,例如在 eth0/eth1 机器上,它需要 ipforward 才能从一个接口转到另一个接口)。然后继续前进,一次一跳,朝着您的目标前进(并返回您的源:有时目标机器的路由/defaultgw 已损坏,因此回复数据包未通过正确的路径发送)
    • ex1(非常简单):10.10.6.10 尝试发送到 10.10.5.10:步骤 1 您位于 eth1(10.10.6.10)上。该机器有一条路由,表示“10.10.5.0/24 直接位于此处,位于 eth0 上”。Ipforwarding 允许您从 eth1 跳转到 eth0。继续到 eth0。步骤 2:您现在位于 eth0 上(相同的 IP 数据包)。事实证明这是您的目的地:很好。步骤 2b:回复数据包:反向源/目的地:您现在是一个数据包(10.10.5.10 -> 10.10.6.10=):感谢上帝,本地路由告诉您下一跳位于 eth1 上。步骤 4:没有 eth1:您已到达目的地。很好。
    • ex2(稍长的例子:)您是来自“any_machine”的数据包,10.10.6.12(在 eth1 端)。您尝试到达目的地 google(例如 8.8.8.8)。因此,您是“10.10.6.12 -> 8.8.8.8”,并且首先位于 10.10.6.12 接口(例如,eth3)。“any_machine”上的本地路由告诉您(因为它是上面的先决条件):“default gw=10.10.6.10”,因此您跳转到“yourbox”,并到达 eth1 端。步骤 2:您现在位于“yourbox/eth1”:现在本地路由告诉您“您需要通过 eth0 转到默认 gw:10.10.5.254”(并且“yourbox”上的 ipforward 允许您从 eth1 跳转到 eth0)。现在您到达了 eth0,按照默认的 gw 路由,稍后您将到达 ethW(10.10.5.254)上的“somerouter”。等等……(并且不要忘记检查回程路线)

答案2

您的默认网关为 10.10.5.254,但 eth1 接口配置为 10.10.6.10/24。这实际上意味着 10.10.6.x 接口无法到达默认网关,因为它们位于不同的子网中。

需要更多常规网络信息才能正确评估您的选择,但是从目前发布的信息来看,您的两个选择是:

  • 确认这两个网络实际上是 /24 子网,如果是这样,请在该接口的配置文件中为 eth1 设置正确的网关
  • 如果接口是较大超网的一部分,则将两个接口配置为位于 /16 子网上以使用相同的网关。

答案3

您启用了 IP 转发吗?

sysctl net.ipv4.ip_forward

如果显示 0,则表示您没有,并且您的盒子没有路由数据包。

启用它

sysctl -w net.ipv4.ip_forward=1

并通过添加以下内容使其永久生效/etc/sysctl.conf

net.ipv4.ip_forward = 1

相关内容