我最近启动了一个新的 Ubuntu 18.04 虚拟机,使用镜像文件 ubuntu-18.04-server-cloudimg-amd64.img。当虚拟机启动时,已经有一个ens3接口,我的 KVM 主机为其分配了默认的 192.0.2.100/24 IP 地址。
但是我需要两个新的接口,所以我也手动创建了它们。它们分别是ens4和ens5:
root@ubuntu:~# ifconfig ens4 10.0.0.10/24
root@ubuntu:~# ifconfig ens5 10.10.10.20/24
root@ubuntu:~#
root@ubuntu:~# ifconfig
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.0.2.100 netmask 255.255.255.0 broadcast 192.0.2.255
inet6 fe80::f6a7:39ff:fe24:6fd3 prefixlen 64 scopeid 0x20<link>
ether f4:a7:39:24:6f:d3 txqueuelen 1000 (Ethernet)
...etc...
ens4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.10 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::f6a7:39ff:fe24:6fd2 prefixlen 64 scopeid 0x20<link>
ether f4:a7:39:24:6f:d2 txqueuelen 1000 (Ethernet)
...etc...
ens5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.10.10.20 netmask 255.255.255.0 broadcast 192.168.71.255
inet6 fe80::f6a7:39ff:fe24:6fda prefixlen 64 scopeid 0x20<link>
ether f4:a7:39:24:6f:da txqueuelen 1000 (Ethernet)
...etc...
root@ubuntu:~#
目前,我仅关注 ens3 和 ens5。我注意到我可以从主机 ping 两个接口:
root@KVMhost:~# ping 192.0.2.100
PING 192.0.2.100 (192.0.2.100) 56(84) bytes of data.
64 bytes from 192.0.2.100: icmp_seq=1 ttl=64 time=0.104 ms
64 bytes from 192.0.2.100: icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from 192.0.2.100: icmp_seq=3 ttl=64 time=0.088 ms
^C
--- 192.0.2.100 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.076/0.089/0.104/0.013 ms
root@KVMhost:~#
root@KVMhost:~# ping 10.10.10.20
PING 10.10.10.20 (10.10.10.20) 56(84) bytes of data.
64 bytes from 10.10.10.20: icmp_seq=1 ttl=64 time=0.216 ms
64 bytes from 10.10.10.20: icmp_seq=2 ttl=64 time=0.158 ms
64 bytes from 10.10.10.20: icmp_seq=3 ttl=64 time=0.100 ms
^C
--- 10.10.10.20 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.100/0.158/0.216/0.047 ms
root@KVMhost:~#
我还可以反向 ping 两个接口。因此网络第 3 层可以正常工作。到目前为止一切顺利。
奇怪的是...使用与上面相同的 IP,我可以从主机 SSH 进入 Ubuntu 的 ens3:
root@KVMhost:~# ssh [email protected]
[email protected]'s password: *******
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)
Last login: Thu Jun 13 17:46:15 2019 from 192.0.2.254
ubuntu@ubuntu:~$
但是,当我尝试对 Ubuntu 的 ens5 进行同样的操作时,我无法连接:
root@KVMhost:~# ssh [email protected]
ssh: connect to host 10.10.10.20 port 22: Connection timed out
root@KVMhost:~#
root@KVMhost:~#
我在 Ubuntu 上执行了 TCPdump,然后再次尝试了第二次 SSH 测试,我看到的结果如下:
root@ubuntu:~# tcpdump -i ens5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5, link-type EN10MB (Ethernet), capture size 262144 bytes
19:08:05.171265 IP 10.10.10.10.46988 > ubuntu.ssh: Flags [S], seq 4112466036, win 29200, options [mss 1460,sackOK,TS val 2621364955 ecr 0,nop,wscale 9], length 0
19:08:05.171295 IP ubuntu.ssh > 10.10.10.10.46988: Flags [S.], seq 2729080149, ack 4112466037, win 28960, options [mss 1460,sackOK,TS val 3132539741 ecr 2621364955,nop,wscale 7], length 0
19:08:06.171804 IP 10.10.10.10.46988 > ubuntu.ssh: Flags [S], seq 4112466036, win 29200, options [mss 1460,sackOK,TS val 2621365956 ecr 0,nop,wscale 9], length 0
19:08:06.171824 IP ubuntu.ssh > 10.10.10.10.46988: Flags [S.], seq 2729080149, ack 4112466037, win 28960, options [mss 1460,sackOK,TS val 3132540741 ecr 2621364955,nop,wscale 7], length 0
^C
root@ubuntu:~#
因此,来自 KVM 主机的 SSH 数据包成功穿越连接并到达 Ubuntu VM!然而,当我检查/var/log/auth.log日志中,我没有看到主机尝试连接的记录。实际上根本没有任何关于主机尝试连接的记录。
所以,我很困惑。这可能是 Ubuntu 的问题,我必须在新接口上明确启用 SSH?还是这是某种奇怪的虚拟化问题?我有点怀疑是前者。
谢谢!