HTTPS אוטומטי באמצעות Caddy

במדריך הזה מוסבר איך להשתמש ב-Caddy, שרת אינטרנט חזק ונוח למשתמש, כדי לשפר את ההגדרה של שרת Outline. יכולות ה-HTTPS האוטומטי והתצורה הגמישה של Caddy הופכות אותו לאפשרות מצוינת להצגת שרת Outline, במיוחד כשמשתמשים בתעבורת WebSocket.

מהו Caddy?

Caddy הוא שרת אינטרנט בקוד פתוח שנודע בקלות השימוש בו, ב-HTTPS אוטומטי ובתמיכה בפרוטוקולים שונים. הוא מפשט את הגדרת שרת האינטרנט ומציע תכונות כמו:

  • HTTPS אוטומטי: Caddy מקבל ומחדש באופן אוטומטי אישורי TLS, כדי להבטיח חיבורים מאובטחים.
  • תמיכה ב-HTTP/3: Caddy תומך בפרוטוקול HTTP/3 העדכני ביותר, שמאפשר תנועה מהירה ויעילה יותר באינטרנט.
  • ניתן להרחיב באמצעות פלאגינים: אפשר להרחיב את Caddy באמצעות פלאגינים כדי לתמוך בפונקציות שונות, כולל שרת proxy הפוך ואיזון עומסים.

שלב 1: דרישות מוקדמות

  • מורידים ומתקינים את xcaddy

שלב 2: מגדירים את הדומיין

לפני שמפעילים את Caddy, צריך לוודא ששם הדומיין מוגדר בצורה נכונה כך שיצביע על כתובת ה-IP של השרת.

  • הגדרת רשומות A/AAAA: נכנסים לחשבון אצל ספק ה-DNS ומגדירים את רשומות ה-A ו-AAAA של הדומיין כך שיצביעו על כתובות ה-IPv4 ו-IPv6 של השרת, בהתאמה.
  • אימות רשומות ה-DNS: מוודאים שרשומות ה-DNS מוגדרות בצורה נכונה באמצעות חיפוש מוסמך:

    curl "https://cloudflare-dns.com/dns-query?name=DOMAIN_NAME&type=A" \
      -H "accept: application/dns-json"
    

שלב 3: פיתוח והרצה של build מותאם אישית של Caddy

באמצעות xcaddy, אפשר ליצור קובץ caddy בינארי מותאם אישית שכולל את מודול הליבה של שרת Outline ומודולים אחרים של תוספים לשרת שנדרשים.

xcaddy build \
  # The example uses a YAML config, so include a YAML config adapter module.
  --with github.com/iamd3vil/caddy_yaml_adapter \
  # The Outline core server module.
  --with github.com/Jigsaw-Code/outline-ss-server/outlinecaddy

שלב 4: הגדרה והפעלה של שרת Caddy עם Outline

יוצרים קובץ config.yaml חדש עם התצורה הבאה:

apps:
  http:
    servers:
      server1:
        listen:
          - ":443"
        routes:
          - match:
            - host:
              - 'DOMAIN_NAME'
            - path:
              - "/TCP_PATH"
            handle:
            - handler: websocket2layer4
              type: stream
              connection_handler: ss1
          - match:
            - host:
              - 'DOMAIN_NAME'
            - path:
              - "/UDP_PATH"
            handle:
              - handler: websocket2layer4
                type: packet
                connection_handler: ss1
  outline:
    shadowsocks:
      replay_history: 10000
    connection_handlers:
      - name: ss1
        handle:
          handler: shadowsocks
          keys:
            - id: user-1
              cipher: chacha20-ietf-poly1305
              secret: SHADOWSOCKS_SECRET

ההגדרה הזו מייצגת אסטרטגיה של Shadowsocks-over-WebSockets עם שרת אינטרנט שמאזין ביציאה 443, ומקבל תנועה עטופה של TCP ו-UDP ב-Shadowsocks בנתיבים TCP_PATH ו-UDP_PATH, בהתאמה.

מריצים את שרת Caddy עם התוסף Outline באמצעות ההגדרות שנוצרו:

caddy run --config config.yaml --adapter yaml --watch

דוגמאות נוספות להגדרות זמינות במאגר GitHub של outline-ss-server/outlinecaddy.

שלב 5: יוצרים מפתח גישה דינמי

יוצרים קובץ YAML של מפתח גישה ללקוח עבור המשתמשים באמצעות הפורמט advanced configuration, ומצרפים את נקודות הקצה של WebSocket שהוגדרו מראש בצד השרת:

transport:
  $type: tcpudp

  tcp:
    $type: shadowsocks

    endpoint:
      $type: websocket
      url: wss://DOMAIN_NAME/TCP_PATH
    cipher: chacha20-ietf-poly1305
    secret: SHADOWSOCKS_SECRET

  udp:
    $type: shadowsocks

    endpoint:
      $type: websocket
      url: wss://DOMAIN_NAME/UDP_PATH
    cipher: chacha20-ietf-poly1305
    secret: SHADOWSOCKS_SECRET

אחרי שיוצרים את קובץ ה-YAML של מפתח הגישה הדינמי, צריך להעביר אותו למשתמשים. אפשר לארח את הקובץ בשירות אירוח סטטי באינטרנט או ליצור אותו באופן דינמי. מידע נוסף על שימוש במפתחות גישה דינמיים

שלב 6: התחברות ללקוח Outline

משתמשים באחת מהאפליקציות הרשמיות של Outline Client (גרסאות 1.15.0 ואילך) ומוסיפים את מפתח הגישה הדינמי החדש שנוצר כרשומה של שרת. לוחצים על Connect כדי להתחיל את תהליך הניתוב לשרת באמצעות ההגדרה של Shadowsocks-over-Websocket.

אפשר להשתמש בכלי כמו IPInfo כדי לוודא שאתם גולשים באינטרנט דרך שרת Outline.