تخطَّ إلى المحتوى

وحدة تحكم الموقع

تم الالتقاط في 2026-07-28 من إحدى عقد CE في هذا النشر. يسجّل sitecli/capture-manifest.json أي عقدة، ويعيد scripts/capture-sitecli.sh --check التحقق من سطح الأوامر مقابل CE حي.

كل Customer Edge يقدّم وحدة تحكم الموقع من F5 على https://<sli-ip>:65500. في هذا النشر تكون عادةً المسار الأول الذي يُجرَّب.

هي الأقل مطالبةً منك: لا مفتاح SSH لتوزيعه، ولا مضيف انتقال لصيانته، ولا عنوان IP عام على العقدة، ولا استبدال للجهاز الافتراضي لتمكينها. من يُسمح له بالاتصال يصبح قرار Azure RBAC. وهي لا تحتاج إلى أن يكون الموقع مسجَّلاً: تم التقاط هذه الصفحة أول مرة بينما كانت المواقع الثلاثة جميعها تُبلّغ عن site_state: FAILED، وأُعيد التحقق منها دون تغيير مقابل العقد نفسها بعد أن أصبحت ONLINE.

المشكلة أن وحدة تحكم الموقع تستجيب فقط على عنوان العقدة الداخلي (SLI)، الذي لا يمكن الوصول إليه إلا من داخل VNet. يسدّ Azure Bastion هذه الفجوة دون وضع أي شيء آخر على الشبكة.

  1. سجّل الدخول إلى Azure وأضف امتداد Bastion. الأنفاق ميزة خاصة بالعميل الأصلي والامتداد غير مثبت افتراضيًا.

    Terminal window
    az login
    az extension add --name bastion
  2. احصل على دور Reader على الجهاز الافتراضي لـ CE، وواجهة الشبكة الخاصة به، ومضيف Bastion. هذا متطلب موثّق من Microsoft وهو غير مُتحقَّق منه هنا — كل تشغيل في هذا النشر جرى بصفة مالك الاشتراك، لذا لم يُثبت أن أي دور أدنى كافٍ أو غير كافٍ.

  3. تأكد من أن Bastion منشور وقادر. لا تدعم فئة Basic SKU الأنفاق ولا الاتصال المستند إلى IP، لذا فإن Standard وTrue هنا كلاهما أساسيان.

    Terminal window
    az network bastion list -g "$(terraform output -raw resource_group_name)" \
    --query "[].{name:name, sku:sku.name, tunneling:enableTunneling}" -o table
    Name Sku Tunneling
    ----------------- -------- -----------
    mcn-ce-ha-bastion Standard True

خذ القيم من terraform output بدلًا من كتابتها — فمعرّف المورد ليس شيئًا يُجمَّع يدويًا.

  1. اقرأ اسم مضيف Bastion، ومجموعة الموارد، ومعرّف مورد الجهاز الافتراضي لـ CE المستهدف.

    Terminal window
    cd terraform
    BASTION=$(terraform output -raw bastion_name)
    RG=$(terraform output -raw resource_group_name)
    VM_ID=$(terraform output -json ce_vm_ids | jq -r '.eastus01')
    mcn-ce-ha-bastion
    rg-mcn-ce-ha-<deployer>
    /subscriptions/…/providers/Microsoft.Compute/virtualMachines/f5-xc-ce-vm-01
  2. ابدأ النفق. يُبقي المنفذ مفتوحًا حتى يتم إيقافه، لذا شغّله في الخلفية أو استخدم طرفية ثانية.

    Terminal window
    az network bastion tunnel \
    --name "$BASTION" \
    --resource-group "$RG" \
    --target-resource-id "$VM_ID" \
    --resource-port 65500 \
    --port 65500 &
    WARNING: Opening tunnel on port: 65500
    WARNING: Tunnel is ready, connect on port 65500
    WARNING: Ctrl + C to close

    جميع الأسطر الثلاثة مسبوقة بـ WARNING:. هذا هو Azure CLI يكتب التقدّم إلى stderr، وليس مشكلة. انتظر ظهور Tunnel is ready قبل الاتصال.

  3. تأكد من أن المستمع محلي، على loopback:

    Terminal window
    lsof -nP -iTCP:65500 -sTCP:LISTEN
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    Python 41648 you 7u IPv4 … 0t0 TCP 127.0.0.1:65500 (LISTEN)
  4. افتح وحدة التحكم. النفق يجعلها محلية، لذا فالعنوان هو localhost — وليس عنوان العقدة.

    Terminal window
    open https://localhost:65500/ # macOS
    xdg-open https://localhost:65500/ # Linux
  5. أوقف النفق عند الانتهاء — Ctrl-C، أو kill %1 إن كنت قد شغّلته في الخلفية. تركه مفتوحًا يحتفظ بالمنفذ المحلي 65500 وبجلسة Bastion.

مربع حوار لبيانات الاعتماد، وليس صفحة تسجيل دخول. تستخدم وحدة التحكم مصادقة HTTP Basic، لذا يعرض المتصفح مطالبته الخاصة باسم المستخدم وكلمة المرور. لا يوجد نموذج للنظر إليه:

Terminal window
curl -skI https://localhost:65500/
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Volterra Site Console"
Content-Type: text/html; charset=utf-8
Content-Length: 0

الاستجابة 401 بذلك النطاق تعني أن وحدة التحكم تعمل بشكل صحيح. هذا ما يُفترض أن يحصل عليه الطلب غير المصادق عليه — وتقديم بيانات اعتماد admin إلى نفس عنوان URL يُرجع 200، وهي الطريقة التي تؤكد بها بيانات الاعتماد قبل فتح المتصفح:

Terminal window
curl -sk -u admin -o /dev/null -w '%{http_code}\n' https://localhost:65500/
Enter host password for user 'admin':
200

استخدام -u admin بدون نقطتين يجعل curl يطالب بكلمة المرور بدلًا من أخذها من سطر الأوامر، حيث ستنتهي في سجل الأوامر وفي قائمة العمليات.

تحذير بشأن الشهادة، لثلاثة أسباب في آن واحد. بفحص الشهادة مباشرة:

Terminal window
openssl s_client -connect localhost:65500 -servername localhost </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
subject=C=US, ST=California, L=Santa Clara, O=Volterra, OU=Volterra Edge Services, CN=site-local.volterra.io
issuer=C=US, ST=California, L=Santa Clara, O=Volterra, OU=Volterra Edge Services, CN=site-local.volterra.io
notBefore=Oct 25 04:51:31 2024 GMT
notAfter=Oct 25 04:51:31 2025 GMT

الموضوع مطابق للمُصدِر، إذن فهي موقّعة ذاتيًا. الاسم هو site-local.volterra.io بينما أنت تتصل بـ localhost، لذا لن يتطابق. وفي الإصدار الذي يعمل عليه هذا النشر، انتهت صلاحية الشهادة في 25 أكتوبر 2025 — الجهاز يأتي بها، ولا شيء في هذا المستودع يجدّدها.

توقّع تحذيرًا صريحًا من المتصفح، وتوقّعه في كل مرة. سطر الموضوع أعلاه هو الجزء المفيد: به تتأكد أنك وصلت إلى الجهاز وليس إلى شيء آخر يستمع على المنفذ المحلي 65500.

سجّل الدخول باسم admin. هذا التوثيق لا ينشر كلمة المرور، ولا ينبغي له.

سببان يجعلان عدم نشرها أهم هنا مما قد يبدو:

  • هذا التوثيق عام. طباعة كلمة مرور وحدة التحكم الحالية للأسطول ستحوّل “امتلاك دور Reader على Bastion” إلى وصول كامل للجهاز لأي شخص يقرأ الصفحة.
  • كلمة المرور المنشورة في التوثيق تصبح خاطئة في اللحظة التي يدوّرها فيها أحدهم، وخاطئة بأكثر الطرق تضليلًا — إذ يستنتج القارئ أن وصوله معطّل بدلًا من أن الصفحة قديمة.

بمجرد تدويرها، احصل عليها من حيث يحتفظ فريقك بالأسرار التشغيلية.

لماذا يجب أن يستهدف النفق معرّف المورد

Section titled “لماذا يجب أن يستهدف النفق معرّف المورد”

--target-resource-id مطلوب. استهداف عنوان العقدة بدلًا من ذلك مرفوض — أيًا كان العنوان الذي تستخدمه، لذا لم يُطبع هنا عنوان حقيقي عن قصد:

Terminal window
az network bastion tunnel --name "$BASTION" -g "$RG" \
--target-ip-address <any-sli-address> --resource-port 65500 --port 65501
ERROR: Custom ports are not allowed. Allowed ports for Tunnel with IP connect is 22, 3389.

السبب ليس أن الاتصال المستند إلى IP معطّل — ففي هذا Bastion قيمة ip_connect_enabled هي true. لا تدعم Microsoft المنافذ المخصصة عبر اتصالات العميل الأصلي المستندة إلى IP بغض النظر عن ذلك الإعداد (وثائق Azure)، و65500 هو منفذ مخصص. فحص تكوين Bastion هنا لا يقود إلى شيء؛ استخدم معرّف المورد.

العَرَضالسببالحل
ERROR: Custom ports are not allowed. Allowed ports for Tunnel with IP connect is 22, 3389.استُخدم --target-ip-addressاستخدم --target-resource-id
ERROR: Defined port is currently unavailableنفق آخر يحتفظ بالفعل بذلك المنفذ المحليأوقف النفق الآخر، أو مرّر قيمة --port مختلفة؛ ويبقى --resource-port عند 65500
terraform output -raw bastion_name يساوي null أو فارغBastion غير منشوراضبط enable_bastion = true ونفّذ apply
النفق يبدأ لكن معرّف المورد فارغاستخدم مرشّح jq اسم الجهاز الافتراضي بدلًا من مفتاح الموقعاستخدم المفاتيح eastus01/02/03
401 Unauthorized، النطاق Volterra Site Consoleليس خطأً — طلب غير مصادق عليهقدّم بيانات اعتماد admin
المتصفح يرفض الشهادةموقّعة ذاتيًا، وعدم تطابق الاسم، ومنتهية الصلاحية منذ أكتوبر 2025متوقّع؛ تأكد أن الموضوع هو CN=site-local.volterra.io وتابع