Networkmanager (العربية)
NetworkManager هو برنامج يوفر الكشف عن الشبكات وإعداد الاتصالات تلقائيًا.
يُفيد NetworkManager في الشبكات اللاسلكية والسلكية على حدٍّ سواء. في الشبكات اللاسلكية، يُفضّل NetworkManager الشبكات المعروفة مسبقًا، وبإمكانه التحويل إلى الشبكة الأكثر استقرارًا. يمكن للتطبيقات المدركة لـ NetworkManager التبديل بين وضعَي الاتصال وانقطاعه.
كما يُفضّل NetworkManager الاتصالات السلكية على اللاسلكية، ويدعم اتصالات المودم وأنواعًا معينة من الشبكات الافتراضية الخاصة (VPN).
التثبيت
يمكن تثبيت NetworkManager عبر الحزمة networkmanager، التي تحتوي على خادم خلفي، وواجهة سطر أوامر (nmcli)، وواجهة نصية قائمة على curses (nmtui).
تفعيل NetworkManager
بعد التثبيت، يجب تشغيل وتفعيل NetworkManager.service. بمجرد تشغيل الخادم الخلفي لـ NetworkManager، سيتصل تلقائيًا بأي "اتصالات نظام" متاحة تم إعدادها مسبقًا. أما "اتصالات المستخدم" أو الاتصالات غير المُعدَّة فتتطلب استخدام nmcli أو أبلت للإعداد والاتصال.
- يجب أن تكون كل واجهةِ شبكةٍ تحت إدارة عميل DHCP أو مدير شبكة واحد فقط، لذا يُنصح بتشغيل عميل DHCP أو مدير شبكة واحد فقط على النظام. يمكن عرض قائمة الخدمات الجارية حاليًا باستخدام
systemctl --type=service، ثم إيقاف أو إعادة إعداد الخدمات المتعارضة. - إن لم يكن systemd-resolved مُشغَّلًا، ستبدأ رسائل خطأ بالتراكم في سجلاتك. راجع #Unit dbus-org.freedesktop.resolve1.service not found لمزيد من المعلومات.
واجهات إضافية
- nm-connection-editor لواجهة مستخدم رسومية،
- network-manager-applet لأبلت شريط النظام (راجع قسم #nm-applet).
دعم النطاق العريض المحمول
يستخدم 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 الأخرى على نظام الإضافات، وهي متوفرة في الحزم التالية:
- networkmanager-openconnect لـ OpenConnect
- networkmanager-openvpn لـ OpenVPN
- networkmanager-pptp لـ PPTP Client
- networkmanager-strongswan لـ strongSwan
- networkmanager-vpnc
- networkmanager-fortisslvpnAUR
- networkmanager-iodine-gitAUR
- networkmanager-libreswanAUR
- networkmanager-l2tp
- networkmanager-sshAUR
- network-manager-sstp
- لضمان عمل 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
nm-applet تلقائيًا عبر ملف autostart؛ لإضافة الخيار --no-agent، عدِّل سطر Exec فيه كما يلي:
Exec=nm-applet --no-agent
--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:
-
أضف نفسك إلى مجموعة
wheel. ستحتاج إلى إدخال كلمة مرورك عند كل إجراء. لاحظ أن حسابك قد يُمنح صلاحيات أخرى أيضًا، كاستخدام sudo دون إدخال كلمة مرور الجذر. -
أضف نفسك إلى مجموعة
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
البوابات المقيّدة
بالنسبة للمستخدمين خلف بوابة مقيّدة، قد يفتح مدير سطح المكتب نافذةً تلقائيًا تطلب بيانات الاعتماد. إن لم يفعل ذلك، يمكنك استخدام حزمة 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
لا تُفعِّل وحدات 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 واحدة.
/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 والتحقق من الخادم وأوقات الاستعلام.
- لا تحتاج إلى تشغيل
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
قد يتسبب تفعيل 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
يمكن لـ 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
- إن كنت تستخدم مكوّن dnsmasq أو systemd-resolved في NetworkManager أو مشتركي openresolv، فلا تحدد عناوين حلقة الاسترداد مع خيار
servers=لأن ذلك قد يُعطِّل حل DNS. - لا تُرسَل الخوادم المحددة إلى systemd-resolved، وتُستخدم خوادم DNS الخاصة بالاتصال بدلًا منها. راجع مشكلة NetworkManager 1366 ومشكلة systemd 33754.
تعيين خوادم 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
/etc/resolv.conf
يُعدَّل وضع إدارة /etc/resolv.conf في NetworkManager بالإعداد main.rc-manager. تضبطه حزمة networkmanager على symlink بدلًا من الافتراضي الأصلي auto. الإعداد وقيمه موثقة في صفحة الدليل NetworkManager.conf(5).
يوفر NetworkManager أيضًا خطّافات عبر سكريبتات الموزِّع لتعديل /etc/resolv.conf بعد تغييرات الشبكة. راجع #Network services with NetworkManager dispatcher وNetworkManager(8) لمزيد من المعلومات.
- إن كان 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
main.systemd-resolved=false لمنع NetworkManager من إرسال إعداد DNS إلى systemd-resolved.main.dns=none.بعد ذلك قد يكون /etc/resolv.conf رابطًا رمزيًا معطوبًا تحتاج إلى إزالته. ثم أنشئ ملف /etc/resolv.conf جديدًا.
استخدام openresolv
- لا تعيِّن
main.rc-manager=resolvconfعند استخدام systemd-resolved؛ بدلًا من ذلك تأكد من إنشاء رابط /etc/resolv.conf الرمزي بشكل صحيح أو إعداد NetworkManager لاستخدام systemd-resolved صراحةً. - تأكد من عدم تثبيت حزمة systemd-resolvconf عند عدم استخدام systemd-resolved. ما لم يُشغَّل
systemd-resolved.service، ستُعطِّل جميع برامج الشبكات التي تستخدم resolvconf (ليس NetworkManager فحسب).
لإعداد 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) للقائمة الكاملة)
تجنّب مهلة الموزِّع
إن كان ما سبق يعمل، فهذا القسم غير ذي صلة. إلا أن ثمة مشكلة عامة تتعلق بتشغيل سكريبتات موزِّع تستغرق وقتًا أطول. كانت المهلة الداخلية ثلاث ثوانٍ فقط في البداية، وإن لم تكتمل السكريبت في الوقت المحدد أُنهيت. لاحقًا مُدِّدت المهلة إلى نحو 20 ثانية (راجع متتبع الأخطاء لمزيد من المعلومات). إن استمرت المهلة في التسبب بمشكلات، يمكن كحل مؤقت استخدام ملف drop-in لـ NetworkManager-dispatcher.service للبقاء نشطًا بعد الخروج:
/etc/systemd/system/NetworkManager-dispatcher.service.d/remain_after_exit.conf
[Service] RemainAfterExit=yes
الآن شغِّل خدمة NetworkManager-dispatcher المعدَّلة وفعِّلها.
RemainAfterExit ستمنع الموزِّع من الإغلاق. للأسف، يجب أن يُغلق الموزِّع قبل أن يتمكن من تشغيل سكريبتاتك مرة أخرى. مع هذا الإعداد لن يُغلق الموزِّع، مما يعني أن السكريبتات ستُنفَّذ مرة واحدة فقط لكل إقلاع. لذا لا تُضف هذا السطر إلا إذا كانت المهلة تُسبِّب مشكلة فعلية.أمثلة على الموزِّع
ضبط المنطقة الزمنية تلقائيًا
أنشئ سكريبت موزِّع لـ NetworkManager واجعله قابلًا للتنفيذ:
/etc/NetworkManager/dispatcher.d/09-timezone
#!/bin/sh
case "$2" in
up)
timedatectl set-timezone "$(curl --fail https://ipapi.co/timezone)"
;;
esac
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
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
- منذ 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
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 لديك.
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
استخدام الموزِّع للاتصال بـ VPN بعد اتصال الشبكة
في هذا المثال نريد الاتصال تلقائيًا باتصال VPN مُعرَّف مسبقًا بعد الاتصال بشبكة Wi-Fi محددة.
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
استخدام الموزِّع لتعطيل 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
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 تُعاد تشغيل الخدمة لأخذ الإعداد المحدَّث بعين الاعتبار.
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.
سيُحفظ الاتصال للاستخدام في المرات القادمة.
مشاركة الاتصال بالإنترنت عبر Ethernet
السيناريو: جهازك متصل بالإنترنت عبر Wi-Fi وتريد مشاركة الاتصال مع أجهزة أخرى عبر Ethernet.
المتطلبات:
-
ثبِّت حزمتَي dnsmasq وnm-connection-editor لتتمكن من مشاركة الاتصال فعليًا. لاحظ أن NetworkManager يشغّل نسخته الخاصة من dnsmasq كخادم DHCP بشكل مستقل عن
dnsmasq.service. راجع #dnsmasq للتحذيرات. - جهازك المتصل بالإنترنت والأجهزة الأخرى متصلة عبر كابل Ethernet مناسب (عادةً كابل crossover أو محوّل بينهما).
- مشاركة الإنترنت غير محجوبة بـ جدار حماية.
الخطوات:
- شغِّل
nm-connection-editorمن الطرفية. - أضف اتصال Ethernet جديدًا.
- أعطه اسمًا واضحًا، مثل "إنترنت مشترك".
- اذهب إلى "إعدادات IPv4".
- في "الطريقة:"، اختر "مشاركة مع أجهزة أخرى".
- احفظ.
الآن يجب أن يظهر "إنترنت مشترك" كخيار ضمن الاتصالات السلكية في NetworkManager.
التحقق من الاتصال بالشبكة داخل مهمة cron أو سكريبت
بعض مهام 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 تلقائيًا بشبكات تتطلب كلمة سر عند الإقلاع. يعود ذلك إلى أنه يربط هذه الاتصالات بالمستخدم الذي أنشأها افتراضيًا، ولا يتصل إلا بعد تسجيل دخوله. لتغيير ذلك:
- انقر بالزر الأيمن على أيقونة
nm-appletفي لوحتك واختر "تعديل الاتصالات"، ثم افتح تبويب اللاسلكي. - اختر الاتصال المطلوب وانقر على "تعديل".
- ضع علامة على "الاتصال تلقائيًا" و"متاح لجميع المستخدمين".
- تأكد أيضًا من أنه في "أمان 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
يمكن استخدام عشوائية 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 ...
/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
- لا تُفعِّل
iwd.serviceأو تُعدِّل iwd يدويًا. سيُشغِّله NetworkManager ويديره بنفسه. - راجع المشكلات الموجودة قبل التبديل إلى iwd.
لتفعيل خلفية iwd التجريبية، ثبِّت iwd أولًا ثم أنشئ ملف الإعداد التالي:
/etc/NetworkManager/conf.d/wifi_backend.conf
[device] wifi.backend=iwd
بدلًا من ذلك، يمكن تثبيت networkmanager-iwdAUR، وهي حزمة معدَّلة تعمل حصريًا مع 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
بسبب خطأ غير محلول، عند تغيير الاتصالات الافتراضية إلى عنوان 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 بـ نطاق تنظيمي افتراضي. إن كانت نقطة الوصول لا تعمل ضمن هذه الحدود، لن تتمكن من الاتصال بالشبكة. الحل بسيط:
- ثبِّت wireless-regdb.
- أزل التعليق عن رمز البلد الصحيح في
/etc/conf.d/wireless-regdom. - أعد تشغيل النظام لأن الإعداد لا يُقرأ إلا عند الإقلاع.
الاتصال التلقائي بـ 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"
تتطلب حزمة 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
أخيرًا، أعد تشغيل NetworkManager.service لتفعيل الإعداد الجديد.