我的物理服务器 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
你的网络设置对我来说似乎很好。
为了通过您设置的两个 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+]来打破这种情况。