kvm 上的路由网络

kvm 上的路由网络

Kvm 网络有很多配置。但我无法从主机或外部访问客户机。我正在使用 Ubuntu 11.04。在客户机上,我有一个带 dhcp 的 WindowsXp。

我希望来宾与主机位于同一网络中。我尝试使用 IP 别名

我已经在 /etc/network/interfaces 中设置了桥接网络

auto eth0
iface eth0 inet manual

auto eth0:1
iface eth0:1 inet static
address 192.168.0.11
netmask 255.255.255.0

auto br0
iface br0 inet static
         address 192.168.0.10
         netmask 255.255.255.0
         gateway 192.168.0.1
         bridge_ports eth0
         bridge_stp off
         bridge_fd 0
         bridge_maxwait 0

然后在 /etc/libvirtd/qemu/network/default.xml 中更改默认网络

<network>
<name>default</name>
<uuid>831a93e1-0b84-0b0e-9ca2-23c407983968</uuid>
<forward mode='route'/>
<bridge name='virbr0' stp='on' delay='0' />
 <ip address='192.168.122.1' netmask='255.255.255.0'>
  <dhcp>
    <range start='192.168.122.100' end='192.168.122.254' />
    <host mac='52:54:00:7c:df:88' name='vm' ip='192.168.122.99' />
  </dhcp>
</ip>
</network>

/etc/libvirt/qemu/vm.xml 中的网络

<interface type='network'>
  <mac address='52:54:00:7c:df:88'/>
  <source network='default'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

来自 dhcp 的访客获得正确的 ip。最终将流量从外部接口引导到内部接口并返回

sudo iptables -t nat -A PREROUTING -d 192.168.0.11 -j DNAT --to-destination 192.168.122.99

sudo iptables -t nat -A POSTROUTING -d 192.168.122.99 -j SNAT --to-source 192.168.0.11

所以最终的配置是这样的:

$> brctl show
bridge name          bridge id      STP enabled interfaces
br0             8000.0026b902076d   no      eth0
virbr0          8000.fe54007cdf88   yes     vnet0

$> route
Tabella di routing IP del kernel
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 br0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0
link-local      *               255.255.0.0     U     1000   0        0 br0
default         192.168.0.1     0.0.0.0         UG    100    0        0 br0

$> ifconfig

br0       Link encap:Ethernet  HWaddr 00:26:b9:02:07:6d  
      indirizzo inet:192.168.0.10  Bcast:192.168.0.255  Maschera:255.255.255.0

eth0      Link encap:Ethernet  HWaddr 00:26:b9:02:07:6d  
      indirizzo inet6: fe80::226:b9ff:fe02:76d/64 Scope:Link

eth0:1    Link encap:Ethernet  HWaddr 00:26:b9:02:07:6d  
      indirizzo inet:192.168.0.11  Bcast:192.168.0.255  Maschera:255.255.255.0

virbr0    Link encap:Ethernet  HWaddr fe:54:00:7c:df:88  
      indirizzo inet:192.168.122.1  Bcast:192.168.122.255  Maschera:255.255.255.0

vnet0     Link encap:Ethernet  HWaddr fe:54:00:7c:df:88  
      indirizzo inet6: fe80::fc54:ff:fe7c:df88/64 Scope:Link

出了什么问题?或者我如何设置主机之外可见的访客?

答案1

我以前遇到过这个问题。但似乎没有办法在别名接口上设置桥接,例如eth0:1。使用真实接口eth0

auto eth0
iface eth0 inet static

auto br0
iface br0 inet static
     bridge_ports eth0
     address 192.168.0.10
     netmask 255.255.255.0
     gateway 192.168.0.1
     broadcast 192.168.0.255
     bridge_stp off
     bridge_fd 0
     bridge_maxwait 0

此外,地址网络掩码网关播送值是接口应具有的最低配置。使用较少的值可能有效,但可能会导致网络行为异常。

我记得,你根本不需要编辑 default.xml。你只需要确保每个 KVM Guest 都有符合你需求的网络接口设置。

<interface type='bridge'>
  <mac address='00:01:b4:02:00:db'/> # change per guest
  <source bridge='br0'/>             # the name of your source bridge
  <target dev='vnet0'/>              # the name, the network interface has for the guest
</interface>

设置太复杂,无法涵盖所有​​种类,例如 DHCP 与静态设置。你检查过吗有关 KVM 的 Ubuntu 文档? 对我进入这个领域帮助很大。

答案2

为什么不简单地将客户机设置为使用 br0?您可以使用“网桥”配置它,而不是使用“网络”配置它,并将虚拟机连接到 br0。示例:

<interface type='bridge'>
<source bridge='br0'/>
<mac address='00:16:3e:1a:b3:4a'/>
</interface>

这样,客人就会从外网获得一个IP,并可以通过它联系工作和主人。

笔记: 但是,使用桥接的缺点是您看不到连接到虚拟机的客户端 IP 地址。相反,桥接主机的 IP 地址将记录在 Linux 虚拟机上的 apache、auth.log 等中,Windows 虚拟机也是如此。

答案3

请将我的回答视为对@ansi_lumen 回答的一个小补充。

如果您希望虚拟机看到的网络与 KVM 主机看到的网络完全相同,则必须先配置网络,而无需考虑 KVM。应使用桥接模式,与标准使用相比,它不会对您的服务器产生任何负面影响。

因此,如果您的主机上有网络接口enp1s0,则应重置其设置。Ubuntu 示例在 /etc/netplan/01-netcfg.yaml 中:

  ethernets:
    enp1s0:
      dhcp4: no 
      dhcp6: no 

现在您将设置移动到bridges阻止并指向您的真实界面:

  bridges:
    br0:
      dhcp4: no
      dhcp6: no
      interfaces: [enp1s0]
      addresses: [192.168.1.239/24]
      gateway4: 192.168.2.1
      nameservers:
        addresses: [8.8.8.8]
      parameters:
        stp: true
        forward-delay: 4

如果没有出现错误,预计网络会出现短暂的中断:

sudo netplan generate 
sudo netplan --debug apply; sleep 30; echo 'press CTRL+C, network is working'; sleep 300; sudo ifconfig enp1s0 192.168.1.239 up; sudo ip route add default via 192.168.1.2 dev enp1s0

现在在 KVM 中应用此网络配置:

<network>
  <name>host-bridge</name>
  <forward mode="bridge"/>
  <bridge name="br0"/>
</network>

或者如果您正在使用 terraform-provider-libvirt,那么在libvirt_domain资源中:

  network_interface {
    bridge = "br0"
    mac    = "00:00:00:00:00:01"
  }

您不需要触碰 KVM 中的任何其他东西。

参考资料:

https://fabianlee.org/2019/04/01/kvm-creating-a-bridged-network-with-netplan-on-ubuntu-bionic/

相关内容