Jump to content

Networkmanager (العربية)

From ArchWiki
ملاحظة ترجمت هذه الصفحة بتصرف من المقالة اﻷصلية باللغة الإنجليزية.

NetworkManager هو برنامج يوفر الكشف عن الشبكات وإعداد الاتصالات تلقائيًا.

يُفيد NetworkManager في الشبكات اللاسلكية والسلكية على حدٍّ سواء. في الشبكات اللاسلكية، يُفضّل NetworkManager الشبكات المعروفة مسبقًا، وبإمكانه التحويل إلى الشبكة الأكثر استقرارًا. يمكن للتطبيقات المدركة لـ NetworkManager التبديل بين وضعَي الاتصال وانقطاعه.

كما يُفضّل NetworkManager الاتصالات السلكية على اللاسلكية، ويدعم اتصالات المودم وأنواعًا معينة من الشبكات الافتراضية الخاصة (VPN).

تحذير افتراضيًا، تكون كلمات السر — كلمات مرور Wi-Fi مثلًا — متاحةً للمستخدم الجذر (root) في نظام الملفات، وكذلك للمستخدمين الذين يمكنهم الوصول إلى الإعدادات عبر الواجهات الرسومية. (كمثال #nm-applet). لمزيدٍ من المعلومات, تفقد #Encrypted Wi-Fi passwords.

التثبيت

يمكن تثبيت NetworkManager عبر الحزمة networkmanager، التي تحتوي على خادم خلفي، وواجهة سطر أوامر (nmcli)، وواجهة نصية قائمة على curses (nmtui).

تفعيل NetworkManager

بعد التثبيت، يجب تشغيل وتفعيل NetworkManager.service. بمجرد تشغيل الخادم الخلفي لـ NetworkManager، سيتصل تلقائيًا بأي "اتصالات نظام" متاحة تم إعدادها مسبقًا. أما "اتصالات المستخدم" أو الاتصالات غير المُعدَّة فتتطلب استخدام nmcli أو أبلت للإعداد والاتصال.

ملاحظة

واجهات إضافية

دعم النطاق العريض المحمول

يستخدم NetworkManager برنامج ModemManager لدعم اتصالات النطاق العريض المحمول. ثبِّت modemmanager وusb_modeswitch، ثم فعِّل ModemManager.service وشغِّله.

قد يكون من الضروري إعادة تشغيل NetworkManager.service لكي يتعرف على ModemManager. بعد إعادة التشغيل، أعد توصيل المودم وسيتم التعرف عليه.

أضف الاتصالات من واجهة أمامية (مثل nm-connection-editor) واختر النطاق العريض المحمول نوعًا للاتصال. بعد اختيار مزود الخدمة (ISP) وخطة الاشتراك، ينبغي أن تُملَأ إعدادات APN وغيرها تلقائيًا باستخدام معلومات من mobile-broadband-provider-info.

دعم PPPoE / DSL

ثبِّت حزمة ppp للحصول على دعم اتصالات PPPoE / DSL. لإضافة اتصال PPPoE فعليًا، استخدم nm-connection-editor وأضف اتصال DSL/PPPoE جديدًا.

دعم VPN

يتوفر في NetworkManager منذ الإصدار 1.16 دعم أصيل لـ WireGuard، ولا يحتاج إلا إلى وحدة النواة wireguard. اطلع على مقالة مدونة WireGuard في NetworkManager للتفاصيل.

يعتمد دعم أنواع VPN الأخرى على نظام الإضافات، وهي متوفرة في الحزم التالية:

تحذير ثمة أخطاء كثيرة مرتبطة بدعم VPN. تحقق من صحة خيارات الخادم الخلفي المُعيَّنة عبر الواجهة الرسومية، وأعد التحقق مع كل إصدار جديد من الحزمة.
ملاحظة
  • لضمان عمل DNS بشكل صحيح عند استخدام VPN، يجب إعداد التوجيه الشرطي.
  • قد لا تمتلك هذه الإضافات واجهة سطر أوامر موثقة، أو قد لا تعمل أصلًا بدون تشغيل أبلت. لا يُشكّل هذا مشكلة في بيئات سطح المكتب المعتادة؛ أما إن لم تكن تستخدم إحداها، فيجب تشغيل #nm-applet أثناء إعداد الاتصال أو تنشيطه لتظهر مربعات الحوار اللازمة. [١]

الاستخدام

يأتي NetworkManager مع nmcli(1) وnmtui(1).

أمثلة على nmcli

عرض شبكات Wi-Fi القريبة:

$ nmcli device wifi list

الاتصال بشبكة Wi-Fi:

$ nmcli device wifi connect SSID_or_BSSID password password

الاتصال بشبكة Wi-Fi مخفية:

$ nmcli device wifi connect SSID_or_BSSID password password hidden yes

الاتصال بشبكة Wi-Fi عبر الواجهة wlan1:

$ nmcli device wifi connect SSID_or_BSSID password password ifname wlan1 profile_name

قطع الاتصال بواجهة شبكة:

$ nmcli device disconnect ifname eth0

الحصول على قائمة الاتصالات مع أسمائها ومعرّفاتها UUID وأنواعها والأجهزة المرتبطة بها:

$ nmcli connection show

تنشيط اتصال (أي الاتصال بشبكة باستخدام ملف تعريف موجود):

$ nmcli connection up name_or_uuid

حذف اتصال:

$ nmcli connection delete name_or_uuid

عرض قائمة أجهزة الشبكة وحالتها:

$ nmcli device

إيقاف تشغيل Wi-Fi:

$ nmcli radio wifi off

تعديل اتصال

للاطلاع على قائمة شاملة بالإعدادات، راجع nm-settings(5).

أولًا، احصل على قائمة الاتصالات:

$ nmcli connection
NAME                UUID                                  TYPE      DEVICE
Wired connection 2  e7054040-a421-3bef-965d-bb7d60b7cecf  ethernet  enp5s0
Wired connection 1  997f2782-f0fc-301d-bfba-15421a2735d8  ethernet  enp0s25
MY-HOME-WIFI-5G     92a0f7b3-2eba-49ab-a899-24d83978f308  wifi       --

يمكن استخدام العمود الأول كمعرّف للاتصال (connection-id) في الأوامر اللاحقة. في هذا المثال، نختار Wired connection 2 معرّفًا للاتصال.

ثمة ثلاث طرق لإعداد الاتصال Wired connection 2 بعد إنشائه:

محرر nmcli التفاعلي
nmcli connection edit 'Wired connection 2'.
الاستخدام موثق بشكل جيد داخل المحرر.
واجهة سطر أوامر nmcli
nmcli connection modify 'Wired connection 2' setting.property value. راجع nmcli(1) للاستخدام. على سبيل المثال، يمكن تغيير مقياس مسار IPv4 إلى 200 باستخدام الأمر nmcli connection modify 'Wired connection 2' ipv4.route-metric 200.

لإزالة إعداد ما، مرر حقلًا فارغًا ("") كما يلي:

nmcli connection modify 'Wired connection 2' setting.property ""
ملف الاتصال
في /etc/NetworkManager/system-connections/، عدِّل ملف Wired connection 2.nmconnection المقابل.
لا تنسَ إعادة تحميل ملف الإعداد باستخدام nmcli connection reload.

nmtui

يتضمن NetworkManager واجهة مستخدم نصية (TUI) لإدارة الاتصالات واسم المضيف ومفاتيح الراديو. يمكن تشغيلها بتنفيذ nmtui.

الواجهات الأمامية

لتوفير التكامل مع بيئة سطح المكتب، سيرغب معظم المستخدمين في تثبيت أبلت. لا يوفر هذا الأبلت سهولة في اختيار الشبكات وإعدادها فحسب، بل يوفر أيضًا الوكيل الضروري لتخزين كلمات السر بأمان. تمتلك بيئات سطح المكتب المختلفة أبلتاتها الخاصة؛ وإلا يمكنك استخدام #nm-applet.

GNOME

تمتلك GNOME أداةً مدمجة يمكن الوصول إليها من إعدادات الشبكة.

KDE Plasma

ثبِّت حزمة plasma-nm. بعد ذلك، أضفها إلى شريط مهام KDE عبر قائمة خيارات اللوحة > إضافة أدوات > الشبكات.

nm-applet

network-manager-applet هو واجهة أمامية بـ GTK 3 تعمل في بيئات Xorg التي تدعم صينية النظام systray.

لتخزين كلمات سر الاتصالات، ثبِّت تطبيقًا يُطبِّق واجهة D-Bus الخاصة بخدمة Secret Service مثل GNOME/Keyring أو KDE Wallet أو KeePassXC وأعد إعداده.

انتبه إلى أنه عند تفعيل خيار Make available to other users لاتصال ما، يخزّن NetworkManager كلمة المرور بنص عادي، وإن كان الملف المقابل لا يمكن الوصول إليه إلا من قِبل الجذر (أو مستخدمين آخرين عبر nm-applet). راجع #Encrypted Wi-Fi passwords.

لتشغيل nm-applet بدون صينية نظام، يمكن استخدام trayerAUR أو stalonetray. على سبيل المثال، يمكن إضافة سكريبت كهذا في مسارك:

nmgui
#!/bin/sh
nm-applet    2>&1 > /dev/null &
stalonetray  2>&1 > /dev/null
killall nm-applet

عند إغلاق نافذة stalonetray، يُغلَق nm-applet أيضًا، فلا يُستهلك ذاكرة إضافية بعد الانتهاء من إعدادات الشبكة.

يمكن للأبلت عرض إشعارات للأحداث كالاتصال بشبكة Wi-Fi أو قطع الاتصال عنها. لعرض هذه الإشعارات، تأكد من وجود خادم إشعارات مثبت - راجع Desktop notifications. إن استخدمت الأبلت بدون خادم إشعارات، قد تظهر بعض الرسائل في stdout/stderr وقد يتوقف الأبلت. راجع [٢].

لتشغيل nm-applet مع تعطيل الإشعارات، شغّل الأبلت بالأمر التالي:

$ nm-applet --no-agent
Tip قد يُشغَّل nm-applet تلقائيًا عبر ملف autostart؛ لإضافة الخيار --no-agent، عدِّل سطر Exec فيه كما يلي:
Exec=nm-applet --no-agent
Warning في i3، إن شُغِّل nm-applet بالخيار --no-agent، لن يكون بالإمكان الاتصال بشبكة Wi-Fi مشفرة جديدة بالنقر على العنصر في القائمة، إذ لن تظهر نافذة إدخال كلمة المرور. سيُظهر journal الرسالة no secrets: No agents were available for this request.

Appindicator

اعتبارًا من الإصدار 1.18.0، أصبح دعم Appindicator متاحًا في حزمة network-manager-applet الرسمية. لاستخدام nm-applet في بيئة Appindicator، شغّل الأبلت بالأمر التالي:

$ nm-applet --indicator

networkmanager-dmenu

بديلًا لذلك، تتوفر networkmanager-dmenu وهي سكريبت صغير لإدارة اتصالات NetworkManager باستخدام dmenu أو rofi بدلًا من nm-applet. توفر جميع الميزات الأساسية: الاتصال بالشبكات السلكية واللاسلكية الموجودة، والاتصال بشبكات Wi-Fi جديدة، وطلب عبارة المرور عند الحاجة، والاتصال بشبكات VPN موجودة، وتفعيل/تعطيل الشبكة، وتشغيل واجهة nm-connection-editor الرسومية، والاتصال بشبكات Bluetooth.

switchboard

يوفر switchboard الخاص بـ Pantheon طريقة مستقلة عن بيئة سطح المكتب لإعداد NetworkManager عند دمجه مع switchboard-plug-network وnm-connection-editor. يمكن تشغيله بالأمر التالي:

$ io.elementary.settings

الإعداد

قد يحتاج NetworkManager إلى بعض الخطوات الإضافية ليعمل بشكل صحيح. تأكد من إعداد /etc/hosts كما هو موضح في قسم Network configuration#Set the hostname.

يمتلك NetworkManager ملف إعداد عام في /etc/NetworkManager/NetworkManager.conf. يمكن وضع ملفات إعداد إضافية في /etc/NetworkManager/conf.d/. في العادة، لا يلزم تغيير الإعدادات الافتراضية العامة.

بعد تعديل ملف إعداد، يمكن تطبيق التغييرات بتنفيذ:

# nmcli general reload

NetworkManager-wait-online

يؤدي تفعيل NetworkManager.service إلى تفعيل NetworkManager-wait-online.service أيضًا، وهي خدمة نظام تُنفَّذ مرة واحدة وتنتظر اكتمال إعداد الشبكة. تمتلك هذه الأخيرة WantedBy=network-online.target، لذا لن تكتمل إلا عند تفعيل network-online.target أو استدعائه من وحدة أخرى. راجع أيضًا systemd#Running services after the network is up.

افتراضيًا، تنتظر NetworkManager-wait-online.service اكتمال بدء تشغيل NetworkManager، لا توافر الاتصال بالشبكة تحديدًا (راجع nm-online(1)). إن أكملت NetworkManager-wait-online.service قبل أن تكون الشبكة جاهزة فعليًا مما أدى إلى فشل خدمات عند الإقلاع، وسِّع الوحدة لإزالة -s من سطر ExecStart:

[Service]
ExecStart=
ExecStart=/usr/bin/nm-online -q

انتبه إلى أن هذا قد يسبب مشكلات أخرى.

في بعض الحالات، ستفشل الخدمة في الإقلاع بسبب قِصَر مهلة الانتظار. عدِّل الخدمة لزيادة قيمة NM_ONLINE_TIMEOUT عن 60.

إعداد صلاحيات PolicyKit

افتراضيًا، يُسمح لجميع المستخدمين في الجلسات المحلية النشطة بتغيير معظم إعدادات الشبكة دون كلمة مرور. راجع General troubleshooting#Session permissions للتحقق من نوع جلستك. في معظم الحالات، يعمل كل شيء تلقائيًا.

بعض الإجراءات (كتغيير اسم المضيف) تتطلب كلمة مرور المسؤول. في هذه الحالة، يجب إضافة نفسك إلى مجموعة wheel وتشغيل وكيل مصادقة Polkit الذي سيطلب كلمة مرورك.

للجلسات البعيدة (مثل VNC بلا شاشة)، ثمة عدة خيارات للحصول على الصلاحيات اللازمة لاستخدام NetworkManager:

  1. أضف نفسك إلى مجموعة wheel. ستحتاج إلى إدخال كلمة مرورك عند كل إجراء. لاحظ أن حسابك قد يُمنح صلاحيات أخرى أيضًا، كاستخدام sudo دون إدخال كلمة مرور الجذر.
  2. أضف نفسك إلى مجموعة network وأنشئ /etc/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules بالمحتوى التالي:
    polkit.addRule(function(action, subject) {
      if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("network")) {
        return polkit.Result.YES;
      }
    });
    
    سيتمكن جميع المستخدمين في مجموعة network من إضافة الشبكات وإزالتها دون كلمة مرور (مما يعني عدم الحاجة إلى تشغيل وكيل مصادقة Polkit، فيعمل هذا الخيار في جلسات SSH أيضًا).

إعدادات الوكيل

يدعم NetworkManager بعض إعدادات الوكيل. وبينما لا يمكن تعديلها مباشرة عبر nmtui، يدعمها كل من nm-applet وnmcli. راجع إعدادات الوكيل في nm-settings-nmcli(5).

يمكن دائمًا تشغيل أوامر وكيل مخصصة باستخدام سكريبتات الموزِّع، راجع #Dispatcher examples.

راجع أيضًا Proxy settings.

فحص الاتصال

يمكن لـ NetworkManager محاولة الوصول إلى خادم ويب بعد الاتصال بشبكة لتحديد ما إذا كان خلف بوابة مقيّدة مثلًا. المضيف الافتراضي (المُعدَّ في /usr/lib/NetworkManager/conf.d/20-connectivity.conf) هو ping.archlinux.org (اسم CNAME مستعار لـ redirect.archlinux.org). لاستخدام خادم ويب مختلف أو تعطيل فحص الاتصال، أنشئ /etc/NetworkManager/conf.d/20-connectivity.conf، راجع NetworkManager.conf(5) § CONNECTIVITY SECTION. فيما يلي مثال على استخدام خوادم GNOME (لا يتطلب استخدام GNOME):

/etc/NetworkManager/conf.d/20-connectivity.conf
[connectivity]
uri=http://nmcheck.gnome.org/check_network_status.txt

لتعطيل فحص الاتصال في NetworkManager، استخدم الإعداد التالي. قد يكون هذا مفيدًا عند الاتصال بـ VPN يحجب فحوصات الاتصال.

/etc/NetworkManager/conf.d/20-connectivity.conf
[connectivity]
enabled=false
Note على الرغم من أن فحوصات الاتصال التلقائية تُشكّل تسربًا محتملًا للخصوصية، فإن عنوان URL الافتراضي لـ Arch Linux لا يسجّل أي وصول. راجع [٣] [٤].

البوابات المقيّدة

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Reason: Complex scripts should not be maintained on the wiki. (Discuss in Talk:Networkmanager (العربية))

بالنسبة للمستخدمين خلف بوابة مقيّدة، قد يفتح مدير سطح المكتب نافذةً تلقائيًا تطلب بيانات الاعتماد. إن لم يفعل ذلك، يمكنك استخدام حزمة capnet-assist (إلا أن سكريبت الموزِّع الخاص بها مكسور حاليًا). بدلًا من ذلك، يمكنك إنشاء سكريبت موزِّع لـ NetworkManager بالمحتوى التالي:

/etc/NetworkManager/dispatcher.d/90-open_captive_portal
#!/bin/sh -e
# Script to dispatch NetworkManager events
#
# Runs shows a login webpage on walled garden networks.
# See NetworkManager(8) for further documentation of the dispatcher events.

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

if [ -x "/usr/bin/logger" ]; then
    logger="/usr/bin/logger -s -t captive-portal"
else
    logger=":"
fi

wait_for_process() {
    PNAME=$1
    while [ -z "$(/usr/bin/pgrep $PNAME)" ]; do
        sleep 3;
    done
}

start_browser() {
    local user="$1"
    local display="$2"

    export DISPLAY="$display"
    wait_for_process nm-applet

    export XAUTHORITY="/home/$user/.Xauthority"

    $logger "Running browser as '$user' with display '$display' to login in captive portal"
    sudo -u "$user" --preserve-env=DISPLAY,XAUTHORITY -H xdg-open http://capnet.elementary.io 2>&1 > /dev/null
}

case "$2" in
    connectivity-change)
    $logger -p user.debug "dispatcher script triggered on connectivity change: $CONNECTIVITY_STATE"
    if [ "$CONNECTIVITY_STATE" = "PORTAL" ]; then
        who | awk '$NF ~ /\(:[0-9]+\)/ { print $1 " " substr($NF, 2, length($NF)-2) };' | \
        while read user display; do
            start_browser $user $display || $logger -p user.err "Failed for user: '$user' display: '$display'"
        done
    fi
    ;;
    *)
    exit 0
    ;;
esac

اجعل السكريبت قابلًا للتنفيذ. لاحظ أن هذا السكريبت يفترض استخدامك لـ X ويفتح صفحة http فحسب، وقد لا يعمل مع الجميع.

ستحتاج إلى إعادة تشغيل NetworkManager.service أو إعادة الإقلاع لبدء عمل السكريبت. بعد ذلك، سيفتح سكريبت الموزِّع نافذة تسجيل الدخول عند اكتشاف وجودك خلف بوابة مقيّدة.

حل بسيط هو captive-portal-sh — سكريبت shell يحصل على عنوان URL للبوابة المقيّدة ويفتحه في متصفحك الافتراضي (لمستخدمي Wayland فقط).

حل آخر هو captive-browser-gitAUR المعتمد على Google Chrome.

دعم iwd للبوابات المقيّدة على الأجهزة القديمة

بعض شرائح Wi-Fi القديمة (كـ Broadcom BCM4360) تتطلب مشغّل wl الخاص، الذي يفتقر إلى دعم مصافحة OWE/المنحنى الإهليجي التي تستخدمها كثير من نقاط الاتصال ذات البوابة المقيّدة. بتبديل خلفية Wi-Fi في NetworkManager إلى iwd (راجع #Using iwd as the Wi-Fi backend)، الذي يُطبِّق تبادل مفاتيح OWE الكامل في مستوى المستخدم عبر المشغّل الحالي، يمكنك إتمام الارتباط المشفر والحصول على تأجير DHCP وتفعيل حالة "PORTAL". بعد ذلك، سيفتح أي سكريبت موزِّع أو مشغّل متصفح صفحة تسجيل الدخول بشكل موثوق على الأجهزة التي لم تكن قادرة على الاتصال من قبل.

عميل DHCP

يستخدم NetworkManager افتراضيًا عميل DHCP الداخلي. يعتمد مكوّن DHCPv4 الداخلي على مكتبة n-dhcp4 من nettools، بينما يعتمد مكوّن DHCPv6 الداخلي على كود مشتق من systemd-networkd.

لاستخدام عميل DHCP مختلف، ثبِّت أحد البدائل:

لتغيير خلفية عميل DHCP، عيِّن الخيار main.dhcp=dhcp_client_name في ملف إعداد ضمن /etc/NetworkManager/conf.d/. مثلًا:

/etc/NetworkManager/conf.d/dhcp-client.conf
[main]
dhcp=dhcpcd
Note

لا تُفعِّل وحدات systemd المرفقة مع حزمتَي dhclient وdhcpcd. ستتعارض مع NetworkManager، راجع الملاحظة في قسم التثبيت للتفاصيل.

إدارة DNS

إدارة DNS في NetworkManager موصوفة في صفحة ويكي مشروع GNOME—Projects/NetworkManager/DNS.

تخزين DNS مؤقتًا والتوجيه الشرطي

يمتلك NetworkManager مكوّنًا لتفعيل تخزين DNS مؤقتًا والتوجيه الشرطي (كان يُسمى سابقًا "split DNS" في توثيق NetworkManager) باستخدام dnsmasq أو systemd-resolved. تتمثل مزايا هذا الإعداد في تخزين استعلامات DNS مؤقتًا مما يُقلّل أوقات الحل، وتوجيه استعلامات DNS لمضيفي VPN إلى خوادم DNS الخاصة بذلك VPN. هذا مفيد بشكل خاص إن كنت متصلًا بأكثر من شبكة VPN واحدة.

Note إن كان /etc/resolv.conf رابطًا رمزيًا إلى /run/systemd/resolve/stub-resolv.conf أو /run/systemd/resolve/resolv.conf أو /lib/systemd/resolv.conf أو /usr/lib/systemd/resolv.conf، سيختار NetworkManager systemd-resolved تلقائيًا. لاستخدام dnsmasq، يجب أولًا إزالة هذا الرابط الرمزي ثم إعادة تشغيل NetworkManager.
dnsmasq

تأكد من تثبيت dnsmasq. ثم عيِّن main.dns=dnsmasq في ملف إعداد ضمن /etc/NetworkManager/conf.d/:

/etc/NetworkManager/conf.d/dns.conf
[main]
dns=dnsmasq

الآن نفِّذ nmcli general reload كجذر. سيُشغِّل NetworkManager dnsmasq تلقائيًا ويضيف 127.0.0.1 إلى /etc/resolv.conf. يمكن إيجاد خوادم DNS الأصلية في /run/NetworkManager/no-stub-resolv.conf. يمكنك التحقق من استخدام dnsmasq بإجراء نفس استعلام DNS مرتين عبر drill example.com والتحقق من الخادم وأوقات الاستعلام.

Note
  • لا تحتاج إلى تشغيل dnsmasq.service أو تعديل /etc/dnsmasq.conf. سيشغّل NetworkManager dnsmasq دون استخدام خدمة systemd ودون قراءة ملفات الإعداد الافتراضية لـ dnsmasq.
  • ستستمع نسخة dnsmasq التي يشغّلها NetworkManager على 127.0.0.1:53، ولا يمكن تشغيل أي برنامج آخر (بما في ذلك dnsmasq.service) على نفس العنوان والمنفذ.
إعداد dnsmasq مخصص

يمكن إنشاء إعدادات مخصصة لـ dnsmasq بإنشاء ملفات إعداد في /etc/NetworkManager/dnsmasq.d/. على سبيل المثال، لتغيير حجم ذاكرة التخزين المؤقت لـ DNS (المخزّنة في الذاكرة):

/etc/NetworkManager/dnsmasq.d/cache.conf
cache-size=1000

يمكن التحقق من صحة ملف الإعداد بـ:

$ dnsmasq --test --conf-file=/dev/null --conf-dir=/etc/NetworkManager/dnsmasq.d

راجع dnsmasq(8) لجميع الخيارات المتاحة.

IPv6

The factual accuracy of this article or section is disputed.

Reason: This does not solve the issue because NetworkManager does not add ::1 to /etc/resolv.conf. Unless @::1 is manually passed to drill, it will still fail with Error: error sending query: No (valid) nameservers defined in the resolver. (Discuss in Talk:Networkmanager (العربية))

قد يتسبب تفعيل dnsmasq في NetworkManager في تعطّل استعلامات DNS الخاصة بـ IPv6 فقط (أي drill -6 [hostname]). لحل هذه المشكلة، يُعدُّ إنشاء الملف التالي لإعداد dnsmasq للاستماع على حلقة IPv6 الداخلية:

/etc/NetworkManager/dnsmasq.d/ipv6-listen.conf
listen-address=::1

علاوة على ذلك، لا يُعطي dnsmasq الأولوية لخوادم DNS الخاصة بـ IPv6. للأسف لا يعالج NetworkManager هذا (خطأ Ubuntu). حل مؤقت هو تعطيل DNS الخاص بـ IPv4 في إعداد NetworkManager إن وُجد.

DNSSEC

لن تتحقق نسخة dnsmasq التي يشغّلها NetworkManager من صحة DNSSEC افتراضيًا. لتفعيل التحقق من DNSSEC مما قد يُعطِّل حل DNS مع خوادم أسماء لا تدعمه، أنشئ ملف الإعداد التالي:

/etc/NetworkManager/dnsmasq.d/dnssec.conf
conf-file=/usr/share/dnsmasq/trust-anchors.conf
dnssec
systemd-resolved

This article or section needs expansion.

Reason: NetworkManager 1.16 adds a new setting main.systemd-resolved[٥] (enabled by default). It unconditionally sends DNS configuration to systemd-resolved. Related to "Preserving resolv.conf" from systemd-resolved#DNS? (Discuss in Talk:Networkmanager (العربية))

يمكن لـ NetworkManager استخدام systemd-resolved كمحلِّل DNS وذاكرة تخزين مؤقت. تأكد من إعداد systemd-resolved بشكل صحيح وأن systemd-resolved.service مُشغَّل قبل استخدامه.

سيُستخدم systemd-resolved تلقائيًا إن كان /etc/resolv.conf رابطًا رمزيًا إلى /run/systemd/resolve/stub-resolv.conf أو /run/systemd/resolve/resolv.conf أو /usr/lib/systemd/resolv.conf.

يمكن تفعيله صراحةً بتعيين main.dns=systemd-resolved في ملف إعداد ضمن /etc/NetworkManager/conf.d/:

/etc/NetworkManager/conf.d/dns.conf
[main]
dns=systemd-resolved
محلِّل DNS مع مشترك openresolv

إن امتلك openresolv مشتركًا لـ محلِّل DNS المحلي، أعدَّ المشترك وإعداد NetworkManager لاستخدام openresolv.

نظرًا لأن NetworkManager يُعلن عن "واجهة" واحدة فقط لـ resolvconf، لا يمكن تطبيق التوجيه الشرطي بين اتصالين في NetworkManager. راجع مشكلة NetworkManager 153.

يمكن تخفيف هذا جزئيًا بتعيين private_interfaces="*" في /etc/resolvconf.conf[٦]. لن تُوجَّه الاستعلامات الخاصة بالنطاقات غير الموجودة في قائمة نطاقات البحث، وستُعالَج وفق إعداد المحلِّل المحلي.

خوادم DNS مخصصة

تعيين خوادم DNS عامة مخصصة

لتعيين خوادم DNS لجميع الاتصالات، حدِّدها في NetworkManager.conf(5) باستخدام الصيغة servers=serveripaddress1,serveripaddress2,serveripaddress3 في قسم يُسمى [global-dns-domain-*]. مثلًا:

/etc/NetworkManager/conf.d/dns-servers.conf
[global-dns-domain-*]
servers=::1,127.0.0.1
Note
تعيين خوادم DNS مخصصة في اتصال
تعيين خوادم DNS مخصصة في اتصال (واجهة رسومية)

يعتمد الإعداد على نوع الواجهة الأمامية المستخدمة؛ تتضمن العملية عادةً النقر بالزر الأيمن على الأبلت، وتعديل (أو إنشاء) ملف تعريف، ثم اختيار نوع DHCP كـ تلقائي (تحديد عناوين). ستحتاج إلى إدخال عناوين DNS وتأخذ في العادة هذا الشكل: 127.0.0.1, DNS-server-one, ....

تعيين خوادم DNS مخصصة في اتصال (nmcli / ملف الاتصال)

لتعيين خوادم DNS لاتصال معين، عدِّل إعدادي ipv4.dns وipv6.dns (وما يرتبط بهما من dns-search وdns-options) في إعدادات الاتصال.

إن كان method مضبوطًا على auto (عند استخدام DHCP/RA)، يجب تعيين ignore-auto-dns على yes.

لاستخدام DNS عبر TLS (يتطلب systemd-resolved)، حدِّد خوادم DNS باستخدام الصيغة dns=ip.address#servername; وعيِّن إعداد connection.dns-over-tls على 2. على سبيل المثال، لاستخدام Quad9:

/etc/NetworkManager/system-connections/Example Wi-Fi.nmconnection
...
[connection]
...
dns-over-tls=2

[ipv4]
...
dns=9.9.9.9#dns.quad9.net;149.112.112.112#dns.quad9.net;
ignore-auto-dns=true

[ipv6]
...
dns=2620:fe::fe#dns.quad9.net;2620:fe::9#dns.quad9.net;
ignore-auto-dns=true
Note يستخدم هذا المثال Quad9. استبدله بمحلِّل DNS تثق به. راجع Domain name resolution#Third-party DNS services.

/etc/resolv.conf

يُعدَّل وضع إدارة /etc/resolv.conf في NetworkManager بالإعداد main.rc-manager. تضبطه حزمة networkmanager على symlink بدلًا من الافتراضي الأصلي auto. الإعداد وقيمه موثقة في صفحة الدليل NetworkManager.conf(5).

Tip يتيح استخدام openresolv لـ NetworkManager التعايش مع برامج أخرى تدعم resolvconf، أو تشغيل محلِّل DNS محلي مع ذاكرة تخزين مؤقت وتوجيه شرطي تدعمه openresolv عبر مشترك. لاحظ أن التوجيه الشرطي غير مدعوم بالكامل بعد عند استخدام NetworkManager مع openresolv.

يوفر NetworkManager أيضًا خطّافات عبر سكريبتات الموزِّع لتعديل /etc/resolv.conf بعد تغييرات الشبكة. راجع #Network services with NetworkManager dispatcher وNetworkManager(8) لمزيد من المعلومات.

Note
  • إن كان NetworkManager مُعدًّا لاستخدام dnsmasq أو systemd-resolved، ستُكتب عناوين حلقة الاسترداد المناسبة في /etc/resolv.conf.
  • يمكن إيجاد ملف resolv.conf الذي يكتبه NetworkManager أو سيكتبه في /run/NetworkManager/resolv.conf.
  • يمكن إيجاد ملف resolv.conf المحتوي على خوادم الأسماء ونطاقات البحث المكتسبة في /run/NetworkManager/no-stub-resolv.conf.
/etc/resolv.conf غير مُدار

لإيقاف تعديل NetworkManager لـ /etc/resolv.conf، عيِّن main.dns=none في ملف إعداد ضمن /etc/NetworkManager/conf.d/:

/etc/NetworkManager/conf.d/dns.conf
[main]
dns=none
Tip قد تُريد أيضًا تعيين main.systemd-resolved=false لمنع NetworkManager من إرسال إعداد DNS إلى systemd-resolved.
Note راجع #DNS caching and conditional forwarding لإعداد NetworkManager باستخدام خلفيات DNS أخرى كـ dnsmasq وsystemd-resolved بدلًا من main.dns=none.

بعد ذلك قد يكون /etc/resolv.conf رابطًا رمزيًا معطوبًا تحتاج إلى إزالته. ثم أنشئ ملف /etc/resolv.conf جديدًا.

استخدام openresolv
Note لا يدعم NetworkManager استخدام واجهة resolvconf الخاصة بـ systemd-resolved (resolvectl(1) § COMPATIBILITY WITH RESOLVCONF(8)) التي توفرها systemd-resolvconf.

لإعداد NetworkManager لاستخدام openresolv، عيِّن main.rc-manager=resolvconf في ملف إعداد ضمن /etc/NetworkManager/conf.d/:

/etc/NetworkManager/conf.d/rc-manager.conf
[main]
rc-manager=resolvconf

جدار الحماية

يمكنك تعيين منطقة firewalld بناءً على اتصالك الحالي. مثلًا، جدار حماية مقيِّد في العمل وآخر أقل تقييدًا في المنزل.

يمكن تحقيق ذلك أيضًا باستخدام موزِّع NetworkManager.

خدمات الشبكة مع موزِّع NetworkManager

ثمة خدمات شبكة عديدة لا تُريد تشغيلها حتى يرفع NetworkManager واجهةً. يمتلك NetworkManager القدرة على تشغيل خدمات عند الاتصال بشبكة وإيقافها عند قطع الاتصال (مثلًا عند استخدام NFS أو SMB أو NTPd).

لتفعيل هذه الميزة، يجب تفعيل NetworkManager-dispatcher.service وتشغيله.

بعد تشغيل الخدمة، يمكن إضافة سكريبتات إلى مجلد /etc/NetworkManager/dispatcher.d.

يجب أن تكون السكريبتات مملوكة لـ root، وإلا لن يُنفِّذها الموزِّع. لمزيد من الأمان، عيِّن ملكية المجموعة لـ root أيضًا:

# chown root:root /etc/NetworkManager/dispatcher.d/10-script.sh

تأكد أن الملف قابل للتنفيذ.

تُنفَّذ السكريبتات بترتيب أبجدي عند الاتصال، وبترتيب أبجدي عكسي عند قطع الاتصال. لضمان ترتيب التنفيذ، يشيع استخدام أرقام قبل اسم السكريبت (مثل 10-portmap أو 30-netfs) لضمان تشغيل portmapper قبل محاولة تركيب NFS.

تستقبل السكريبتات الوسيطات التالية:

  • اسم الواجهة: مثل eth0
  • الإجراء: up، down، vpn-up، vpn-down، ... (راجع NetworkManager-dispatcher(8) للقائمة الكاملة)
Warning إن اتصلت بشبكات عامة أو غير موثوقة، انتبه إلى الخدمات التي تُشغِّلها والخوادم التي تتوقع أن تكون متاحة. قد تُشكِّل ثغرة أمنية بتشغيل خدمات خاطئة عند الاتصال بشبكة عامة.

تجنّب مهلة الموزِّع

إن كان ما سبق يعمل، فهذا القسم غير ذي صلة. إلا أن ثمة مشكلة عامة تتعلق بتشغيل سكريبتات موزِّع تستغرق وقتًا أطول. كانت المهلة الداخلية ثلاث ثوانٍ فقط في البداية، وإن لم تكتمل السكريبت في الوقت المحدد أُنهيت. لاحقًا مُدِّدت المهلة إلى نحو 20 ثانية (راجع متتبع الأخطاء لمزيد من المعلومات). إن استمرت المهلة في التسبب بمشكلات، يمكن كحل مؤقت استخدام ملف drop-in لـ NetworkManager-dispatcher.service للبقاء نشطًا بعد الخروج:

/etc/systemd/system/NetworkManager-dispatcher.service.d/remain_after_exit.conf
[Service]
RemainAfterExit=yes

الآن شغِّل خدمة NetworkManager-dispatcher المعدَّلة وفعِّلها.

Warning إضافة سطر RemainAfterExit ستمنع الموزِّع من الإغلاق. للأسف، يجب أن يُغلق الموزِّع قبل أن يتمكن من تشغيل سكريبتاتك مرة أخرى. مع هذا الإعداد لن يُغلق الموزِّع، مما يعني أن السكريبتات ستُنفَّذ مرة واحدة فقط لكل إقلاع. لذا لا تُضف هذا السطر إلا إذا كانت المهلة تُسبِّب مشكلة فعلية.

أمثلة على الموزِّع

ضبط المنطقة الزمنية تلقائيًا

أنشئ سكريبت موزِّع لـ NetworkManager واجعله قابلًا للتنفيذ:

/etc/NetworkManager/dispatcher.d/09-timezone
#!/bin/sh
case "$2" in
    up)
        timedatectl set-timezone "$(curl --fail https://ipapi.co/timezone)"
    ;;
esac
Tip يمكن استخدام connectivity-change بدلًا من up لمنع تغيير المنطقة الزمنية عند الاتصال بشبكات VPN كـ OpenConnect.

بدلًا من ذلك، تضبط أداة tzupdateAUR المنطقة الزمنية تلقائيًا بناءً على الموقع الجغرافي لعنوان IP.

تركيب مجلد بعيد باستخدام sshfs

نظرًا لتشغيل السكريبت في بيئة مقيّدة للغاية، يجب تصدير SSH_AUTH_SOCK للاتصال بوكيل SSH. راجع هذه الرسالة لمزيد من المعلومات. المثال أدناه يعمل مع GNOME Keyring وسيطلب كلمة المرور إن لم تكن محلولةً مسبقًا. UUID المراد مطابقته يمكن إيجاده بالأمر nmcli connection status أو nmcli connection list.

#!/bin/sh
USER='username'
REMOTE='user@host:/remote/path'
LOCAL='/local/path'

interface=$1 status=$2
if [ "$CONNECTION_UUID" = "uuid" ]; then
  case $status in
    up)
      SSH_AUTH_SOCK=$(find /tmp -maxdepth 1 -type s -user "$USER" -name 'ssh')
      export SSH_AUTH_SOCK
      su "$USER" -c "sshfs $REMOTE $LOCAL"
      ;;
    down)
      fusermount -u "$LOCAL"
      ;;
  esac
fi

تركيب مشاركات SMB

بعض مشاركات SMB متاحة فقط على شبكات أو مواقع معينة. يمكنك استخدام الموزِّع لتركيب مشاركات SMB المتاحة في موقعك الحالي فقط.

السكريبت التالي سيتحقق من الاتصال بشبكة محددة ويُركِّب المشاركات وفقًا لذلك:

/etc/NetworkManager/dispatcher.d/30-mount-smb.sh
#!/bin/sh

if [ "$2" = "up" ]; then
  if [ "$CONNECTION_UUID" = "uuid" ]; then
    mount /your/mount/point & 
  fi
fi

السكريبت التالي سيفكّ تركيب جميع مشاركات SMB قبل قطع الاتصال ببرنامج من شبكة محددة:

/etc/NetworkManager/dispatcher.d/pre-down.d/30-umount-smb.sh
#!/bin/sh

if [ "$CONNECTION_UUID" = "uuid" ]; then
  umount -a -l -t cifs
fi
Note تأكد من وضع هذا السكريبت في المجلد الفرعي pre-down.d كما هو موضح، وإلا سيفكّ تركيب جميع المشاركات عند أي تغيير في حالة الاتصال.

السكريبت التالي سيحاول فكّ تركيب جميع مشاركات SMB بعد قطع الاتصال غير المتوقع بشبكة محددة:

/etc/NetworkManager/dispatcher.d/40-umount-smb.sh
#!/bin/sh

if [ "$CONNECTION_UUID" = "uuid" ]; then
  if [ "$2" = "down" ]; then
    umount -a -l -t cifs
  fi
fi
Note
  • منذ NetworkManager 0.9.8، لا تُنفَّذ أحداث pre-down وdown عند الإغلاق أو إعادة التشغيل، راجع هذا التقرير لمزيد من المعلومات.
  • سكريبتات umount السابقة قد تظل تترك التطبيقات التي تصل فعليًا إلى نقطة التركيب في حالة "تعليق".

بديلًا لذلك، يمكن استخدام السكريبت الموضح في NFS#Using a NetworkManager dispatcher:

/etc/NetworkManager/dispatcher.d/30-smb.sh
#!/bin/sh

WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9"

if [ "$CONNECTION_UUID" = "$WANTED_CON_UUID" ]; then
    case "$2" in
        "up")
            mount -a -t cifs
            ;;
        "down"|"pre-down"|"vpn-pre-down")
            umount -l -a -t cifs >/dev/null
            ;;
    esac
fi
Note يتجاهل هذا السكريبت نقاط التركيب التي تحمل الخيار noauto؛ أزل هذا الخيار أو استخدم auto للسماح للموزِّع بإدارة هذه النقاط.

أنشئ رابطًا رمزيًا داخل /etc/NetworkManager/dispatcher.d/pre-down/ لالتقاط أحداث pre-down:

# ln -s ../30-smb.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-smb.sh

تركيب مشاركات NFS

راجع NFS#Using a NetworkManager dispatcher.

استخدام الموزِّع للتبديل التلقائي بين Wi-Fi وكابل LAN

الفكرة هي تشغيل Wi-Fi فقط عند فصل كابل LAN (مثلًا عند فصل الحاسوب المحمول من قاعدة الإرساء)، وتعطيل Wi-Fi تلقائيًا عند توصيل كابل LAN مرة أخرى.

أنشئ سكريبت الموزِّع التالي[٧]، مع استبدال Your_Ethernet_Interface باسم واجهة Ethernet لديك.

Note يمكن الحصول على قائمة الواجهات باستخدام nmcli (nmcli d | grep ethernet). تبدأ واجهات Ethernet بـ en أو eth، مثل enp0s5 أو eth0.

تذكر جعل السكريبت قابلًا للتنفيذ. يمكن التحقق من عمله بـ إعادة تشغيل NetworkManager.service وتنفيذ ip a والتحقق أن واجهة Wi-Fi في الحالة DOWN. إن واجهت سلوكًا غير متوقع، تحقق من سجل NetworkManager-dispatcher.service.

/etc/NetworkManager/dispatcher.d/99-wifi-auto-toggle.sh
#!/bin/sh

LOG_PREFIX="WiFi Auto-Toggle"
ETHERNET_INTERFACE="Your_Ethernet_Interface"

if [ "$1" = "$ETHERNET_INTERFACE" ]; then
    case "$2" in
        up)
            echo "$LOG_PREFIX ethernet up"
            nmcli radio wifi off
            ;;
        down)
            echo "$LOG_PREFIX ethernet down"
            nmcli radio wifi on
            ;;
    esac
elif [ "$(nmcli -g GENERAL.STATE device show $ETHERNET_INTERFACE)" = "20 (unavailable)" ]; then
    echo "$LOG_PREFIX failsafe"
    nmcli radio wifi on
fi
Note يوجد ضمان أمان لحالة كان فيها كابل LAN موصولًا عند آخر إغلاق ثم فُصل أثناء توقف الحاسوب. في هذه الحالة سيظل الراديو معطلًا عند الإقلاع، ومع فصل كابل LAN لن تكون لديك أي شبكة.

استخدام الموزِّع للاتصال بـ VPN بعد اتصال الشبكة

في هذا المثال نريد الاتصال تلقائيًا باتصال VPN مُعرَّف مسبقًا بعد الاتصال بشبكة Wi-Fi محددة.

The factual accuracy of this article or section is disputed.

Reason: A scripting without iwgetid does work too and may be more reliable? (Discuss in Talk:Networkmanager (العربية)#Fixes for automatic VPN dispatcher script)
Note يتطلب هذا السكريبت wireless_tools لاستخدام iwgetid.
/etc/NetworkManager/dispatcher.d/vpn-up
#!/bin/sh
VPN_NAME="name of VPN connection defined in NetworkManager"
ESSID="Wi-Fi network ESSID (not connection name)"

interface=$1 status=$2
case $status in
  up|vpn-down)
    if iwgetid | grep -qs ":\"$ESSID\""; then
      nmcli connection up id "$VPN_NAME"
    fi
    ;;
  down)
    if iwgetid | grep -qs ":\"$ESSID\""; then
      if nmcli connection show --active | grep "$VPN_NAME"; then
        nmcli connection down id "$VPN_NAME"
      fi
    fi
    ;;
esac

إن أردت محاولة الاتصال بـ VPN تلقائيًا لجميع شبكات Wi-Fi، يمكنك استخدام التعريف التالي لـ ESSID: ESSID=$(iwgetid -r). تذكر ضبط صلاحيات السكريبت وفقًا لذلك.

قد تفشل محاولة الاتصال بالسكريبت أعلاه مع شكوى NetworkManager-dispatcher.service من 'no valid VPN secrets'، بسبب طريقة تخزين أسرار VPN. لحسن الحظ، ثمة خيارات مختلفة لمنح السكريبت الوصول إلى كلمة مرور VPN.

1: أحدها يتطلب تعديل ملف إعداد اتصال VPN لجعل NetworkManager يخزّن الأسرار بنفسه بدلًا من تخزينها داخل keyring الذي لن يكون متاحًا لـ root: افتح /etc/NetworkManager/system-connections/name of your VPN connection.nmconnection وغيِّر password-flags وsecret-flags من 1 إلى 0.

إن لم ينجح ذلك وحده، قد تحتاج إلى إنشاء passwd-file في مكان آمن بنفس الصلاحيات والملكية كسكريبت الموزِّع، يحتوي على:

/path/to/passwd-file
vpn.secrets.password:YOUR_PASSWORD

يجب تعديل السكريبت وفقًا لذلك للحصول على كلمة المرور من الملف:

/etc/NetworkManager/dispatcher.d/vpn-up
#!/bin/sh
VPN_NAME="name of VPN connection defined in NetworkManager"
ESSID="Wi-Fi network ESSID (not connection name)"

interface=$1 status=$2
case $status in
  up|vpn-down)
    if iwgetid | grep -qs ":\"$ESSID\""; then
      nmcli connection up id "$VPN_NAME" passwd-file /path/to/passwd-file
    fi
    ;;
  down)
    if iwgetid | grep -qs ":\"$ESSID\""; then
      if nmcli connection show --active | grep "$VPN_NAME"; then
        nmcli connection down id "$VPN_NAME"
      fi
    fi
    ;;
esac

2: بدلًا من ذلك، غيِّر password-flags وضع كلمة المرور مباشرة في ملف الإعداد بإضافة قسم vpn-secrets:

 [vpn]
 ....
 password-flags=0
 
 [vpn-secrets]
 password=your_password
Note قد يكون من الضروري إعادة فتح محرر اتصال NetworkManager وحفظ أسرار/كلمات مرور VPN مرة أخرى.

استخدام الموزِّع لتعطيل IPv6 على اتصالات مزودي VPN

كثير من مزودي VPN التجاريين يدعمون IPv4 فقط، مما يعني أن كل حركة مرور IPv6 تتجاوز VPN وتجعله عديم الفائدة فعليًا. لتفادي ذلك، يمكن استخدام الموزِّع لتعطيل كل حركة مرور IPv6 طوال مدة اتصال VPN.

/etc/NetworkManager/dispatcher.d/10-vpn-ipv6
#!/bin/sh

case "$2" in
	vpn-up)
		echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
		;;
	vpn-down)
		echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6
		;;
esac
Note لا يعمل السكريبت أعلاه مع WireGuard إذ لا يُرسل NetworkManager أحداث vpn-up/down له. يجب بدلًا من ذلك الاعتماد على الأحداث العامة لواجهات WireGuard كما هو موضح في [٨].

كبديل، يمكن استخدام الموزِّع لضبط وضع IPv6 للجهاز المستخدم من اتصال VPN مؤقتًا على link-local. لن يعمل هذا السكريبت إن وفّر أكثر من جهاز أو اتصال واحد اتصال IPv6، إلا أنه يمكن تعديله للتكرار على أجهزة متعددة.

/etc/NetworkManager/dispatcher.d/10-vpn-ipv6
#!/bin/sh

case "$2" in
	vpn-up)
		nmcli device modify "${DEVICE_IFACE}" ipv6.method link-local
		;;
	vpn-down)
		nmcli device reapply "${DEVICE_IFACE}"
		;;
esac

OpenNTPD

راجع OpenNTPD#Using NetworkManager dispatcher.

الضبط الديناميكي لخوادم NTP المستلمة عبر DHCP مع systemd-timesyncd

عند التنقل بين شبكات مختلفة (شبكة LAN في الشركة، Wi-Fi في المنزل، وشبكات أخرى متنوعة) قد ترغب في ضبط خوادم NTP التي يستخدمها timesyncd على تلك التي يوفرها DHCP. إلا أن NetworkManager بحد ذاته غير قادر على التواصل مع systemd-timesyncd لضبط خوادم NTP.

يمكن للموزِّع حل هذه المشكلة.

أنشئ مجلد التراكب لإعداد systemd-timesyncd /etc/systemd/timesyncd.conf.d إن لم يكن موجودًا. داخل /etc/NetworkManager/dispatcher.d، ضع ما يلي:

/etc/NetworkManager/dispatcher.d/10-update-timesyncd
#!/bin/sh

[ -z "$CONNECTION_UUID" ] && exit 0
INTERFACE="$1"
ACTION="$2"

case $ACTION in
up | dhcp4-change | dhcp6-change)
	set -- ${DHCP6_DHCP6_NTP_SERVERS-} ${DHCP4_NTP_SERVERS-}
	servers=$*
	[ -n "$servers" ] || exit 0
	mkdir -p /etc/systemd/timesyncd.conf.d
	cat <<-THE_END >"/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf"
		[Time]
		NTP=$servers
	THE_END
	systemctl restart systemd-timesyncd.service
	;;
down)
	rm -f "/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf"
	systemctl restart systemd-timesyncd.service
	;;
esac

في كل مرة يُنشئ فيها NetworkManager اتصال شبكة جديد (ACTION=up) أو يتلقى تحديثًا لاتصال قائم (ACTION=dhcp4-change أو ACTION=dhcp6-change) وتحتوي بيانات الاتصال على معلومات حول خوادم NTP، يُكتب ملف إعداد تراكب خاص بالاتصال في /etc/systemd/timesyncd.conf.d. عند إيقاف الاتصال (ACTION=down) يُحذف ملف التراكب الخاص به. بعد كل تغيير في إعداد systemd-timesyncd تُعاد تشغيل الخدمة لأخذ الإعداد المحدَّث بعين الاعتبار.

Note DHCP6_DHCP6_NTP_SERVERS بـ DHCP6 مضاعفة هو اسم المتغير الصحيح كما تم التحقق منه بـ printenv اعتبارًا من NetworkManager 1.56.0-1

الاختبار

صُمِّمت أبلتات NetworkManager للتحميل عند تسجيل الدخول لذا لا يلزم في العادة أي إعداد إضافي لمعظم المستخدمين. إن كنت قد عطّلت إعدادات شبكتك السابقة وقطعت اتصالك بالشبكة، يمكنك الآن اختبار ما إذا كان NetworkManager سيعمل. الخطوة الأولى هي تشغيل NetworkManager.service.

ستوفر بعض الأبلتات ملف .desktop لتحميل أبلت NetworkManager عبر قائمة التطبيقات. إن لم يكن كذلك، ستحتاج إلى اكتشاف الأمر المناسب أو تسجيل الخروج والدخول مجددًا لتشغيل الأبلت. بمجرد تشغيله، سيبدأ على الأرجح في استطلاع اتصالات الشبكة للإعداد التلقائي مع خادم DHCP.

لتشغيل أبلت GNOME في مديري النوافذ غير المتوافقين مع xdg كـ awesome:

nm-applet --sm-disable &

للعناوين الثابتة، ستحتاج إلى إعداد NetworkManager ليتعامل معها. تتضمن العملية عادةً النقر بالزر الأيمن على الأبلت واختيار شيء كـ "تعديل الاتصالات".

نصائح وحيل

كلمات مرور Wi-Fi المشفرة

افتراضيًا، يخزّن NetworkManager كلمات المرور بنص عادي في ملفات الاتصال في /etc/NetworkManager/system-connections/. لطباعة كلمات المرور المخزّنة، استخدم الأمر التالي:

# grep -r '^psk=' /etc/NetworkManager/system-connections/

كلمات المرور متاحة للمستخدم الجذر في نظام الملفات وللمستخدمين الذين يمكنهم الوصول إلى الإعدادات عبر الواجهة الرسومية (مثل nm-applet).

من الأفضل تخزين كلمات المرور بشكل مشفر في خزنة مفاتيح بدلًا من النص العادي. عيب ذلك أن الاتصالات يجب إعدادها لكل مستخدم على حدة.

لقراءة الخزنة والكتابة إليها، يجب توافر وكيل أسرار. يمكن أن يكون:

  • nmcli مع الخيار --ask
  • إحدى الواجهات الرسومية من #Front-ends

إن لم يتوفر أي من هذين، ستفشل المصادقة بالخطأ no secrets: No agents were available for this request.

استخدام GNOME Keyring

يجب أن يكون خادم الخزنة مُشغَّلًا ومفتوحة الخزنة لكي يعمل ما يلي.

علاوة على ذلك، يجب إعداد NetworkManager لعدم تخزين كلمة المرور لجميع المستخدمين. باستخدام network-manager-applet من GNOME، شغِّل nm-connection-editor من الطرفية، اختر اتصال شبكة، انقر تعديل، اختر تبويب أمان Wi-Fi وانقر على الأيقونة اليمنى لكلمة المرور ثم اختر تخزين كلمة المرور لهذا المستخدم فقط.

استخدام KDE Wallet

باستخدام plasma-nm من KDE، انقر على الأبلت، ثم انقر على أيقونة الإعدادات في أعلى اليمين، انقر على اتصال شبكة، وفي تبويب الإعداد العام، أزل علامة الاختيار عن يمكن لجميع المستخدمين الاتصال بهذه الشبكة. إن ظل الخيار مفعَّلًا، ستُخزَّن كلمات المرور بنص عادي حتى عند تشغيل خادم خزنة.

إن كان الخيار محددًا سابقًا وأزلت علامة الاختيار، قد تحتاج إلى استخدام خيار reset أولًا لإزالة كلمة المرور من الملف. بدلًا من ذلك، احذف الاتصال وأعد إعداده.

مشاركة الاتصال بالإنترنت عبر Wi-Fi

يمكنك مشاركة اتصالك بالإنترنت (مثلًا اتصال 3G أو سلكي) ببضع نقرات. لاحظ أن جدار الحماية قد يتعارض مع مشاركة الإنترنت.

ستحتاج إلى بطاقة Wi-Fi تدعم وضع AP، راجع Software access point#Wi-Fi device must support AP mode للتفاصيل.

ثبِّت حزمة dnsmasq لتتمكن من مشاركة الاتصال فعليًا. لاحظ أن NetworkManager يشغّل نسخته الخاصة من dnsmasq كخادم DHCP بشكل مستقل عن dnsmasq.service. راجع #dnsmasq للتحذيرات.

أنشئ الاتصال المشترك:

  • انقر على الأبلت واختر إنشاء شبكة لاسلكية جديدة.
  • اتبع المعالج (اختر WPA2 أو أحدث، وتأكد من استخدام كلمة مرور لا تقل عن 8 أحرف، أي طول أقل سيفشل).
    • اختر إما Hotspot أو Ad-hoc كوضع Wi-Fi.

سيُحفظ الاتصال للاستخدام في المرات القادمة.

Note لا يدعم Android الاتصال بشبكات Ad-hoc. لمشاركة اتصال مع Android، استخدم وضع البنية التحتية (أي اضبط وضع Wi-Fi على "Hotspot").

مشاركة الاتصال بالإنترنت عبر Ethernet

السيناريو: جهازك متصل بالإنترنت عبر Wi-Fi وتريد مشاركة الاتصال مع أجهزة أخرى عبر Ethernet.

المتطلبات:

  • ثبِّت حزمتَي dnsmasq وnm-connection-editor لتتمكن من مشاركة الاتصال فعليًا. لاحظ أن NetworkManager يشغّل نسخته الخاصة من dnsmasq كخادم DHCP بشكل مستقل عن dnsmasq.service. راجع #dnsmasq للتحذيرات.
  • جهازك المتصل بالإنترنت والأجهزة الأخرى متصلة عبر كابل Ethernet مناسب (عادةً كابل crossover أو محوّل بينهما).
  • مشاركة الإنترنت غير محجوبة بـ جدار حماية.

الخطوات:

  • شغِّل nm-connection-editor من الطرفية.
  • أضف اتصال Ethernet جديدًا.
  • أعطه اسمًا واضحًا، مثل "إنترنت مشترك".
  • اذهب إلى "إعدادات IPv4".
  • في "الطريقة:"، اختر "مشاركة مع أجهزة أخرى".
  • احفظ.

الآن يجب أن يظهر "إنترنت مشترك" كخيار ضمن الاتصالات السلكية في NetworkManager.

التحقق من الاتصال بالشبكة داخل مهمة cron أو سكريبت

This article or section is out of date.

Reason: nm-tool was removed from NetworkManager for long time now[٩]. nmcli should be used instead. (Discuss in Talk:Networkmanager (العربية))

بعض مهام cron تتطلب توافر الشبكة للنجاح. لتجنّب تشغيل هذه المهام عند انقطاع الشبكة، أضف اختبار if للشبكة يستعلم nm-tool الخاص بـ NetworkManager ويتحقق من حالة الشبكة. يَنجح الاختبار الموضح هنا إن كانت أي واجهة متصلة، ويفشل إن كانت جميعها غير متصلة.

if [ $(nm-tool|grep State|cut -f2 -d' ') == "connected" ]; then
    #Whatever you want to do if the network is online
else
    #Whatever you want to do if the network is offline
fi

الاتصال بشبكة تتطلب كلمة سر عند الإقلاع

افتراضيًا، لن يتصل NetworkManager تلقائيًا بشبكات تتطلب كلمة سر عند الإقلاع. يعود ذلك إلى أنه يربط هذه الاتصالات بالمستخدم الذي أنشأها افتراضيًا، ولا يتصل إلا بعد تسجيل دخوله. لتغيير ذلك:

  1. انقر بالزر الأيمن على أيقونة nm-applet في لوحتك واختر "تعديل الاتصالات"، ثم افتح تبويب اللاسلكي.
  2. اختر الاتصال المطلوب وانقر على "تعديل".
  3. ضع علامة على "الاتصال تلقائيًا" و"متاح لجميع المستخدمين".
  4. تأكد أيضًا من أنه في "أمان Wi-Fi"، محددٌ خيار "تخزين كلمة المرور لجميع المستخدمين (غير مشفرة)".

سجّل الخروج وأعد الدخول لإتمام العملية.

OpenConnect مع كلمة المرور في KWallet

بينما يمكنك إدخال كلتا القيمتين وقت الاتصال، تستطيع plasma-nm 0.9.3.2-1 وما فوقها استرداد اسم مستخدم OpenConnect وكلمة مروره مباشرة من KWallet.

افتح "مدير KDE Wallet" وابحث عن اتصال OpenConnect VPN تحت "Network Management|Maps". انقر "عرض القيم" وأدخل بيانات اعتمادك في مفتاح "VpnSecrets" بهذا الشكل (استبدل username وpassword بالقيم الصحيحة):

form:main:username%SEP%username%SEP%form:main:password%SEP%password

في المرة القادمة التي تتصل فيها، يجب أن يظهر اسم المستخدم وكلمة المرور تلقائيًا في مربع حوار "أسرار VPN".

تجاهل أجهزة معينة

في بعض الأحيان قد ترغب في جعل NetworkManager يتجاهل أجهزة معينة ولا يحاول إعداد عناوين ومسارات لها. يمكنك تجاهل الأجهزة بسرعة عبر MAC أو اسم الواجهة في /etc/NetworkManager/conf.d/unmanaged.conf:

[keyfile]
unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth0

بعد تعديل الملف، نفِّذ nmcli general reload كجذر. بعدها ستتمكن من إعداد الواجهات دون أن يُغيِّر NetworkManager ما ضبطته.

إعداد عشوائية عنوان MAC

This article or section is a candidate for merging with NetworkManager/Privacy#MAC Randomization.

Notes: There is a dedicated sub-page for Privacy now. (Discuss in Talk:Networkmanager (العربية))
Note قد يكون تعطيل عشوائية عنوان MAC ضروريًا للحصول على اتصال مستقر [١٠] و/أو في الشبكات التي تقيّد الأجهزة بناءً على عنوان MAC أو لديها سعة شبكة محدودة.

يمكن استخدام عشوائية MAC لتعزيز الخصوصية بعدم الكشف عن عنوان MAC الفعلي للشبكة.

يدعم NetworkManager نوعين من عشوائية عنوان MAC: العشوائية أثناء الفحص وللاتصالات الشبكية. يمكن إعداد كلا الوضعين بتعديل /etc/NetworkManager/NetworkManager.conf أو بإنشاء ملف إعداد منفصل في /etc/NetworkManager/conf.d/ وهو الموصى به.

عشوائية Wi-Fi أثناء الفحص مفعَّلة افتراضيًا، لكن يمكن تعطيلها بإضافة ما يلي:

/etc/NetworkManager/conf.d/wifi_rand_mac.conf
[device]
wifi.scan-rand-mac-address=no

تتضمن أهم الأوضاع stable وrandom. يولّد stable عنوان MAC عشوائيًا عند الاتصال بشبكة جديدة ويربطهما باستمرار، فتستخدم نفس العنوان في كل مرة. في المقابل، يولّد random عنوان MAC جديدًا في كل مرة. يمكن إعداد العشوائية بإضافة:

/etc/NetworkManager/conf.d/wifi_rand_mac.conf
[device-mac-randomization]
wifi.scan-rand-mac-address=yes
 
[connection-mac-randomization]
ethernet.cloned-mac-address=random
wifi.cloned-mac-address=stable

راجع مقالة مدونة GNOME لمزيد من التفاصيل.

إيقاف إرسال اسم المضيف

يُرسل NetworkManager افتراضيًا اسم المضيف إلى خادم DHCP.

لتعطيل إرسال اسم المضيف إلى خادم DHCP لجميع الاتصالات عالميًا، عيِّن الخيارين ipv4.dhcp-send-hostname=0 وipv6.dhcp-send-hostname=0 في ملف إعداد ضمن /etc/NetworkManager/conf.d/:

/etc/NetworkManager/conf.d/dhcp-send-hostname.conf
[connection]
ipv4.dhcp-send-hostname=0
ipv6.dhcp-send-hostname=0

لتعطيل إرسال اسم المضيف لاتصال محدد (أو تفعيله إن كان معطلًا عالميًا)، أضف ما يلي إلى ملف اتصال الشبكة:

/etc/NetworkManager/system-connections/your_connection_file.nmconnection
...
[ipv4]
dhcp-send-hostname=false
...
[ipv6]
dhcp-send-hostname=false
...
Note تُكرَّم هذه الخيارات فقط من قِبل عميل DHCP الداخلي الافتراضي. لحذف إرسال اسم المضيف عند استخدام NetworkManager مع dhcpcd، عدِّل /etc/dhcpcd.conf وأضف anonymous كآخر سطر.

تفعيل امتدادات خصوصية IPv6

راجع IPv6#NetworkManager.

إعداد DUID فريد لكل اتصال

DUID الخاص بـ DHCPv6 هو قيمة يستخدمها عميل DHCPv6 للتعريف عن نفسه لخوادم DHCPv6. يدعم NetworkManager 3 أنواع من DUID:

  • DUID-UUID (RFC 6355): مولَّد من معرف فريد عالميًا (UUID).
  • DUID-LL (RFC 3315): مولَّد من عنوان طبقة الرابط (عنوان MAC).
  • DUID-LLT (RFC 3315): مولَّد من عنوان طبقة الرابط مع طابع زمني.

إن كان عميل DHCP الداخلي لـ NetworkManager قيد الاستخدام (الافتراضي)، سيُعرِّف عن نفسه بـ DUID-UUID عالمي ودائم مولَّد من machine-id (/etc/machine-id). هذا يعني أن جميع الاتصالات تشترك في نفس UUID، وهو ما قد يُشكِّل انتهاكًا للخصوصية.

لحسن الحظ، يمكن لـ NetworkManager توفير DUIDs فريدة لكل اتصال. يمكن تفعيل ذلك بإضافة الإعداد التالي:

/etc/NetworkManager/conf.d/duid.conf
[connection]
ipv6.dhcp-duid=stable-uuid

تُدعم أيضًا قيم stable-ll وstable-llt.

العمل مع الاتصالات السلكية

افتراضيًا، يولّد NetworkManager ملف تعريف اتصال لكل اتصال ethernet سلكي يجده. يُسمّي الاتصال الأول "Wired connection 1". يمكن تجنّب توليد هذا الاتصال بإعداد no-auto-default (راجع NetworkManager.conf(5))، أو بحذفه ببساطة. بعدها لن يولِّد NetworkManager اتصالًا لهذه الواجهة مرة أخرى.

يمكنك أيضًا تعديل الاتصال وحفظه أو حذفه، ثم تغيير الاسم كما تشاء. يمكن استخدام nm-connection-editor لهذه المهمة.

استخدام iwd كخلفية Wi-Fi

Note
  • لا تُفعِّل iwd.service أو تُعدِّل iwd يدويًا. سيُشغِّله NetworkManager ويديره بنفسه.
  • راجع المشكلات الموجودة قبل التبديل إلى iwd.

لتفعيل خلفية iwd التجريبية، ثبِّت iwd أولًا ثم أنشئ ملف الإعداد التالي:

/etc/NetworkManager/conf.d/wifi_backend.conf
[device]
wifi.backend=iwd

بدلًا من ذلك، يمكن تثبيت networkmanager-iwdAUR، وهي حزمة معدَّلة تعمل حصريًا مع iwd.

Note قد تحتاج إلى تحويل ملفات تعريف شبكة NetworkManager الموجودة بعد التبديل إلى iwd.

التشغيل في مساحة شبكة منعزلة

إن أردت تشغيل NetworkManager داخل مساحة شبكة منعزلة (namespace)، أوقف الجهاز قبل نقله إلى المساحة المنعزلة:

$ ip link set dev MY_DEVICE down
$ ip link set dev MY_DEVICE netns MY_NAMESPACE
$ ip netns exec MY_NAMESPACE NetworkManager
...
$ ip netns exec MY_NAMESPACE killall NetworkManager

وإلا سيفشل NetworkManager لاحقًا في تأسيس الاتصال مع خطأ device is strictly unmanaged.

الاتصال التلقائي بـ VPN

يمكن ضبط NetworkManager للاتصال تلقائيًا بـ VPN عند الاتصال بالإنترنت، على أساس كل شبكة على حدة. يمكن إضافة اتصال VPN في واجهة NetworkManager الأمامية لـ GNOME، لكن لجعله يتصل تلقائيًا يجب استخدام nmcli.

أولًا، تأكد من إتاحة اتصال VPN لجميع المستخدمين. في GNOME يتم ذلك بتحديد خانة تحت تبويب details. في تبويب Identity، في حقل كلمة المرور، انقر الأيقونة على اليمين واضبطها على Store the password for all users.

ثم ابحث عن UUID لاتصال VPN وأضفه إلى connection.secondaries لاتصال الإنترنت:

# UUID=$(nmcli --get-values connection.uuid connection show name-of-VPN-connection)
# nmcli connection modify name-of-Internet-connection connection.secondaries "$UUID"

عند إعادة تشغيل NetworkManager والاتصال باتصال الإنترنت المُعدَّ، يجب أن يتصل بـ VPN تلقائيًا.

استكشاف الأخطاء وإصلاحها

لا يظهر مربع إدخال كلمة المرور لشبكات Wi-Fi المحمية

عند محاولة الاتصال بشبكة Wi-Fi محمية، لا يظهر مربع حوار لإدخال كلمة المرور ولا يتم الاتصال. يحدث ذلك عند عدم تثبيت أي حزمة خزنة مفاتيح. الحل البسيط هو تثبيت gnome-keyring. إن أردت تخزين كلمات المرور بشكل مشفر، اتبع GNOME Keyring لإعداد gnome-keyring-daemon.

إدارة الشبكة معطلة

عند إغلاق NetworkManager مع بقاء ملف pid (الحالة)، ستظهر رسالة Network management disabled. إن حدث ذلك، احذف الملف يدويًا:

# rm /var/lib/NetworkManager/NetworkManager.state

مشكلات مع عميل DHCP الداخلي

إن واجهت مشكلات في الحصول على عنوان IP باستخدام عميل DHCP الداخلي، جرِّب استخدام عميل DHCP آخر، راجع #DHCP client. قد يحل هذا المشكلات في الشبكات اللاسلكية الكبيرة كـ eduroam.

مشكلات DHCP مع dhclient

إن واجهت مشكلات في الحصول على عنوان IP عبر DHCP، جرِّب إضافة ما يلي إلى /etc/dhclient.conf:

 interface "eth0" {
   send dhcp-client-identifier 01:aa:bb:cc:dd:ee:ff;
 }

حيث aa:bb:cc:dd:ee:ff هو عنوان MAC لهذه البطاقة الشبكية. يمكن إيجاد عنوان MAC باستخدام الأمر ip link show interface من حزمة iproute2.

عدم اكتشاف مودم 3G

راجع Mobile broadband modem#NetworkManager.

إيقاف تشغيل Wi-Fi على الحواسيب المحمولة

في بعض الأحيان لن يعمل NetworkManager عند تعطيل بطاقة Wi-Fi بمفتاح على الحاسوب المحمول ثم محاولة إعادة تفعيلها. غالبًا ما تكون المشكلة مع rfkill. للتحقق مما إذا كان المشغّل يُخبر rfkill بحالة البطاقة اللاسلكية، استخدم:

$ watch -n1 rfkill list all

إن ظل أحد المعرّفات محجوبًا بعد تشغيل البطاقة، يمكنك محاولة رفع الحجب يدويًا (حيث X هو رقم المعرّف من المخرج أعلاه):

# rfkill event unblock X

إعادات عنوان IP الثابت إلى DHCP

This article or section is out of date.

Reason: This section is added in 2010 and describes an ancient version of nm-applet. Is this still relevant in 2024? (Discuss in Talk:Networkmanager (العربية))

بسبب خطأ غير محلول، عند تغيير الاتصالات الافتراضية إلى عنوان IP ثابت، قد لا يحفظ nm-applet التغيير بشكل صحيح ويعود إلى DHCP التلقائي.

للتحايل على هذه المشكلة، عدِّل الاتصال الافتراضي (مثل "Auto eth0") في nm-applet، وغيِّر اسم الاتصال (مثل "my eth0")، وأزل علامة الاختيار عن "متاح لجميع المستخدمين"، وغيِّر إعدادات عنوان IP الثابت كما تريد، ثم انقر تطبيق. سيحفظ هذا اتصالًا جديدًا بالاسم المُعطى.

بعد ذلك، تأكد من عدم الاتصال التلقائي للاتصال الافتراضي. لفعل ذلك، شغِّل nm-connection-editor (ليس كجذر). في محرر الاتصالات، عدِّل الاتصال الافتراضي (مثل "Auto eth0") وأزل علامة الاختيار عن "الاتصال تلقائيًا". انقر تطبيق وأغلق المحرر.

تعذّر تعديل الاتصالات كمستخدم عادي

راجع #Set up PolicyKit permissions.

نسيان شبكة Wi-Fi مخفية

نظرًا لعدم ظهور الشبكات المخفية في قائمة الاختيار في عرض اللاسلكي، لا يمكن نسيانها (إزالتها) عبر الواجهة الرسومية. يمكن حذفها بالأمر التالي:

# rm /etc/NetworkManager/system-connections/SSID.nmconnection

يعمل هذا لأي اتصال آخر أيضًا.

VPN لا يعمل في GNOME

عند إعداد اتصالات OpenConnect أو vpnc في NetworkManager أثناء استخدام GNOME، قد لا يظهر مربع الحوار أحيانًا ويظهر الخطأ التالي في /var/log/errors.log:

localhost NetworkManager[399]: <error> [1361719690.10506] [nm-vpn-connection.c:1405] get_secrets_cb(): Failed to request VPN secrets #3: (6) No agents were available for this request.

يحدث هذا لأن أبلت NetworkManager لـ GNOME يتوقع وجود سكريبتات الحوار في /usr/lib/gnome-shell، بينما تضعها حزم NetworkManager في /usr/lib/networkmanager. كحل مؤقت، أنشئ الروابط الرمزية التالية:

  • لـ OpenConnect: ln -s /usr/lib/nm-openconnect-auth-dialog /usr/lib/gnome-shell/
  • لـ VPNC (أي Cisco VPN): ln -s /usr/lib/nm-vpnc-auth-dialog /usr/lib/gnome-shell/

تعذّر الاتصال بشبكات لاسلكية أوروبية مرئية

تأتي شرائح WLAN بـ نطاق تنظيمي افتراضي. إن كانت نقطة الوصول لا تعمل ضمن هذه الحدود، لن تتمكن من الاتصال بالشبكة. الحل بسيط:

  1. ثبِّت wireless-regdb.
  2. أزل التعليق عن رمز البلد الصحيح في /etc/conf.d/wireless-regdom.
  3. أعد تشغيل النظام لأن الإعداد لا يُقرأ إلا عند الإقلاع.

الاتصال التلقائي بـ VPN عند الإقلاع لا يعمل

تحدث المشكلة عندما يحاول النظام (أي NetworkManager كمستخدم جذر) إنشاء اتصال VPN، لكن كلمة المرور غير متاحة لأنها مخزّنة في GNOME Keyring الخاص بمستخدم معين.

الحل هو الاحتفاظ بكلمة مرور VPN بنص عادي كما هو موضح في الخطوة (2.) من #Use dispatcher to connect to a VPN after a network connection is established.

اختناق systemd

بمرور الوقت يمكن أن تكبر ملفات السجل (/var/log/journal) كثيرًا، مما قد يُأثر تأثيرًا كبيرًا على أداء الإقلاع عند استخدام NetworkManager. راجع: systemd#Boot time increasing over time.

انقطاعات شبكة منتظمة وتأخر وفقدان حزم (Wi-Fi)

يُجري NetworkManager فحصًا كل دقيقتين.

بعض مشغّلات Wi-Fi تواجه مشكلات عند فحص نقاط الاتصال أثناء الاتصال. تتضمن الأعراض انقطاع VPN وإعادة اتصاله، وفقدان الحزم، وفشل تحميل صفحات الويب ثم نجاحها عند التحديث.

سيُشير تشغيل journalctl -f كجذر إلى حدوث ذلك، وستظهر رسائل كالتالية في السجلات بفترات منتظمة:

NetworkManager[410]: <info>  (wlp3s0): roamed from BSSID 00:14:48:11:20:CF (my-wifi-name) to (none) ((none))

إن لم يكن التجوال مهمًا، يمكن تعطيل سلوك الفحص الدوري بقفل BSSID لنقطة الوصول في ملف تعريف اتصال Wi-Fi.

تعذّر تشغيل Wi-Fi على حواسيب Lenovo المحمولة (IdeaPad، Legion، إلخ)

ثمة مشكلة في وحدة ideapad_laptop على بعض طرازات Lenovo بسبب إبلاغ مشغّل Wi-Fi خطأً عن حجب ناعم. لا تزال البطاقة قابلة للتحكم بـ netctl، لكن مديري الشبكات كـ NetworkManager يتعطلون. يمكن التحقق من المشكلة بفحص مخرج rfkill list بعد تبديل المفتاح الصلب ورؤية استمرار الحجب الناعم.

تفريغ وحدة ideapad_laptop يجب أن يحل المشكلة. (تحذير: قد يُعطِّل هذا لوحة المفاتيح ولوحة اللمس على الحاسوب المحمول!).

اختفاء nm-applet في i3wm

إن كنت تستخدم xfce4-notifyd.service للإشعارات، يجب تعديل الوحدة وإضافة ما يلي:

/etc/systemd/user/xfce4-notifyd.service.d/display_env.conf
[Service]
Environment="DISPLAY=:0.0"

بعد إعادة تحميل الخدمات، أعد تشغيل xfce4-notifyd.service. اخرج من i3 وأعد تشغيله وسيظهر الأبلت في الصينية.

الوحدة dbus-org.freedesktop.resolve1.service غير موجودة

إن لم يكن systemd-resolved.service مُشغَّلًا، سيحاول NetworkManager تشغيله عبر D-Bus ويفشل:

dbus-daemon[991]: [system] Activating via systemd: service name='org.freedesktop.resolve1' unit='dbus-org.freedesktop.resolve1.service' requested by ':1.23' (uid=0 pid=1012 comm="/usr/bin/NetworkManager --no-daemon ")
dbus-daemon[991]: [system] Activation via systemd failed for unit 'dbus-org.freedesktop.resolve1.service': Unit dbus-org.freedesktop.resolve1.service not found.

يحدث هذا لأن NetworkManager سيحاول إرسال معلومات DNS إلى systemd-resolved بغض النظر عن إعداد main.dns= في NetworkManager.conf(5).

يمكن تعطيل ذلك بملف إعداد في /etc/NetworkManager/conf.d/:

/etc/NetworkManager/conf.d/no-systemd-resolved.conf
[main]
systemd-resolved=false

راجع FS#62138.

الأسرار مطلوبة لكن لم تُوفَّر

إن تلقيت الخطأ التالي عند محاولة الاتصال بشبكة:

$ nmcli device wifi connect SSID password password
Error: Connection activation failed: (7) Secrets were required, but not provided

قد يكون لهذا الخطأ أسباب عديدة، وينبغي قراءة السجل (مع فلترته بـ -u NetworkManager). على سبيل المثال، إن استغرق NetworkManager وقتًا طويلًا لتأسيس الاتصال، سيعتبر أن كلمة المرور خاطئة. يمكنك محاولة حذف ملف تعريف الاتصال وإنشاء جديد:

$ nmcli connection delete SSID
$ nmcli device wifi connect SSID password password

يمكنك أيضًا تجربة تعطيل عشوائية عنوان MAC:

/etc/NetworkManager/conf.d/wifi_rand_mac.conf
[device]
wifi.scan-rand-mac-address=no

اتصال WPA Enterprise مع iwd

إن حاولت الاتصال بشبكة WPA Enterprise كـ 'eduroam' مع NetworkManager باستخدام خلفية iwd، ستحصل على الخطأ التالي:

 Connection 'eduroam' is not avialable on device wlan0 because profile is not compatible with device (802.1x connections must have IWD provisioning files)

يحدث هذا لأن NetworkManager لا يمكنه إعداد شبكة WPA Enterprise. لذا يجب إعدادها باستخدام ملف إعداد iwd /var/lib/iwd/essid.8021x كما هو موضح في iwd#WPA Enterprise.

فشل طلب أسرار VPN

إن حصلت على هذا الخطأ:

Failed to request VPN secrets #1: No agents were available for this request.

إما أن كلمة المرور فارغة أو يجب إعداد صلاحيات PolicyKit.

فشل اتصالات OpenVPN مع تحذير "secrets: failed to request VPN secrets"

This article or section is being considered for removal.

Reason: This does not warrant a troubleshooting section. Optional dependencies are pointed out by pacman, if this is not clear enough it should be covered in #VPN support. (Discuss in Talk:Networkmanager (العربية)#Remove unnecessary section 8.22)

تتطلب حزمة networkmanager-openvpn وجود libnma-gtk4 واختياريًا libnma (Gtk3) عند التكامل مع GNOME-Shell. إن كان libnma مطلوبًا وغير مثبَّت، ستُطبَع رسالة في سجل النظام:

NetworkManager[642]: <warn>  [...] vpn[..."name_of_vpn_profile VPN"]: secrets: failed to request VPN secrets #3: No agents were available for this request.

فشل اتصالات OpenVPN مع خطأ OpenSSL "ca md too weak"

منذ تحديث openssl إلى الإصدار 3، تُرفض الشهادات المولّدة بخوارزميات تشفير قديمة افتراضيًا. قد يؤدي استخدام networkmanager-openvpn مع إعداد كهذا إلى الخطأ التالي في السجلات:

nm-openvpn[14359]: OpenSSL: error:0A00018E:SSL routines::ca md too weak
nm-openvpn[14359]: Cannot load certificate file /home/archie/.local/share/networkmanagement/certificates/my_issued_cert.crt
nm-openvpn[14359]: Exiting due to fatal error

النهج الصحيح هو مطالبة مدير خادم OpenVPN بإصدار شهادات أكثر أمانًا. كحل مؤقت، يتطلب OpenVPN tls-cipher "DEFAULT:@SECLEVEL=0". قد يتعذر ذلك عبر واجهة المكوّن الرسومية، لكنه ممكن مع nmcli. كما ستحتاج إلى تفعيل موفّر legacy في OpenSSL.

أولًا، احصل على اسم اتصال VPN المعني من مخرج:

$ nmcli connection show

بافتراض أن اسم الاتصال هو vpn.example.com، استخدم nmcli كما يلي:

$ nmcli connection modify vpn.example.com +vpn.data tls-cipher=DEFAULT:@SECLEVEL=0

بعد ذلك، عدِّل /etc/ssl/openssl.cnf كما هو موضح في ويكي OpenSSL.

أضف legacy = legacy_sect في نهاية قسم [provider_sect]. أزل التعليق عن activate = 1 في [default_sect]. أخيرًا، أضف قسمًا جديدًا [legacy_sect] يحتوي أيضًا على activate = 1. النتيجة النهائية ستبدو كما يلي:

/etc/ssl/openssl.cnf
openssl_conf = openssl_init

[openssl_init]
providers = provider_sect

[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1

أخيرًا، أعد تشغيل NetworkManager.service لتفعيل إعداد OpenSSL الجديد.

فشل مصادقة اتصالات WPA Enterprise مع خطأ OpenSSL "unsupported protocol"

منذ تحديث openssl إلى الإصدار 3، "تعمل SSL 3 وTLS 1.0 وTLS 1.1 وDTLS 1.0 فقط على مستوى الأمان 0" افتراضيًا. قد يؤدي محاولة المصادقة على شبكة Wi-Fi تدعم فقط معايير أقدم إلى الخطأ التالي في السجلات:

wpa_supplicant[3320]: SSL: SSL3 alert: write (local SSL3 detected an error):fatal:protocol version
wpa_supplicant[3320]: OpenSSL: openssl_handshake - SSL_connect error:0A000102:SSL routines::unsupported protocol
wpa_supplicant[3320]: wlp3s0: CTRL-EVENT-EAP-FAILURE EAP authentication failed

النهج الصحيح هو إقناع مدير المؤسسة بترقية بروتوكول النفق المشفر إلى TLS 1.3. كحل مؤقت، يمكن ضبط المستوى المستخدم من wpa_supplicant مباشرة كما هو موضح في BBS#286417. لتغيير الاتصال المتأثر فقط، يمكن تعيين phase1-auth-flags=32 أو phase1-auth-flags=64 في قسم [802-1x] من ملف إعداد الاتصال.

احصل أولًا على اسم اتصال Wi-Fi المعني:

$ nmcli connection show

بافتراض أن الاتصال يستخدم TLS 1.0 واسمه Example Wi-Fi:

$ nmcli connection modify 'Example Wi-Fi' 802-1x.phase1-auth-flags 32

ولاتصال TLS 1.1، اكتب "64" بدلًا من ذلك:

$ nmcli connection modify 'Example Wi-Fi' 802-1x.phase1-auth-flags 64
Note الرقم الذي تكتبه يُشير إلى نتيجة رفع 2 للأس n، حيث n هو فهرس بت مصادقة الشبكة المقروء من اليمين إلى اليسار. تشغيل البت الخامس يُفعِّل TLS 1.0 [log(2) 32] والبت السادس يُفعِّل TLS 1.1 [log(2) 64].

أخيرًا، أعد تشغيل NetworkManager.service لتفعيل الإعداد الجديد.

انظر أيضًا