我有以下设置:
Notebook (IP: 192.168.1.100)
Host: (IP:192.168.1.129)
笔记本电脑和主机都连接到路由器(Internet IP:192.168.1.1)¨
主机(Host)上有两个虚拟机(Development、Office)。由于主机使用 DHCP 服务器(KVM),因此会为虚拟机分配以下 IP 地址
Development: 192.168.122.45
Office: 192.168.122.46
主机的 DHCP 服务器的 IP 地址为 192.168.122.1
现在,我喜欢从我的笔记本(192.168.1.100)通过端口 5900 访问开发虚拟机,以便在该虚拟机上远程工作。
我使用了一些 iptables 规则在虚拟机所在的主机上实现此目的:
iptables -t nat -I PREROUTING -p tcp -d 192.168.1.129 --dport 5900 -j DNAT --to-destination 192.168.122.45
iptables -I FORWARD -m state -d 192.168.122.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
不幸的是我没能将 Spice 与开发虚拟机建立连接。
spice://192.168.1.129:5900
我使用以下方式编辑了我的虚拟机
virsh edit VM-Development
并配置如下:
<graphics type='spice' port='5900' autoport='no' listen='127.0.0.1' keymap='de-ch'>
<listen type='address' address='127.0.0.1'/>
在我制定 iptables 规则之后,XML 配置文件包含一个新条目:
<video>
<model type='qxiptables -t nat -I PREROUTING -p tcp -d 192.168.1.129 --dport 5900 -j DNAT --to-destination 192.168.122.45 iptables -I FORWARD -m state -d 192.168.122.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT l' ram='65536' vram='65536' vgamem='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
怎么了?我使用了几种提示,但还是无法正常工作。我还发现路由器的 5900 端口已打开。
答案1
您可以使用ssh HOST nc
以下代理:
Host *.saturnin.* *.saturnin bb-*
ProxyCommand ssh -q -A saturnin.lab.eng.brq.redhat.com nc %h %p
IdentityFile ~/.ssh/bot_rsa
User root
/etc/hosts
缺点:这需要在主机上有条目。
或者我使用 nc 和 sed 来获取本地名称/IP:
Host tbb-*
ProxyCommand ssh -q -A saturnin.lab.eng.brq.redhat.com sednc 's/^tbb-//' %h %p
IdentityFile ~/.ssh/bot_rsa
User root
Host 192.168.*.cimrman.* 192.168.*.cimrman
ProxyCommand ssh -q -A cimrman.lab.eng.brq.redhat.com sednc 's/\.cimrman.*//' %h %p
IdentityFile ~/.ssh/bot_rsa
User root
sednc 看起来像这样:
#!/bin/bash
if [[ $1 == -h || $1 == --help ]]; then
cat <<END
sednc - nc to a HOST:PORT with HOST modified by an sed command SEDEXP
USAGE: sednc SEDEXP HOST [PORT]
Example:
sednc 's/^bb-//' bb-rawhide
This is to be used with ssh to connect to a VMs inside a host. Add line like this to your .ssh/config:
Host bb-*
ProxyCommand ssh -q -A HOST sednc 's/^bb-//' %h %p
END
exit 0
fi
HOST="$2"
TRANSLATED="$(sed -e "$1" <<<"$2")"
#echo "$TRANSLATED">&2
nc "$TRANSLATED" "${3:-"22"}"
答案2
更新:
Installation of Spice client needs the following (Linux, Kubuntu)
- spice-client
- spice-vdagent
- (optional) spice-vdagent
(Windows - Works well with Windows10):
然后你需要在你的主机上打开端口:5900(不安全)、5901(安全 - 需要额外的配置)。我使用 gufw 完成了这个操作,这是一个非常简单的防火墙构建工具。此工具为 iptables 创建条目。接下来我创建了一个路由网络。为了更方便,我在 $EDITOR 环境变量之前进行了导出:
export EDITOR=nano
现在您必须知道您的网络的名称:您从虚拟机管理器获取的网络名称:
virt-viewer (sudo apt-get install virt-viewer)
在 NIC 部分下,放置了您的网络名称:在我的情况下是“默认”。现在编辑网络设置:
virsh net-edit default
更改网络设置执行以下操作:
<network>
<name>default</name>
<uuid>cc45a671-e8d8-4149-a6a5-xxxxxxxxxx</uuid>
<forward mode='route'/>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='AA:FF:DD:EE:55:77'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
如果您使用防火墙,请不要忘记打开端口 5900、5901 或同一主机上其他虚拟机的其他端口。
通过这些设置,我可以连接到我的虚拟机!
唯一尚未解决的问题是虚拟机无法使用互联网,或者就我而言无法连接到外部(只能打开端口)。
我使用防火墙规则来实现这一点:
sudo iptables -t nat -A POSTROUTING -s 192.168.122.45 -j SNAT --to-source 192.168.1.129
后来我意识到使用 gufw 我可以简单地创建一个规则来打开主机上的特定端口以获得正常运行的 Internet 和相关功能(ssh,..)。
现在我几乎高兴了 :-),但实际上我的工作还没有完成。我的系统由一个主机和 4 个虚拟机组成:我可以通过不同的端口设置(5900、5902、5904、5906)从我的笔记本电脑连接它们。问题出在显示器上。我不想在主机上安装显示器。因此我移除了 HDMI 电缆,并且... 无法再连接,因为图形窗口管理器 sddm(KDE 5)在没有连接显示器的情况下无法启动。
正在进行的进一步措施:
-- Installed a xorg dummy driver
-- Didn't help, sometimes I wasn't able to start even a shell, I made configuration changes to GRUB, to show me always a menu
to start in recovery mode, so I could delete
xorg.conf int /etc/X11 securely from a shell.
-- I used several vnc viewers/servers to get access to my
KDE windows manager
-- x11vnc, tigervnc, tightvnc
No success:
-- Installed a dummy driver for Xorg (below some links):