پرش به محتویات

شب ۰۶: مبانی شبکه، DNS و TLS برای آزمایشگاه

بخش ۰۶ از مجموعهٔ آموزش Traefik در ۳۰ شب؛ هر جلسه برای ۶۰ تا ۹۰ دقیقه مطالعه، تمرین عملی، بررسی نتیجه و تمرین رفع خرابی طراحی شده است. مثال‌ها مطابق منبع با Traefik Proxy v3.7 نوشته شده‌اند؛ برای محیط عملیاتی نسخهٔ اصلاحی آزموده‌شده یا digest مشخصی را ثابت کنید. تمرین‌ها را روی میزبان یا کلاستر آزمایشگاهی اجرا کنید.

فهرست کامل دورهٔ ترافیک در ۳۰ شب

هدف‌های یادگیری

  • اثبات اتصال لایه‌های ۳ و ۴ پیش از عیب‌یابی تنظیمات لایهٔ ۷ در Traefik.
  • آزمودن میزبان مجازی بدون تغییر DNS.
  • ساخت و بررسی زنجیرهٔ گواهی مورد اعتماد محلی.

تمرین عملی: ایجاد وضعیت پایه

date -u
timedatectl status
ip -brief address
ip route
ss -lntup
getent hosts whoami.example.test || true
curl -sv --connect-timeout 3 http://127.0.0.1/
curl -sv --resolve whoami.example.test:80:127.0.0.1 http://whoami.example.test/

گزینهٔ --resolve آدرس یک درخواست را تعیین می‌کند و در عین حال هدر HTTP یعنی Host و SNI در TLS را حفظ می‌کند. برای HTTPS به‌جای -k از CA گواهی استفاده کنید:

mkdir -p certs
openssl req -x509 -newkey rsa:3072 -nodes -days 30 \
  -keyout certs/lab-ca.key -out certs/lab-ca.crt \
  -subj '/CN=Traefik Lab CA'
openssl req -newkey rsa:2048 -nodes \
  -keyout certs/whoami.key -out certs/whoami.csr \
  -subj '/CN=whoami.example.test'
openssl x509 -req -days 30 -sha256 \
  -in certs/whoami.csr -CA certs/lab-ca.crt -CAkey certs/lab-ca.key \
  -CAcreateserial -out certs/whoami.crt \
  -extfile <(printf 'subjectAltName=DNS:whoami.example.test\nextendedKeyUsage=serverAuth')
chmod 600 certs/*.key
openssl x509 -in certs/whoami.crt -noout -subject -issuer -dates -ext subjectAltName

بعداً گواهی را از طریق تنظیمات پویا بارگذاری کنید:

tls:
  certificates:
    - certFile: /certs/whoami.crt
      keyFile: /certs/whoami.key
  options:
    default:
      minVersion: VersionTLS12
      sniStrict: true

سپس listener واقعی و زنجیره را اعتبارسنجی کنید:

openssl s_client -connect 127.0.0.1:443 -servername whoami.example.test \
  -CAfile certs/lab-ca.crt -verify_return_error </dev/null
curl --cacert certs/lab-ca.crt \
  --resolve whoami.example.test:443:127.0.0.1 \
  https://whoami.example.test/

فهرست بررسی عملی

  • فرایند مورد انتظار پورت‌های ۸۰ و ۴۴۳ را گرفته و فایروال میزبان یا ابر آن‌ها را مجاز کرده است.
  • کلاینت آدرس موردنظر را resolve می‌کند و Host و SNI درست می‌فرستد.
  • شبکه‌های میزبان، کانتینر، overlay و pod مسیر برگشت دارند.
  • ساعت سامانه‌ها برای گواهی‌ها، لاگ‌ها و صفحه‌های کنترل توزیع‌شده همگام است.
  • SAN گواهی نام میزبان را دارد و زنجیرهٔ کامل ارائه می‌شود.
  • در حضور متعادل‌کنندهٔ بار بالادستی، فرض‌های MTU و Proxy Protocol مستند شده‌اند.

نکته‌های عیب‌یابی

  • اتصال رد می‌شود: هیچ فرایندی روی آدرس و پورت گوش نمی‌دهد یا انتشار پورت اشتباه است.
  • پایان مهلت اتصال: مشکل از فایروال، security group، مسیریابی، overlay یا CNI یا مسیر برگشت است.
  • خطای نام TLS: SAN و SNI منطبق نیستند؛ تغییر هدر HTTP Host به‌تنهایی کافی نیست.
  • مرجع ناشناخته: کلاینت CA را ندارد یا سرور گواهی‌های میانی را ارائه نکرده است.
  • HTTP کار می‌کند اما HTTPS نه: ابتدا TCP، سپس handshake و SNI، انتخاب گواهی و در پایان تنظیمات TLS مسیریاب را جداگانه بررسی کنید.

خودآزمایی

  1. curl --resolve چه چیزی را حفظ می‌کند؟ نام میزبان URL و در نتیجه HTTP Host و TLS SNI را.
  2. چرا هنگام اعتبارسنجی از curl -k پرهیز می‌کنیم؟ خطاهای اعتماد و نام میزبان را پنهان می‌کند.
  3. پاسخ 404 سلامت کدام لایه را نشان می‌دهد؟ TCP و TLS و یک سرور HTTP؛ وجود مسیریاب منطبق را ثابت نمی‌کند.
  4. اثبات کنید: تأیید موفق openssl s_client و SAN گواهی را نشان دهید.