當主機上沒有其他網路時,為什麼 qemu 無法在環回上啟動僅主機網路?

當主機上沒有其他網路時,為什麼 qemu 無法在環回上啟動僅主機網路?

qemu-system-x86_64從...開始-nic user,ipv6=off,hostfwd=tcp::9022-:22

當主機上僅存在lo介面(與其關聯)時,虛擬機器將啟動,但任何嘗試指派連接埠 22 的守護程式都會掛起。127.0.0.1例如,在 vm 內部:#systemctl start sshd將掛起直到被殺死,並且日誌中不會顯示任何有趣的內容。

如果在啟動 qemu 之前主機上有任何其他接口,那麼虛擬機也會啟動,但可以很好地分配端口 22。並ss會顯示:

Netid   State  Recv-Q Send-Q  Local Address:Port  Peer Address:Port  Process
tcp     LISTEN 0      1       0.0.0.0:9022        0.0.0.0:*          users:(("qemu-system-x86",pid=9035,fd=12))

是什麼導致了這個問題? qemu 主機程序不會嘗試將其與依賴於缺失介面的任何 IP 關聯起來。

我沒有使用kvm。這是完整的命令:

qemu-system-x86_64 -machine pc,vmport=off,mem-merge=off,dump-guest-core=off,kernel-irqchip=split -smp 4 -m 1G,slots=4,maxmem=8G -name vm -monitor tcp:127.0.0.1:9023,server,nowait -msg timestamp=on,guest-name=on -rtc base=utc,clock=host,driftfix=none -pidfile .vm_started -daemonize -no-reboot -D .vm.log -nic user,id=n1,ipv6=off,hostname=vm,hostfwd=tcp::9022-:22,hostfwd=tcp::8000-:8000 -boot c -drive file=linux-x86.qcow2,index=0,media=disk,snapshot=off,format=qcow2;

編輯:更多關注 systemd

我認為這完全是系統問題。 ....嘆。

手動啟動 sshd,使用與 systemd 應該使用的完全相同的 exec,工作得很好! sshd 預設監聽 0.0.0.0,

另外,這都是使用標準分發文件。沒什麼客製的。

$ cat /lib/systemd/system/sshd.service 
[Unit]
Description=OpenSSH Daemon
#Wants=sshdgenkeys.service
#After=sshdgenkeys.service
#After=network.target

[Service]
ExecStart=/usr/bin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always

[Install]
WantedBy=multi-user.target

(評論的內容是嘗試解鎖 systemd,但沒有運氣)

另外,這是在具有用戶網路的虛擬機器內部,因此從虛擬機器的角度來看它始終具有有效的網路:

$ ip addr
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 fq_codel state UP group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet 10.0.2.15/24 metric 1024 brd 10.0.2.255 scope global dynamic eth0
       valid_lft 84976sec preferred_lft 84976sec
    inet6 fe80::5054:ff:fe12:3456/64 scope link 
       valid_lft forever preferred_lft forever

當然,解決方案是 systemd 只是!

我一上網:

Apr 23 15:58:16 archlinux systemd[1]: Reached target System Time Synchronized.
Apr 23 15:58:16 archlinux systemd[1]: Started Refresh existing PGP keys of archlinux-keyring regularly.
Apr 23 15:58:16 archlinux systemd[1]: Started Daily verification of password and group files.
Apr 23 15:58:16 archlinux systemd[1]: Reached target Timer Units.
Apr 23 15:58:16 archlinux systemd[1]: Initializes Pacman keyring was skipped because of an unmet condition check (ConditionFirstBoot=yes).
Apr 23 15:58:16 archlinux systemd[1]: Started OpenSSH Daemon.

好的!如果 ntp 主機無法存取或其他什麼情況,對某些東西的可見度為零,這將永遠影響我......仍然不確定是什麼與這些東西聯繫在一起。

$ systemctl show sshd
...
After=sysinit.target systemd-journald.socket pacman-init.service basic.target system.slice

……我猜這是因為有人附加了 pacman-init.service 到它?即使它會被跳過,因為它只在第一次啟動時運行以簽署密鑰?甚至systemctl list-dependencies sshd會顯示所有內容全部綠色或跳過。沒有警告。多麼恥辱的經驗。

答案1

問題是 systemd 給我帶來了麻煩。它沒有執行任何操作,因為它正在等待依賴項,但它沒有在任何日誌中顯示這一點。它也沒有表明它正在等待的依賴是對我的服務的依賴。

搬去https://unix.stackexchange.com/questions/743795/how-to-get-visibility-on-systemd-unit-lifecycle

相關內容