答案1
KVM/virt-manager
似乎有一个相关的教程这里。有两个步骤,总结如下:(1)为虚拟机分配静态 IP 地址;(2)配置防火墙以进行端口转发。
为虚拟机分配静态 IP 地址。
列出可用网络
$ virsh net-list Name State Autostart Persistent ---------------------------------------------------------- xhubnet active yes yes
这将为您提供您想要的名称。
列出网络信息(
xhubnet
本例中为网络)$ virsh net-dumpxml xhubnet <network> <name>xhubnet</name> <uuid>2ba36c4f-46c9-4767-a9fc-6808cf001a19</uuid> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr1' stp='on' delay='0'/> <mac address='52:54:00:8e:b5:88'/> <domain name='xhubnet'/> <ip address='192.168.111.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.111.120' end='192.168.111.254'/> </dhcp> </ip> </network>
这会告诉您 DHCP 范围,以便您可以选择合适的地址。
获取虚拟机的 MAC 地址。
$ virsh dumpxml VM_NAME | grep -i '<mac' <mac address='52:54:00:e2:95:c6'/>
编辑网络配置以请求虚拟机的静态 IP 地址。运行
virsh net-edit <DOMAIN_NAME>
(在本例中为virsh net-edit xhubnet
),并在该部分后添加以下行<range ...>
:<host mac='52:54:00:e2:95:c6' name='VM_NAME' ip='192.168.111.36'/>
通过重启网络来请求静态IP地址:
$ virsh net-destroy xhubnet $ virsh net-start xhubnet
如果这不起作用,请尝试
libvirt-bin
在 Linux 主机上重新启动该服务:$ virsh shutdown VM_NAME $ /etc/init.d/libvirt-bin restart $ virsh start VM_NAME $ ping -a 192.168.111.36
在防火墙上配置端口转发
允许来自 WAN 的连接。在主机上,
iptables
按以下方式更改规则。假设您使用上面设置的静态 IP 地址将主机上的端口 9867 转发到 Windows 客户机上的端口 22(192.168.111.36
):# connections from outside $ iptables -I FORWARD -o virbr1 -d 192.168.111.36 -j ACCEPT $ iptables -t nat -I PREROUTING -p tcp --dport 9867 -j DNAT --to 192.168.111.36:22
伪装本地子网
# Masquerade local subnet $ iptables -I FORWARD -o virbr1 -d 192.168.111.36 -j ACCEPT $ iptables -t nat -A POSTROUTING -s 192.168.111.0/24 -j MASQUERADE $ iptables -A FORWARD -o virbr1 -m state --state RELATED,ESTABLISHED -j ACCEPT $ iptables -A FORWARD -i virbr1 -o eth0 -j ACCEPT $ iptables -A FORWARD -i virbr1 -o lo -j ACCEPT
使更改持久化
$ service netfilter-persistent save $ service netfilter-persistent reload
这应该使虚拟机上的指定端口可通过主机的公共 IP 地址使用。如果您的主机位于路由器后面并使用路由器的公共 IP,则可能需要配置路由器端口转发规则,以将流量转发到正确端口上的主机私有 IP。
还可以在 Windows VM 上的 Windows 防火墙中配置任何必要的入站流量规则。
Oracle VirtualBox
如果您使用带有 NAT 网络接口的 Oracle VirtualBox,则可以选择设置端口转发规则。
将主机 IP 设置为空白(或0.0.0.0
)以监听本地子网上所有计算机的连接,或127.0.0.1
仅接受来自同一台计算机的连接。要查找客户操作系统的私有 IP 地址,请使用ipconfig
或 之类的命令ip addr
。
您还可以设置Attached to:
为Bridged Adapter
,这样您的虚拟机就会在网络上显示为其自己的设备。然后,您可以配置客户操作系统和主机路由器的防火墙设置,以启用访问,而无需通过主机操作系统。