HTTPS อัตโนมัติด้วย Caddy

คำแนะนำนี้จะอธิบายวิธีการใช้ Caddy ซึ่งเป็นเว็บเซิร์ฟเวอร์ประสิทธิภาพสูงและใช้งานง่าย เพื่อเพิ่มประสิทธิภาพในการตั้งค่าเซิร์ฟเวอร์ Outline ความสามารถและความยืดหยุ่นในการกำหนดค่าของ HTTPS แบบอัตโนมัติของ Caddy ทำให้เป็นตัวเลือกที่เหมาะสมอย่างมากในการให้บริการเซิร์ฟเวอร์ Outline โดยเฉพาะอย่างยิ่งเมื่อใช้การส่งผ่าน WebSocket

Caddy คืออะไร

Caddy เป็นเว็บเซิร์ฟเวอร์แบบโอเพนซอร์สที่มีชื่อเสียงในเรื่องของความสะดวกในการใช้งาน, HTTPS แบบอัตโนมัติ และรองรับโปรโตคอลได้หลากหลายรูปแบบ ซึ่งช่วยเพิ่มความสะดวกในการกำหนดค่าเว็บเซิร์ฟเวอร์ และยังมีฟีเจอร์ต่างๆ เช่น

  • HTTPS แบบอัตโนมัติ: Caddy จะรับและต่ออายุใบรับรอง TLS โดยอัตโนมัติเพื่อรักษาการเชื่อมต่อที่ปลอดภัย
  • รองรับ HTTP/3: Caddy รองรับโปรโตคอล HTTP/3 แบบใหม่ล่าสุด เพื่อการรับส่งข้อมูลเว็บที่รวดเร็วและมีประสิทธิภาพยิ่งขึ้น
  • เพิ่มส่วนขยายได้ด้วยปลั๊กอิน: Caddy เพิ่มส่วนขยายได้ด้วยปลั๊กอินเพื่อรองรับฟังก์ชันต่างๆ รวมถึงพร็อกซีแบบย้อนกลับและการจัดสรรภาระงาน

ขั้นตอนที่ 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: สร้างและเรียกใช้บิลด์ 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 และยอมรับการรับส่งข้อมูล Shadowsocks ที่ห่อหุ้มด้วย WebSocket ทั้งในแบบ TCP และ UDP โดยส่งผ่านเส้นทาง TCP_PATH และ UDP_PATH (ตามลำดับ)

เรียกใช้เซิร์ฟเวอร์ Caddy ที่มี Outline เป็นส่วนขยายโดยใช้การกำหนดค่าที่สร้างขึ้น

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

ดูตัวอย่างเพิ่มเติมเกี่ยวกับการกำหนดค่าได้ที่ รายงาน GitHub outline-ss-server/outlinecaddy ของเรา

ขั้นตอนที่ 5: สร้างคีย์การเข้าถึงแบบไดนามิก

สร้างไฟล์ YAML คีย์การเข้าถึงไคลเอ็นต์สำหรับผู้ใช้ โดยใช้รูปแบบการกำหนดค่าขั้นสูงและระบุอุปกรณ์ปลายทาง 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 แบบทางการ (เวอร์ชัน 1.15.0 ขึ้นไป) และเพิ่มคีย์การเข้าถึงแบบไดนามิกที่สร้างขึ้นใหม่เป็นรายการเซิร์ฟเวอร์ คลิกเชื่อมต่อเพื่อเริ่มการสร้างอุโมงค์เสมือนไปยังเซิร์ฟเวอร์โดยใช้การกำหนดค่า Shadowsocks-over-WebSockets

ใช้เครื่องมืออย่าง IPInfo เพื่อยืนยันว่าคุณกำลังท่องอินเทอร์เน็ตผ่านเซิร์ฟเวอร์ Outline