如何在ubuntu12.04中为互联网启用两个网络接口

use*_*717 7 networking ubuntu

我的物理服务器 A 有两个接口:eth0 和 eth1。我打算在 ubuntu12.04 中为 Internet 启用两个网络接口。我配置 /etc/network/interfaces 如下:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.10.101.105
gateway 10.10.101.254
netmask 255.255.255.0
auto eth1
iface eth1 inet static
address 10.10.101.205
gateway 10.10.101.254
netmask 255.255.255.0
Run Code Online (Sandbox Code Playgroud)

ifconfig 的输出如下所示:

eth0      Link encap:Ethernet  HWaddr e0:db:55:25:ed:10
          inet addr:10.10.101.105  Bcast:10.10.101.255  Mask:255.255.255.0
          inet6 addr: fe80::e2db:55ff:fe25:ed10/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1148531 errors:0 dropped:0 overruns:0 frame:0
          TX packets:554215 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1636019748 (1.6 GB)  TX bytes:40068201 (40.0 MB)
          Interrupt:35

eth1      Link encap:Ethernet  HWaddr e0:db:55:25:ed:11
          inet addr:10.10.101.205  Bcast:10.10.101.255  Mask:255.255.255.0
          inet6 addr: fe80::e2db:55ff:fe25:ed11/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:56699 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4077879 (4.0 MB)  TX bytes:492 (492.0 B)
          Interrupt:38

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:124891 errors:0 dropped:0 overruns:0 frame:0
          TX packets:124891 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1484482588 (1.4 GB)  TX bytes:1484482588 (1.4 GB)
Run Code Online (Sandbox Code Playgroud)

所以,我认为这两个网络接口都已启动。但是,我发现我只能通过 eth0(10.10.101.105) 从主机 B 访问我的物理服务器 A,而无法通过 eth1(10.10.101.205) 访问它。

当我使用 route -n 检查服务器中的路由器表时,它显示:

vli05@vli05:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.10.101.254   0.0.0.0         UG    100    0        0 eth0
10.10.101.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.10.101.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

PS:使用ping命令的主机BI在上面提到的物理主机AI的同一个子网中。我只想使用 ping 通过 eth0(10.10.101.105) 和 eth1(10.10.101.205) 访问物理主机 A。

此外,输出$ sudo netstat -tapn | grep :22如下所示:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN                           1180/sshd
tcp        0      0 10.10.101.105:22        10.10.18.35:57651       ESTABLISHED                      13235/sshd: zjuvlis
tcp6       0      0 :::22                   :::*                    LISTEN
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我使用 IP 为 10.10.18.35 的主机到 ssh 10.10.101.105。但是ssh 10.10.101.205(eth1对应的IP)失败

更重要的是,当我使用 telnet 进行调试时,

root@CO:/home/dujun/work_git/Ruby_reference/trace_ruby_code# telnet 10.10.101.205 22
Trying 10.10.101.205...
Connected to 10.10.101.205.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.8
Run Code Online (Sandbox Code Playgroud)

结果是一样的 telent 10.10.101.105 22

slm*_*slm 1

你的网络设置对我来说似乎很好。

SSH

为了通过您设置的两个 IP 地址“访问”服务器,您需要确保 SSH 接受两个 IP 地址上的连接并且“绑定”到两个 IP 地址。

如果 SSH 正在侦听系统上存在的所有 IP 地址,那么您应该会看到它绑定到特殊 IP 0.0.0.0。这意味着系统上存在的任何/所有接口都具有与其关联的 IP。

例子

$ sudo netstat -tapn | grep :22
tcp        0      0 0.0.0.0:22       0.0.0.0:*         LISTEN      3540/sshd
tcp6       0      0 :::22           :::*               LISTEN      3540/sshd
Run Code Online (Sandbox Code Playgroud)

进一步调试

当尝试通过 SSH 连接到该主机时,您可以使用该命令telnet来调试该主机是否在两个 IP 地址上的端口 22(SSH 的 TCP/IP 端口)上接受连接,以确认它正在接受连接。您可能会被防火墙规则(例如iptables)绊倒。

要确认,只需对来自另一台主机的命令执行以下操作:

$ telnet 10.10.101.105 22
-and-
$ telnet 10.10.101.205 22
Run Code Online (Sandbox Code Playgroud)

当这些工作正常时,您将看到如下输出:

Trying 10.10.101.105...
Connected to 10.10.101.105.
Escape character is '^]'.
SSH-2.0-OpenSSH_6.2
Run Code Online (Sandbox Code Playgroud)

注意:使用Control+]来打破这种情况。