Skip to the content.

Tìm hiểu về virtual network của libvirt.

1. Virtual network

1.1. Virtual network switches.

Libvirt sử dụng virtual network switch - một phần mềm xây dựng đơn giản trên một máy chủ mà các máy ảo “cắm vào” và sử dụng để giao tiếp trong mạng.

Ở trên máy chủ Linux, virtual network switch sẽ được hiển thị như là một interface. virbr0 là một virtual switch được tạo ra mặc định khi libvirt daemon được cài đặt lên host.

Ta có thể thấy interface virbr0 bằng lệnh ip adress:

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether f0:1f:af:26:21:4b brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:27:4b:55 brd ff:ff:ff:ff:ff:ff
    inet 192.168.248.1/24 brd 192.168.248.255 scope global virbr0
       valid_lft forever preferred_lft forever
$ ip addr show virbr0
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:27:4b:55 brd ff:ff:ff:ff:ff:ff
    inet 192.168.248.1/24 brd 192.168.248.255 scope global virbr0
       valid_lft forever preferred_lft forever

1.2. Network Address Translation(NAT).

Mặc định, một virtual network switch sẽ hoạt động ở chế độ NAT( sử dụng masquerading thay vì SNAT hay DNAT). Điều này có nghĩa các máy ảo kết nối đến switch ảo, sử dụng ip của máy chủ để giao tiếp với mạng bên ngoài. Các máy ở bên ngoài sẽ không thể thiết lập kết nối với các máy ở trong khi Switch ảo hoạt động ở chế độ NAT.

Kiểm tra rule trong IPtables:

$ sudo iptables -L -t nat
... 

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
RETURN     all  --  192.168.248.0/24     base-address.mcast.net/24 
RETURN     all  --  192.168.248.0/24     255.255.255.255     
MASQUERADE  tcp  --  192.168.248.0/24    !192.168.248.0/24     masq ports: 1024-65535
MASQUERADE  udp  --  192.168.248.0/24    !192.168.248.0/24     masq ports: 1024-65535
MASQUERADE  all  --  192.168.248.0/24    !192.168.248.0/24    
</pre>

1.2. DNS và DHCP.

Livirt sử dụng dnsmasq, tự động cấu hình và bật dnsmasq để làm dhcp và dns server cho mỗi virtual network switch cần nó.

1.3. Chế độ Routed

Với chế độ routed, virtual switch sẽ được kết nối đến mạng LAN vật lý của host bằng cách định tuyến các gói tin ở tầng Network(Layer 3 trong mô hình TCP/IP) cho phép giao tiếp qua lại với mạng ngoài mà không cần NAT. Mạng LAN của máy chủ có thể giao tiếp với các máy ảo nếu có cấu hình định tuyến đến mạng ảo.

Kiểm tra rule trong IPtables:

$ sudo iptables -L -v
Chain FORWARD (policy ACCEPT 64651 packets, 61M bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1371 97437 ACCEPT     all  --  eth0 virbr0  anywhere             192.168.250.0/24    
  411 33265 ACCEPT     all  --  virbr0 eth0  192.168.250.0/24     anywhere            
...

IPtables định tuyến tất cả gói tin đi đến interface eth0 và có địa chỉ đích là mạng ảo và ngược lại.

1.4.Chế độ Isolate.

Ở chế độ này, các máy ảo kết nối đến virtual switch có thể kết nối với nhau và với host nhưng không thể kết nối đến mạng ngoài của host.

2. Tạo mạng ảo với file XML.

2.1. Tổng quan về một số thành phần.

Trong file cấu hình mạng, phần tử gốc cho tất cả các mạng ảo là network

Thông tin chung

<network>
  <name>default</name>
  <uuid>b1dc362a-7daa-45e2-a306-1e4c65ae4dfd</uuid>
...
<network>

Kết nối.

...
<bridge name="virbr0" stp="on" delay="5" macTableManager="libvirt"/>
<mtu size="9000"/>
<domain name="example.com" localOnly="no"/>
<forward mode="nat" dev="eth0"/>
...

Tài liệu tham khảo: https://libvirt.org/formatnetwork.html https://wiki.libvirt.org/page/VirtualNetworking