Linux 配置QEMU(来宾Debian-9.0 Sparc64-主机MacOS High Sierra)在来宾到主机之间执行ssh

Linux 配置QEMU(来宾Debian-9.0 Sparc64-主机MacOS High Sierra)在来宾到主机之间执行ssh,linux,macos,ssh,qemu,tcpdump,Linux,Macos,Ssh,Qemu,Tcpdump,首先,使用QEMU虚拟机(Debian Sparc64 Etch 4.0),我成功地从来宾到主机获取ssh和scp命令(MacOS Hight Sierra OS 10.13.3) 我只想在客人和主人之间传输文件 为了得到它,我遵循以下步骤: 1) 我已经安装了TUN/TAP驱动程序 2) 像这样启动QEMU: qemu-system-sparc -boot c -hda debian_etch.img -m 512M -net nic -net tap,script=no,downscript

首先,使用
QEMU虚拟机(Debian Sparc64 Etch 4.0)
,我成功地从来宾到主机获取
ssh
scp
命令(
MacOS Hight Sierra OS 10.13.3

我只想在客人和主人之间传输文件

为了得到它,我遵循以下步骤:

1) 我已经安装了
TUN/TAP驱动程序

2) 像这样启动QEMU:

qemu-system-sparc -boot c -hda debian_etch.img -m 512M -net nic -net tap,script=no,downscript=no
3) VM启动后,在MacOS主机上执行以下操作:
ifconfig tap0 192.168.10.1

4) 在Debian蚀刻主机上,插入
/etc/network/interfaces

auto eth0
iface eth0 inet static
address 192.168.10.2
netmask 255.255.255.0
gateway 192.168.10.1
并执行:
/etc/init.d/networking restart

5) 最后,在guest上生成:
$scp-r dir user_host@192.168.10.1:~/

现在,我想用“
Debian Sparc64 Stretch 9.0
”客户机获得同样的结果。

最近版本的Debian似乎不推荐使用
ifconfig

无论如何,我尝试启动Sparc64映像时使用了:

qemu-system-sparc64 \
-drive file=debian-9.0-sparc64.qcow2,if=none,id=drive-ide0-0-1,format=qcow2,cache=none \
-m 1024 \
-boot c \
-net nic \
-net tap,ifname=tap0,script=no,downscript=no \
-nographic
再次执行步骤1)、3)、4),但不幸的是,来宾的
ssh
scp
不起作用

我必须注意,有了这个
Debian Sparc64 9.0
guest,网络逻辑名称正在改变(可能是每次启动)。例如,
/etc/network/interfaces
包含:

auto enp0s5
allow-hotplug enp0s5
iface enp0s5 inet static
address 192.168.10.2
netmask 255.255.255.0
gateway 192.168.10.1
最后,我从来宾那里得到以下结果:

# ssh user_host@192.168.10.1
  ssh: connect to host 192.168.10.1 port 22: No route to host
ip a
提供:

# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.2/24 brd 192.168.10.255 scope global enp0s5
       valid_lft forever preferred_lft forever
    inet6 fec0::5054:ff:fe12:3456/64 scope site mngtmpaddr dynamic 
       valid_lft 86207sec preferred_lft 14207sec
    inet6 fe80::5054:ff:fe12:3456/64 scope link 
       valid_lft forever preferred_lft forever
具有
MAC地址
,由以下人员给出:

$ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.2/24 brd 192.168.10.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe12:3456/64 scope link 
       valid_lft forever preferred_lft forever
我是否应该断定来宾(
192.168.10.2
在来宾
/etc/network/interfaces
上)和主机(
192.168.10.1
ifconfig tap0 192.168.10.1
设置)正在通信,因为我看到上面的两个地址都是
tcpdump

如果我在主机上执行
tcpdump-vv-I tap0
,同时在来宾机上重新启动networkin,我会得到:

00:27:07.648620 IP6 (hlim 1, next-header Options (0) payload length: 36) :: > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 1 group record(s) [gaddr ff02::1:ff12:3456 to_ex { }]
00:27:07.804644 IP6 (hlim 1, next-header Options (0) payload length: 36) :: > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 1 group record(s) [gaddr ff02::1:ff12:3456 to_ex { }]
00:27:08.569140 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) :: > ff02::1:ff12:3456: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::5054:ff:fe12:3456
      unknown option (14), length 8 (1): 
        0x0000:  3bd4 4c86 3dd6
00:27:08.612632 IP (tos 0x0, ttl 255, id 37381, offset 0, flags [none], proto UDP (17), length 118)
    192.168.10.1.mdns > 224.0.0.251.mdns: [udp sum ok] 0 PTR (QU)? 6.5.4.3.2.1.e.f.f.f.0.0.4.5.0.5.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. (90)
00:27:09.592322 IP6 (hlim 1, next-header Options (0) payload length: 36) fe80::5054:ff:fe12:3456 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 1 group record(s) [gaddr ff02::1:ff12:3456 to_ex { }]
00:27:09.592483 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::5054:ff:fe12:3456 > ip6-allrouters: [icmp6 sum ok] ICMP6, router solicitation, length 16
      source link-address option (1), length 8 (1): 52:54:00:12:34:56
        0x0000:  5254 0012 3456
00:27:09.616466 IP (tos 0x0, ttl 255, id 18614, offset 0, flags [none], proto UDP (17), length 118)
    192.168.10.1.mdns > 224.0.0.251.mdns: [udp sum ok] 0 PTR (QM)? 6.5.4.3.2.1.e.f.f.f.0.0.4.5.0.5.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. (90)
00:27:09.976787 IP6 (hlim 1, next-header Options (0) payload length: 36) fe80::5054:ff:fe12:3456 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 1 group record(s) [gaddr ff02::1:ff12:3456 to_ex { }]
这些消息中是否有有用的信息,以便从来宾到主机获取ssh/scp

最后,对于
guest eth0
,具有以下状态(
UNKNOWN
)是否正常:

vi /etc/udev/rules.d/10-network.rules

   SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="52:54:00:12:34:56", NAME="eth0"
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN 
但仍然没有从来宾到主机的ssh访问

我不知道,在
-net'用户中,guestfwd=tcp::22 tcp::22'
,我必须按照什么顺序放置guest和host的IP以及它们各自使用的端口(我在这里使用了
22

如果有人能给我一些关于“
guestfwd
”标志的精确信息

更新3:

最后,通过在MacOS主机上(以root用户身份)执行以下操作来解决此问题:

1) 使用“
ifconfig-bridge0192.168.10.1
”在
bridge0
上设置IP
190.168.10.1

2) 使用以下命令启动Qemu:

qemu-system-sparc64 \
-boot c \
-hda debian-9.0-sparc64.qcow2 \
-device virtio-balloon \
-net nic,model=virtio,macaddr=52:54:00:12:34:56 \
-vga none \
-net tap,ifname=tap0,script=no,downscript=no \
-m 1024 \
-nographic
MAC地址
52:54:00:12:34:56
很重要

3) 启动Qemu后,将
tap0
接口添加到
bridge0
ifconfig bridge0 addm tap0

4) 最后,从guest Debian Sparc64,我可以通过(作为简单用户或root用户)连接到MacOS主机:

一些评论:

是的,
ifconfig
已被弃用,但据我所知,至少六年左右以来一直如此,现在仍然存在。。。这是有原因的。我想你可以不用良心不安地使用它

关于您的
tcpdump
摘录:您认为它包含有用的信息是正确的。不过,它并没有显示来宾和主机之间的真正通信,而是显示了
ARP
查询
ARP
是地址解析协议,出于以下原因需要:

基本上,只要
TCP/IP
堆叠在
Ethernet
之上,计算机(无论是否为虚拟计算机)就需要知道其通信伙伴的以太网硬件地址(
MAC
(媒体访问控制)地址)

因此,如果一台IP地址为a.a.a.a的计算机a想与一台IP地址为B.B.B.B的计算机B通话,a首先需要知道B的
MAC
地址。因此,A将一个以太网广播帧发送到本地以太网段(基本上,广播帧是一个发送到连接到相应段的所有机器的帧),询问:“我需要与具有IP地址b.b.b.b的人交谈。如果你们中的任何人具有此IP地址,那么您的以太网MAC地址是什么?”

您的
tcpdump
摘录显示此
ARP
解析失败。你的客人一次又一次地问,却没有得到回答。在这种情况下,来宾无法与主机进行任何TCP/IP通信

因此,您的问题不仅仅与SCP/SSH有关,而是与IP协议有关。例如,来宾将无法显示位于主机上的网站

此外,由于主人不想发送答复,任何其他客人都会遇到同样的问题。我强烈认为,如果您以与新debian
stretch
完全相同的方式在同一主机上以与新debian
stretch
完全相同的配置启动其VM,那么旧debian
蚀刻将以同样的方式失败

当然,来自来宾的ARP请求首先到达来宾VM的TAP连接的网桥。只要该网桥没有为来宾请求分配IP地址,来宾的ARP请求就不会得到响应。此问题通常通过以下方式解决:

在主机上,将IP地址从物理网络接口移开并分配给网桥。然后网桥回答客人的ARP查询。但是这还不能让你到达任何地方,因为现在你不能再使用主机的物理网络接口了(你已经拿走了它的IP地址)

因此,您还可以将主机的物理网络接口连接到网桥。通常,这是一种静态配置,即在启动VM时不会动态进行配置。这意味着主机上的操作系统
qemu-system-sparc64 \
-boot c \
-hda debian-9.0-sparc64.qcow2 \
-net nic \
-net tap,ifname=tap0,script=no,downscript=no \
-net 'user,guestfwd=tcp::22-tcp::22' \
-m 1024 \
-nographic 
qemu-system-sparc64 \
-boot c \
-hda debian-9.0-sparc64.qcow2 \
-device virtio-balloon \
-net nic,model=virtio,macaddr=52:54:00:12:34:56 \
-vga none \
-net tap,ifname=tap0,script=no,downscript=no \
-m 1024 \
-nographic
ssh user_host@192.168.10.1