Skip to content


How to prevent libvirt from adding iptables rules for guest NAT networks

Libvirt by default adds some firewall rules for NAT to work, but it can be a nightmare if you have our own set of NAT/forward rules - conflicts between them are very likely. To avoid this edit /etc/libvirt/qemu/networks/default.xml and set forward mode to "open" (in my case the value here was "nat").

So, the file will look like this:

<network>
  <name>default</name>
  <uuid>4dca776c-0ca2-4826-a88a-40fcf596e888</uuid>
  <forward mode='open'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:01:22:54'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
      <host mac='52:54:00:22:33:44' name='guest01' ip='192.168.122.3'/>
    </dhcp>
  </ip>
</network>

References:

  • https://bugzilla.redhat.com/show_bug.cgi?id=846810
  • https://serverfault.com/questions/456708/how-do-i-prevent-libvirt-from-adding-iptables-rules-for-guest-nat-networks

Posted in *nix.

Tagged with .


NFS share access problem from a KVM guest

Network schema describing the case

Someday I had to increase storage for an app living inside KVM guest. Considering that this KVM server run almost out of free disk space, probably, the easiest way to achieve the goal was to use NFS to utilize the other server's storage. So, after 'yum install nfs-utils' I tried to mount a share and got the surprise:

# mount.nfs 10.3.1.1:/mnt/nfs-share /mnt/nfs-storage/
Permission denied

:/ WTF?

At the same time /var/log/messages on the NFS-server shows:

Feb  5 08:44:07 nfssrv rpc.mountd[47501]: refused mount request from 10.3.1.2 for /mnt/nfs-share (/mnt/nfs-share): illegal port 11447
Feb  5 08:44:09 nfssrv rpc.mountd[47501]: refused mount request from 10.3.1.2 for /mnt/nfs-share (/mnt/nfs-share): illegal port 30047
Feb  5 08:45:22 nfssrv rpc.mountd[47501]: refused mount request from 10.3.1.2 for /mnt/nfs-share (/mnt/nfs-share): illegal port 7666
Feb  5 08:47:00 nfssrv rpc.mountd[47501]: refused mount request from 10.3.1.2 for /mnt/nfs-share (/mnt/nfs-share): illegal port 39260
Feb  5 08:57:21 nfssrv rpc.mountd[47501]: refused mount request from 10.3.1.2 for /mnt/nfs-share (/mnt/nfs-share): illegal port 57330

Fortunately, other people also had this problem and shared their knowledge here: https://serverfault.com/questions/1123448/nfs-mouting-failing-due-to-illegal-port

As far as I understood, some NAT magic (performed by libvirt) leads to source ports for NFS-connections being greater than 1023 (and NFS-daemon doesn't like this). To fix this we need to add 'insecure' option to /etc/exports file on the NFS-server (security implications we will skip for now, we just need things to work :). So it will look like:

$ cat /etc/exports
/mnt/iso        10.3.0.0/24(ro,sync,no_root_squash,no_all_squash)
/mnt/nfs-share  10.3.1.2(rw,sync,no_root_squash,no_all_squash,insecure)

Then I run 'exportfs -r' to apply the changes and after that the mount command succeeded without issues. Happy end.

Posted in *nix.

Tagged with , .


How to setup and use OpenVPN

The next recipe works on CentOS 7 as for beginning of 2025 year.

  1. yum install openvpn easy-rsa
  2. cd /etc/openvpn
  3. /usr/share/easy-rsa/3.0.8/easyrsa init-pki
  4. /usr/share/easy-rsa/3.0.8/easyrsa build-ca nopass
  5. /usr/share/easy-rsa/3.0.8/easyrsa build-server-full server nopass
  6. /usr/share/easy-rsa/3.0.8/easyrsa build-client-full client1 nopass
  7. /usr/share/easy-rsa/3.0.8/easyrsa build-client-full client2 nopass
  8. openssl dhparam -out /etc/openvpn/server/dh.pem 2048
  9. Create config-file /etc/openvpn/server.conf:
    port 1194
    proto udp
    dev tun
    ca /etc/openvpn/server/pki/ca.crt
    cert /etc/openvpn/server/pki/issued/server.crt
    key /etc/openvpn/server/pki/private/server.key
    dh /etc/openvpn/server/dh.pem
    server 10.8.0.0 255.255.255.0
    ifconfig-pool-persist ipp.txt
    push "redirect-gateway def1"
    push "dhcp-option DNS 8.8.8.8"
    push "dhcp-option DNS 8.8.4.4"
    keepalive 10 120
    cipher AES-256-CBC
    user openvpn
    group openvpn
    persist-key
    persist-tun
    status /var/log/openvpn-server-status.log
    log-append /var/log/openvpn.log
    verb 3
  10. Create .ovpn file for client:
    client
    dev tun
    proto udp
    remote vpn-server.host.name 1194 udp
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    cipher AES-256-CBC
    verb 3
    <cert>
    -----BEGIN CERTIFICATE-----
    // client base64-encoded cert goes here
    -----END CERTIFICATE-----
    </cert>
    <key>
    -----BEGIN PRIVATE KEY-----
    // client base64-encoded private key goes here
    -----END PRIVATE KEY-----
    </key>
    <ca>
    -----BEGIN CERTIFICATE-----
    // ca base64-encoded cert goes here
    -----END CERTIFICATE-----
    </ca>

    Or, alternatively, if you don't want to embed certs and key to the .ovpn config file itself, you can reference them with these 3 lines:

    ca ca.crt
    cert client1.crt
    key client1.key
  11. Open UDP port 1194 in the server's firewall.
  12. Setup NAT and forwarding if needed.

Posted in Howto.

Tagged with .


Невеличкі зміни в ядрі Linux можуть зменшити енергоспоживання датацентрів на 30%

Вчені з Університету Ватерлоо в Канаді кажуть, що внесення невеликих змін до коду Linux, який використовується багатьма центрами обробки даних для обробки пакетів мережевого трафіку, може призвести до значного зниження споживання енергії.

Завдяки своїм дослідженням Мартін Карстен, професор інформатики на факультеті математики Університету Ватерлоо, і аспірант інформатики Пітер Кай виявили, що центри обробки даних обробляють пакети мережевого трафіку неефективно, і розробили невеликі зміни, щоб зробити його набагато ефективнішим. «Ми нічого не додавали», — сказав Карстен. «Ми просто змінили те, що робиться, коли, що призводить до набагато кращого використання кешу ЦП центру обробки даних. Це схоже на перебудову конвейєру на виробничому підприємстві, щоб люди не бігали весь час». Карстен об’єднався з Джо Дамато, провідним інженером з Fastly, яка розповсюджує контент, щоб розробити невелику частину коду – приблизно 30 рядків – для покращення обробки мережевого трафіку Linux. За словами дослідників, якщо його прийняти, новий метод може знизити енергоспоживання важливих операцій центру обробки даних на цілих 30 відсотків.

Команда перевірила ефективність свого рішення та подала його на розгляд Linux, і код був опублікований в січні 2025 як частина найновішого ядра Linux, версія 6.13.

«Усі ці великі компанії — Amazon, Google, Meta — певною мірою використовують Linux, але вони дуже вибагливі щодо того, як вони вирішують використовувати його», — сказав Карстен. «Якщо вони вирішать «увімкнути» наш метод у своїх центрах обробки даних, це може заощадити гігават-години енергії в усьому світі. Це може позитивно вплинути на майже кожен мережевий запит, який надходить в Інтернеті».

Університет Ватерлоо будує зелену комп’ютерну серверну кімнату як частину свого нового корпусу математики, і Карстен вважає, що дослідження сталого розвитку мають бути пріоритетом для комп’ютерників. «Ми всі маємо відіграти певну роль у побудові більш екологічного майбутнього», — сказав він. Linux Foundation, яка контролює розробку ОС Linux, є одним із засновників Green Software Foundation, організації, створеної для пошуку шляхів розробки «зеленого програмного забезпечення» — коду, який зменшує споживання енергії.

Джерело: https://www.datacenterdynamics.com/en/news/changing-linux-code-could-cut-data-center-energy-use-by-30-researchers-claim/

Posted in Misc.