![主机通过 SSH 连接客户机(使用 qemu vm)](https://linux22.com/image/713745/%E4%B8%BB%E6%9C%BA%E9%80%9A%E8%BF%87%20SSH%20%E8%BF%9E%E6%8E%A5%E5%AE%A2%E6%88%B7%E6%9C%BA%EF%BC%88%E4%BD%BF%E7%94%A8%20qemu%20vm%EF%BC%89.png)
我在使用 qemu VM 启用主机到客户机通信时遇到了麻烦。目标是通过 SSH 从主机连接到客户机 VM。
我有以下设置:
- 主机:需要在客户虚拟机内本地访问 SSH 服务器
- 客户机:基于 qemu 的虚拟机使用 tap 接口启动(参数,共 4 个 tap 设备):
-netdev tap,ifname=tap0,id=mw,script=no,downscript=no -device virtio-net,netdev=mw,mac=52:54:01:34:AD:EF
虚拟机通过网桥相互连接br0
,而不是通过物理接口eth0
。
问题/假设:
我认为要让它发挥作用,我需要添加eth0
到桥梁第一的和第二通过创建静态路由
route add -host <any chosen internal IP, e.g. 192.168.1.2> dev tap0
我有第三eth0
在通过附加内部 IP 之前分配
ip addr add <any chosen internal IP on the same subnet as route, e.g. 192.168.1.3> dev eth0
?
如果是这样,我的问题是我被限制于远程访问,因为一切都发生在服务器上。因此我无法通过添加/删除接口,brctl
因为我会失去与服务器的 ssh 连接!
因此,我尝试将所有内容放入/etc/network/interfaces
,这是我的代码:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
hostname 'actual hostname here'
address 'actual IP here'
netmask 'actual netmask here'
gateway 'actual gateway IP here'
auto br0
iface br0 inet manual
pre-up /sbin/tunctl -t tap0 -u 'actual user here' -g netdev
pre-up /sbin/tunctl -t tap1 -u 'actual user here' -g netdev
pre-up /sbin/tunctl -t tap2 -u 'actual user here' -g netdev
pre-up /sbin/tunctl -t tap3 -u 'actual user here' -g netdev
pre-up ip link set tap0 up
pre-up ip link set tap1 up
pre-up ip link set tap2 up
pre-up ip link set tap3 up
bridge-ports tap0 tap1 tap2 tap3
bridge-stp 0
bridge_maxwait 0
bridge_fd 0
post-down ip link set tap0 down
post-down /sbin/tunctl -d tap0
post-down ip link set tap1 down
post-down /sbin/tunctl -d tap1
post-down ip link set tap2 down
post-down /sbin/tunctl -d tap2
post-down ip link set tap3 down
post-down /sbin/tunctl -d tap3
现在,当我添加eth0
到该行时bridge-ports eth0 tap0 tap1 tap2 tap3
,我无法再通过 ssh 连接到服务器。在救援并检查日志文件后,我看不到任何错误或提示为什么eth0
桥接接口不起作用!?
我的错在哪里?提前谢谢您!
编辑:我也尝试过,但没有成功
auto lo
iface lo inet loopback
iface eth0 inet manual
auto br0
iface br0 inet manual
pre-up /sbin/tunctl -t tap0 -u 'actual user here' -g netdev
pre-up /sbin/tunctl -t tap1 -u 'actual user here' -g netdev
pre-up /sbin/tunctl -t tap2 -u 'actual user here' -g netdev
pre-up /sbin/tunctl -t tap3 -u 'actual user here' -g netdev
pre-up ip link set eth0 up
pre-up ip link set tap0 up
pre-up ip link set tap1 up
pre-up ip link set tap2 up
pre-up ip link set tap3 up
hostname 'actual hostname here'
address 'actual IP here'
netmask 'actual netmask here'
gateway 'actual gateway IP here'
bridge-ports eth0 tap0 tap1 tap2 tap3
bridge-stp 0
bridge_maxwait 0
bridge_fd 0
post-down ip link set tap0 down
post-down /sbin/tunctl -d tap0
post-down ip link set tap1 down
post-down /sbin/tunctl -d tap1
post-down ip link set tap2 down
post-down /sbin/tunctl -d tap2
post-down ip link set tap3 down
post-down /sbin/tunctl -d tap3
有人知道吗?
答案1
eth0
如果您桥接 eth0,则需要在桥接接口上设置 IP 地址,而不是在底层接口上设置。