【问题标题】:Configure QEMU (Guest Debian-9.0 Sparc64 - Host MacOS High Sierra) to do ssh from guest to host配置 QEMU (Guest Debian-9.0 Sparc64 - Host MacOS High Sierra) 来做 ssh 从来宾到主机
【发布时间】:2018-04-14 20:07:40
【问题描述】:

首先,使用QEMU Virtual Machine (Debian Sparc64 Etch 4.0),我已经能够成功地从Guest 到Host (MacOS Hight Sierra OS 10.13.3) 获取sshscp 命令。

我只想在来宾和主机之间传输文件。

为了得到它,我关注了这个tutorial

1) 我已经安装了TUN/TAP drivers

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 Etch 主机上,进入/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) 最后,做客:$ scp -r dir user_host@192.168.10.1:~/

现在,我想用“Debian Sparc64 Stretch 9.0”客人获得同样的东西。

似乎ifconfig 在最近的 Debian 版本中已被弃用。

无论如何,我尝试使用以下命令启动 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),但不幸的是,来自访客的 sshscp 不起作用。

我必须注意,对于这个Debian Sparc64 9.0 来宾,网络逻辑名称正在发生变化(可能是每次启动)。例如,/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

如果有人可以给我一些修复它的线索并让ssh/scp 命令从客人到主机工作(我没有在客人上的网络也没有sshd server,所以我只想要guest--&gt;host 的方向@987654348 @)。

更新 1:

我一直在调试这个问题。

1) 首先,从this link,我在每次启动时将guest "Debian 9.0 Sparc64" 的网络接口重命名为eth0

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

   SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="52:54:00:12:34:56", NAME="eth0"

MAC adress 由:

$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

2) 我在 MacOS High Sierra 主机的 TAP 界面上使用了tcpdump

# tcpdump -vv -i tap0
tcpdump: listening on tap0, link-type EN10MB (Ethernet), capture size 262144 bytes
00:23:06.112155 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 tell 192.168.10.2, length 46
00:23:06.112228 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.10.1 is-at fe:22:e7:8c:7f:fa (oui Unknown), length 28
00:23:07.128440 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 tell 192.168.10.2, length 46
00:23:07.128499 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.10.1 is-at fe:22:e7:8c:7f:fa (oui Unknown), length 28
00:23:08.152323 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 tell 192.168.10.2, length 46
00:23:08.152381 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.10.1 is-at fe:22:e7:8c:7f:fa (oui Unknown), length 28
00:23:11.119346 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 tell 192.168.10.2, length 46
00:23:11.119396 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.10.1 is-at fe:22:e7:8c:7f:fa (oui Unknown), length 28
00:23:12.120190 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 tell 192.168.10.2, length 46
00:23:12.120250 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.10.1 is-at fe:22:e7:8c:7f:fa (oui Unknown), length 28
00:23:13.145028 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 tell 192.168.10.2, length 46
00:23:13.145075 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.10.1 is-at fe:22:e7:8c:7f:fa (oui Unknown), length 28
00:23:16.127525 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 tell 192.168.10.2, length 46
00:23:16.127575 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.10.1 is-at fe:22:e7:8c:7f:fa (oui Unknown), length 28
00:23:17.145202 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 tell 192.168.10.2, length 46
00:23:17.145272 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.10.1 is-at fe:22:e7:8c:7f:fa (oui Unknown), length 28

我是否应该断定客人(192.168.10.2 客人/etc/network/interfaces)和主机(192.168.10.1ifconfig tap0 192.168.10.1 设置)正在通信,因为我看到两个地址都带有tcpdump 以上?

如果我在主机上执行tcpdump -vv -i tap0 而我在来宾上重新启动网络,我会得到:

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)是否正常:

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN 

??

更新 2: 我还尝试使用带有“-net tap”标志的guestfwd 标志来启动,如下所示:

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 

但仍然没有从访客到主机的 ssh 访问权限。

我不知道在-net 'user,guestfwd=tcp::22-tcp::22' 中,我必须按什么顺序输入来宾和主机的IP 以及它们各自使用的端口(我在这里都使用了22

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

更新 3:

最后,通过在 MacOS 主机上(以 root 身份)解决问题:

1) 使用“ifconfig bridge0 192.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) 最后,从来宾 Debian Sparc64,我可以使用(作为简单用户或 root)连接到 MacOS 主机:

ssh user_host@192.168.10.1

【问题讨论】:

    标签: linux macos ssh qemu tcpdump


    【解决方案1】:

    一些备注:

    是的,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 地址 em>,你的以太网 MAC 地址是什么?”。

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

    所以您的问题不仅与 SCP/SSH 有关,而且与一般的 IP 协议有关。例如,访客将无法显示位于主机上的网站。

    此外,由于主人不想发送答案,任何其他客人都会遇到同样的问题。我强烈假设如果你以完全相同的方式启动它的虚拟机,并且在配置完全相同的主机上与使用新的 debian stretch 的虚拟机完全相同,那么你的旧 debian etch 也会以同样的方式失败。

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

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

    因此,您也将主机的物理网络接口连接到网桥。通常,这是一个静态配置,即在启动 VM 时不会动态完成。这意味着主机上的操作系统配置为创建一个网桥并在启动时将其物理网络接口添加到网桥。相比之下,客人的 TAP 会在客人启动时动态添加到网桥中,并在客人关闭时从网桥中移除。

    动态添加和删除客人的 TAP 到主机的网桥通常是通过 upscriptdownscript 参数完成的,您将这些参数提供给 -tap ... 配置选项。显然,您是手动执行此操作(更新 3 的第 3 项)。

    总而言之,您的问题是房东没有回答客人的ARP 查询。发生这种情况是因为这些查询到达了 VM 的 TAP 所连接的网桥,但您没有为该网桥分配 IP 地址(更准确地说,至少不是访客的 ARP 查询所要求的 IP 地址)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-05
      • 2020-02-07
      • 1970-01-01
      • 2016-09-07
      • 2018-05-18
      • 2021-08-13
      • 1970-01-01
      • 2022-06-24
      相关资源
      最近更新 更多