上下文:我已经使用 VirtualBox 在我的笔记本电脑中设置了一个演示云,并有两台虚拟机——一台有客户端,另一台作为服务器。使用服务器创建一个小实例,运行实例是 TinyLinux。
问题:我应如何将数据发送到该实例并存储在该实例中。
一些指示会非常有帮助。
上下文:我已经使用 VirtualBox 在我的笔记本电脑中设置了一个演示云,并有两台虚拟机——一台有客户端,另一台作为服务器。使用服务器创建一个小实例,运行实例是 TinyLinux。
问题:我应如何将数据发送到该实例并存储在该实例中。
一些指示会非常有帮助。
好吧,使用 libvirt,您有多种选择如何进行网络连接。默认是使用 NATing。在这种情况下,libvirt 会为每个如此配置的虚拟网卡创建一个网桥和虚拟网卡:
$ brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400512fc8 yes virbr0-nic
vnet0
然后设置 iptables 规则对此类网桥上的数据包进行 NAT(伪装)。
Chain POSTROUTING (policy ACCEPT 19309 packets, 1272K bytes)
pkts bytes target prot opt in out source destination
8 416 MASQUERADE tcp -- any any 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
216 22030 MASQUERADE udp -- any any 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
11 460 MASQUERADE all -- any any 192.168.122.0/24 !192.168.122.0/24
启用转发
# cat /proc/sys/net/ipv4/ip_forward
1
并生成 DHCP 服务器(dnsmasq
DHCP 和 DNS 合二为一)
ps aux | grep dnsmasq
nobody 1334 0.0 0.0 13144 568 ? S Feb06 0:00 \
/sbin/dnsmasq --strict-order --local=// --domain-needed \
--pid-file=... --conf-file= --except-interface lo --bind-dynamic \
--interface virbr0 --dhcp-range 192.168.122.2,192.168.122.254 \
--dhcp-leasefile=.../default.leases --dhcp-lease-max=253 --dhcp-no-override
如果我有两个虚拟网络接口(两台机器在同一网络上有一个网卡,那么该网桥中将有两个网卡。机器从dnsmasq
DHCP 服务器获取范围 192.168.122.2-254 的地址。所以如果你知道这些地址,您应该能够从一个虚拟机连接到另一个虚拟机,因为两者都在同一个广播域(通过网桥连接)。在您的计算机外部,机器都显示为“一个 IP 地址”。
更“高级”的选项是使用桥接网络,它再次将虚拟接口放入一个网桥,但它也将一些物理设备放在那里,所以机器看起来好像有几台机器连接到某个交换机......
我通常将 Web 服务器绑定到虚拟机使用的网关接口,以与物理主机进行 NAT。