Automatische HTTPS met Caddy

In deze handleiding wordt uitgelegd hoe je Caddy, een krachtige en gebruiksvriendelijke webserver, kunt gebruiken als aanvulling op je Outline-serverinstallatie. De functies voor automatische HTTPS en flexibele configuratie van Caddy maken van Caddy een uitstekende keuze om je Outline-server op te serven, vooral als je WebSocket-transport gebruikt.

Wat is Caddy?

Caddy is een open source webserver die bekendstaat vanwege de gebruiksvriendelijkheid, automatische HTTPS en ondersteuning voor verschillende protocollen. Caddy maakt de configuratie van webservers makkelijker en biedt functies als:

  • Automatische HTTPS: Caddy verkrijgt en vernieuwt automatisch TLS-certificaten en zorgt zo voor een beveiligde verbinding.
  • Ondersteuning voor HTTP/3: Caddy ondersteunt het nieuwste HTTP/3-protocol voor sneller en efficiënter webverkeer.
  • Uitbreidbaar met plug-ins: Je kunt Caddy uitbreiden met plug-ins om verschillende functies toe te voegen, zoals omgekeerde proxy's en load balancing.

Stap 1: Vereisten

  • Download en installeer xcaddy.

Stap 2: Stel je domein in

Zorg voordat je aan de slag gaat met Caddy dat je domeinnaam zo is ingesteld dat deze wijst naar het IP-adres van je server.

  • Stel A/AAAA-records in: Log in bij je DNS-provider en stel de A- en AAAA-records van je domein zo in dat ze wijzen naar respectievelijk het IPv4- en IPv6-adres van je server.
  • Controleer DNS-records: Controleer of je DNS-records juist zijn ingesteld met een autoritatieve lookup:

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

Stap 3: Maak een aangepaste Caddy-build en voer deze uit

Met xcaddy kun je een aangepast binair bestand voor caddy maken die de kernmodule van de Outline-server en andere nodige extensiemodules van de server bevat.

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

Stap 4: Stel de Caddy-server in en voer deze uit met Outline

Maak een nieuw config.yaml-bestand met de volgende configuratie:

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

Deze configuratie vertegenwoordigt een Shadowsocks-over-WebSockets-strategie met een webserver die luistert op poort 443 en TCP-en UDP-verkeer verpakt door Shadowsocks accepteert via respectievelijk pad TCP_PATH en UDP_PATH.

Voer de Caddy-server uitgebreid met Outline uit door middel van de gemaakte configuratie:

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

Je vindt meer voorbeeldconfiguraties in onze GitHub-repository outline-ss-server/outlinecaddy.

Stap 5: Maak een dynamische toegangssleutel

Maak een YAML-bestand met de clienttoegangssleutel voor je gebruikers met de indeling voor de geavanceerde configuratie. Voeg het WebSockets-eindpunt toe dat je eerder hebt ingesteld aan de serverzijde:

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

Nadat je het YAML-bestand met de dynamische toegangssleutel hebt gemaakt, moet je zorgen dat je gebruikers er toegang toe hebben. Je kunt het bestand hosten op een statische webhostingservice of het dynamisch genereren. Meer informatie over hoe je dynamische toegangssleutels gebruikt.

Stap 6: Maak verbinding met de Outline-client

Gebruik een van de officiële apps voor de Outline-client (versie 1.15.0+) en voeg de dynamische toegangssleutel die je net hebt gemaakt toe als serverinvoer. Klik op Verbinden om het tunnelen naar je server te starten met de Shadowsocks-over-WebSocket-configuratie.

Gebruik een tool als IPInfo om te controleren of je nu browst op internet via je Outline-server.