Ubuntu 服务器,2 个以太网设备,同一个网关 - 想要强制互联网流量通过 1 个设备(或者至少允许它工作!)

Ubuntu 服务器,2 个以太网设备,同一个网关 - 想要强制互联网流量通过 1 个设备(或者至少允许它工作!)

我有一台 Ubuntu 10.04 服务器,带有 2 个以太网设备,eth0 和 eth1。

  • eth0 有一个静态 IP 192.168.1.210
  • 如果 192.168.1.211,则 eth1 具有静态 IP

DHCP 服务器(也用作互联网网关)位于 192.168.1.1。

我现在遇到的问题是,当我同时插入两个设备时,我可以通过 SSH 在内部连接到两个 IP,但我无法从服务器连接到互联网。如果我拔掉其中一个设备(例如 eth1),那么它就可以正常工作,没有问题。(此外,当我运行 时,我得到了相同的结果sudo ifconfig eth1 down)。

问题是,我该如何配置它,以便可以让设备 eth0 和 eth1 在同一网络上正常运行,但也允许互联网访问?(我愿意强制所有 inet 流量通过单个设备,或者通过两者,我很灵活)。

从我的谷歌搜索来看,我似乎遇到了一个独特的(或不常见的)问题,所以一直找不到解决方案。这是人们通常不会做的事情吗?我想同时使用这两个以太网设备的原因是我想在这两个设备上运行不同的本地流量服务来分担负载,可以这么说...

提前致谢。

更新

/etc/network/interfaces 的内容:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

# The secondary network interface
#auto eth1
#iface eth1 inet dhcp

(注意:上面我注释掉了最后两行,因为我认为这会导致问题……但这并没有解决问题)

网络状态监测

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     192.168.1.1     255.255.255.0   UG        0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0

更新2

我按照 Kevin 的建议对 /etc/network/interfaces 文件进行了更改。在显示文件内容和路由表之前,当我登录到服务器(通过 SSH)时,我无法 ping 外部服务器,所以这是我遇到的相同问题,导致我发布此问题。

更改文件后,我运行了 /etc/init.d/networking restart。

/etc/network/interfaces 的内容:

# The loopback network interface auto lo iface lo inet loopback

# The primary network interface 
auto eth0 iface eth0 inet dhcp
    address 192.168.1.210
    netmask 255.255.255.0
    gateway 192.168.1.1

# The secondary network interface 
auto eth1 iface eth1 inet dhcp
    address 192.168.1.211
    netmask 255.255.255.0

ifconfig 输出

eth0      Link encap:Ethernet  HWaddr 78:2b:cb:4c:02:7f
          inet addr:192.168.1.210  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::7a2b:cbff:fe4c:27f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6397 errors:0 dropped:0 overruns:0 frame:0
          TX packets:683 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:538881 (538.8 KB)  TX bytes:85597 (85.5 KB)
          Interrupt:36 Memory:da000000-da012800

eth1      Link encap:Ethernet  HWaddr 78:2b:cb:4c:02:80
          inet addr:192.168.1.211  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::7a2b:cbff:fe4c:280/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5799 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:484436 (484.4 KB)  TX bytes:1184 (1.1 KB)
          Interrupt:48 Memory:dc000000-dc012800

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:635 errors:0 dropped:0 overruns:0 frame:0
          TX packets:635 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:38154 (38.1 KB)  TX bytes:38154 (38.1 KB)

网络状态监测

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth1
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0

答案1

如果您不需要将两个接口视为不同的接口,那么更好的解决方案是将两个接口绑定在一起并在它们之间拆分负载:https://help.ubuntu.com/community/UbuntuBonding

如果你需要保留当前方案,请查看这篇旧文章 -http://www.linuxjournal.com/article/7291-

现在的命令可能不同,但想法是一样的,根据源 IP 执行基于策略的路由。

我还不能发表评论,但我相信凯文的建议应该可行,但根据您的路由表,您仍然有两个条目,因此看来您在更改后还没有重新启动网络。

答案2

如果您同意所有流量仅通过一个接口,那么您只需在一个接口上设置默认网关设置...例如:

假设您希望流量仅通过“eth0”:

auto eth0
iface eth0 inet static
    address 192.168.1.210
    netmask 255.255.255.0
    gateway 192.168.1.1

auto eth1
iface eth1 inet static
    address 192.168.1.211
    netmask 255.255.255.0

注意到第二个接口上省略了“网关”字段吗?

答案3

这个问题并不是唯一的,这是一个路由问题。

运行:route -n 显示您的路由表。

我的路由表是这样的:

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0

没关系,因为我只有 1 个默认网关(它是最后一行)但是您的路由表有 2 个默认网关,如下所示:

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
0.0.0.0         10.0.2.1        0.0.0.0         UG        0 0          0 eth1

因此,当您的服务器连接到互联网时,它会轮流使用这两个网关(两条互联网线路)。这导致 SSH 服务器在 /var/log/secure 中引发如下异常

ssh_exchange_identification: read: Connection reset by peer

解决方案是:删除 1 个默认网关。

/sbin/route del default
/sbin/route add default gw 192.168.1.1 dev eth0 

(更改 IP 以匹配您的系统)祝你好运

答案4

这可能是网关的问题。尝试添加新网关:

路由添加默认网关 192.168.xx

并注释掉静态网络上的“网关”。

相关内容