Caddy с автоматическим HTTPS

В этом руководстве объясняется, как использовать 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 и укажите IPv4-адрес (запись A) и IPv6-адрес сервера (запись AAAA).
  • Проверьте записи 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 и принимает трафик TCP и UDP, упакованный в трафик Shadowsocks, по путям 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-Websocket.

Чтобы убедиться, что трафик проходит через ваш сервер Outline, воспользуйтесь инструментом IPInfo.