Skip to main content
  1. Posts/

Create Virtual Networks in Libvirt

·5 mins·
libvirt libvirt kvm
Table of Contents

Virtual network Libvirt mengambil konsep virtual network switch. Virtual network switch merupakan software yang beroperasi pada mesin fisik host agar terhubung dengan virtual machine (guest).

Saat pertama kali menginstal libvirt, Anda akan menemukan bawaan virtual network dengan mode NAT yang bisa Anda ubah atau konfigurasikan kembali dengan beberapa mode berikut.

Bridge Mode
#

Saat menggunakan mode Bridged, semua virtual machines akan diberikan pengalamatan IP dalam subnet yang sama dengan mesin fisik host. Mode Bridge beroperasi pada layer 2 model OSI.

Network XML

<network>
  <name>net-bridge</name>
  <forward mode='bridge'>
    <interface dev="eth0"/>
    <interface dev="eth1"/>
    <interface dev="eth2"/>
  </forward>
</network>

Untuk menambahkan bridge host yang sudah dibuat dan dikonfigurasi di luar libvirt.

<network>
  <name>net-bridge</name>
  <forward mode='bridge'/>
  <bridge name='br0'/>
</network>

Untuk menggunakan Open vSwitch bridge yang telah dikonfigurasi diluar libvirt.

<network>
  <name>net-bridge</name>
  <forward mode='bridge'/>
  <bridge name='br0'/>
  <virtualport type='openvswitch'/>
</network>

NAT Mode
#

Secara default virtual network beroperasi dalam mode NAT. Mesin fisik host akan mengatur IP masquerading sehingga virtual machines dapat terhubung menggunakan alamat IP mesin fisik host untuk komunikasi ke jaringan eksternal mana pun. Namun komputer atau device lain yang ditempatkan secara eksternal tidak dapat berkomunikasi dengan virtual machines di dalam mesin fisik host.

Network XML

<network>
  <name>net-nat</name>
  <forward dev='eth0' mode='nat'>
    <interface dev='eth0'/>
  </forward>
  <bridge name='virbr0' stp='on' delay='0' macTableManager='libvirt'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.128' end='192.168.122.254'>
        <lease expiry='10' unit='minutes'/>
      </range>
    </dhcp>
  </ip>
</network>

JIka atribut dev disetel, maka aturan firewall akan membatasi mode forward ke perangkat (NIC) yang disebutkan saja.

Route Mode
#

Saat menggunakan mode Route, lalu lintas jaringan akan diteruskan ke jaringan fisik melalui perutean IP host, tetapi tanpa menerapkan NAT. Mode ini dapat menggunakan atribut dev untuk membatasi lalu lintas ke perangkat fisik (NIC) yang disetel saja.

Mode Route beroperasi pada layer 3 model OSI.

Network XML

<network>
  <name>net-route</name>
  <forward dev='eth0' mode='route'>
    <interface dev='eth0'/>
  </forward>
  <bridge name='virbr0' stp='on' delay='0' macTableManager='libvirt'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.128' end='192.168.122.254'>
        <lease expiry='10' unit='minutes'/>
      </range>
    </dhcp>
  </ip>
</network>

Isolated Mode
#

Saat menggunakan mode Isolated, komunikasi hanya bisa dilakukan antar VM pada mesin fisik host yang sama. Untuk lalu lintas dari luar mesin fisik host tidak dapat terhubung ke VM yang ada didalamnya.

Network XML

<network>
  <name>net-isolated</name>
  <bridge name='virbr0' stp='on' delay='0' macTableManager='libvirt'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.128' end='192.168.122.254'>
        <lease expiry='10' unit='minutes'/>
      </range>
    </dhcp>
  </ip>
</network>

Open Mode
#

Sama halnya dengan mode Route, mode Open membuat lalu lintas jaringan akan diteruskan pada jaringan fisik melalui perutean IP host. Yang membedakan adalah tidak ada aturan firewall yang diterapkan pada mode Open sehingga atribut dev tidak dapat diterapkan pada mode ini.

Network XML

<network>
  <name>network</name>
  <forward mode='open'/>
  <bridge name='virbr0' stp='on' delay='0' macTableManager='libvirt'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.128' end='192.168.122.254'>
        <lease expiry='10' unit='minutes'/>
      </range>
    </dhcp>
  </ip>
</network>

Private Mode
#

Network ini menggunakan koneksi “direct” macvtap dalam mode private untuk menghubungkan setiap VM ke jaringan. Interface fisik yang akan digunakan harus disetel pada subelement <interface> dari element <forward>.

Saat Anda menggunakan mode private, komunikasi antar VM tidak dapat terhubung meski masih dalam host dan subnet yang sama.

Network XML

<network>
  <name>network</name>
  <forward mode='private'>
    <interface dev="eth0"/>
  </forward>
</network>

Vepa Mode
#

Network ini menggunakan koneksi “direct” macvtap dalam mode vepa untuk menghubungkan setiap VM ke jaringan. Interface fisik yang akan digunakan harus disetel pada subelement <interface> dari element <forward>.

Semua lalu lintas pada mode vepa akan selalu dilewatkan ke hardware switch sehingga diperlukan switch khusus yang mendukung hairpin mode agar vepa dapat bekerja dengan benar.

Network XML

<network>
  <name>network</name>
  <forward mode='vepa'>
    <interface dev="eth0"/>
  </forward>
</network>

Passthrough Mode
#

Network ini menggunakan koneksi “direct” macvtap dalam mode passthrough untuk menghubungkan setiap VM ke jaringan. Mode ini tidak sama dengan PCI passthrough. Interface fisik yang akan digunakan harus disetel pada subelement <interface> dari element <forward>.

Setiap interface fisik hanya dapat digunakan oleh satu interface VM pada satu waktu, sehingga libvirt akan melacak interface mana yang sedang digunakan. Apabila sudah tidak ada interface fisik yang tersedia, maka akan muncul pesan error berikut.

error: Failed to attach interface
error: internal error: network 'network' requires exclusive access to interfaces, but none are available

Network XML

<network>
  <name>network</name>
  <forward mode='passthrough'>
    <interface dev='eth0'/>
  </forward>
</network>

Isolating ports
#

Sejak versi Libvirt 6.1.0, Anda dapat menambahkan element <port isolated> pada virtual network. Ketika element ini disetel ke yes (default adalah no) maka lalu lintas jaringan akan diisolasi sehingga komunikasi antar VM tidak dapat terhubung. Namun VM tetap dapat terhubung dengan mesin host fisik.

Isolating ports dapat diterapkan pada beberapa mode forward seperti nat, route, open, bridge, atau no forward (isolated mode).

Network XML

<network>
  <name>network</name>
  <forward mode='open'/>
  <bridge name='br1' stp='on' delay='0' macTableManager='libvirt'/>
  <port isolated='yes'/>
  <ip address='10.10.101.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='10.10.101.128' end='10.10.101.200'/>
    </dhcp>
  </ip>
</network>

Addressing
#

Berikut merupakan beberapa element tambahan yang dapat digunakan pada mode nat, route, open, atau no forward (isolated mode).

<mac address='00:16:3E:5D:C7:9E'/>
<domain name="example.com"/>
<dns>
  <txt name="example" value="example value"/>
  <forwarder addr="8.8.8.8"/>
  <forwarder domain='example.com' addr="8.8.4.4"/>
  <forwarder domain='www.example.com'/>
  <srv service='name' protocol='tcp' domain='test-domain-name' target='.'
    port='1024' priority='10' weight='10'/>
  <host ip='192.168.122.2'>
    <hostname>myhost</hostname>
    <hostname>myhostalias</hostname>
  </host>
</dns>
<ip address="192.168.122.1" netmask="255.255.255.0" localPtr="yes">
  <dhcp>
    <range start="192.168.122.100" end="192.168.122.254">
      <lease expiry='1' unit='hours'/>
    </range>
    <host mac="00:16:3e:77:e2:ed" name="foo.example.com" ip="192.168.122.10">
      <lease expiry='30' unit='minutes'/>
    </host>
    <host mac="00:16:3e:3e:a9:1a" name="bar.example.com" ip="192.168.122.11"/>
  </dhcp>
</ip>
<ip family="ipv6" address="2001:db8:ca2:2::1" prefix="64" localPtr="yes"/>
<route family="ipv6" address="2001:db9:ca1:1::" prefix="64" gateway="2001:db8:ca2:2::2"/>

Network namespaces
#

Namespace XML khusus untuk konfigurasi dnsmasq. Penggunaan namespace ini tidak disertai support dari libvirt sehingga resikonya Anda tanggung sendiri.

Contoh XML.

<network xmlns:dnsmasq='http://libvirt.org/schemas/network/dnsmasq/1.0'>
  ...
  <dnsmasq:options>
    <dnsmasq:option value='log-queries'/>
    <dnsmasq:option value='log-dhcp'/>
    <dnsmasq:option value='log-facility=/var/log/dnsmasq.log'/>
    <dnsmasq:option value='max-ttl=300'/>
    <dnsmasq:option value='clear-on-reload'/>
    <dnsmasq:option value='mx-host=example.com,mail.example.com,0'/>
  </dnsmasq:options>
</network>

Related

Install KVM and Virt-Manager
·3 mins
libvirt libvirt ubuntu kvm
Install WebVirtCloud
·2 mins
libvirt libvirt ubuntu kvm
Enable Nested Virtualization pada KVM
·1 min
libvirt kvm libvirt
Setup VM Menggunakan Virt-Manager CLI
·1 min
libvirt kvm libvirt
Cara Membuat Storage Volume di Libvirt
·2 mins
libvirt kvm libvirt
Setting VirtioFS untuk Shared Folder VM
·2 mins
libvirt kvm libvirt