diff --git a/ansible/roles/network-redhat/tasks/main.yml b/ansible/roles/network-redhat/tasks/main.yml
index 754ea23333432be152ed175d0a787510137d6b12..7df70b0f7587031c901dfd0ab30f94784e910906 100644
--- a/ansible/roles/network-redhat/tasks/main.yml
+++ b/ansible/roles/network-redhat/tasks/main.yml
@@ -4,6 +4,22 @@
   when: resolv_is_managed | bool
   become: True
 
+- name: Ensure NetworkManager DNS config is present only if required
+  become: true
+  community.general.ini_file:
+    path: /etc/NetworkManager/NetworkManager.conf
+    section: main
+    option: "{{ item.option }}"
+    value: "{{ item.value }}"
+    state: "{{ 'present' if resolv_is_managed | bool else 'absent'}}"
+  loop:
+    - option: dns
+      value: none
+    - option: rc-manager
+      value: unmanaged
+  when:
+    - ansible_facts.os_family == "RedHat" and ansible_facts.distribution_major_version == "9"
+
 - name: Configure network interfaces (RedHat)
   import_role:
     name: MichaelRigart.interfaces
diff --git a/releasenotes/notes/fix-resolv-conf-management-141788e64d0e82a0.yaml b/releasenotes/notes/fix-resolv-conf-management-141788e64d0e82a0.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..102af06b20097385907593bfd65f33f94f8b851e
--- /dev/null
+++ b/releasenotes/notes/fix-resolv-conf-management-141788e64d0e82a0.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    Fixes a bug where NetworkManager would overwrite resolv.conf when
+    ``resolv_is_managed`` is set to ``True``.
+    `LP#2044537 <https://launchpad.net/bugs/2044537>`__