diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 365170953d1..475eae7db4e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,5 +1,5 @@ # 1.1.1.1 -products/1.1.1.1/ @abracchi-tw @cloudflare/PCX +products/1.1.1.1/ @cloudflare/PCX @cloudflare/dns # Access products/access/ @cloudflare/access-docs @cloudflare/PCX @@ -10,12 +10,27 @@ products/analytics/ @soheiokamoto @jherre @tlozoot @cloudflare/PCX # API products/api/ @cloudflare/sdk @cloudflare/PCX -# Argo Tunnel -products/argo-tunnel/ @abracchi-tw +# APO +products/automatic-platform-optimization/ @cloudflare/PCX + +# Bot management +products/bots/ @cloudflare/PCX + +# Browser Isolation +products/browser-isolation/ @cloudflare/PCX # BYOIP products/byoip/ @ConzorKingKong @dinasaur404 @cloudflare/PCX +# Cache +products/cache/ @cloudflare/PCX + +# Cloudflare One +products/cloudflare-one/ @cloudflare/PCX + +# Developers homepage +developers.cloudflare.com/ @cloudflare/PCX + # Distributed Web products/distributed-web/ @lukevalenta @thibmeu @jhoyla @Lekensteyn @cloudflare/PCX @@ -28,8 +43,8 @@ products/events/ @ConzorKingKong @cloudflare/PCX # Firewall Rules products/firewall/ @cloudflare/firewall @cloudflare/PCX -# Gateway -products/gateway/ @abracchi-tw +# Fundamentals +products/fundamentals/ @cloudflare/PCX # HTTP/3 products/http3/ @ConzorKingKong @cloudflare/PCX @@ -37,9 +52,6 @@ products/http3/ @ConzorKingKong @cloudflare/PCX # Image Resizing products/images/ @kornel @cloudflare/PCX -# The Life of a Request -products/internet/ @ConzorKingKong @cloudflare/PCX - # Load Balancing products/load-balancing/ @ConzorKingKong @cloudflare/PCX @@ -49,17 +61,26 @@ products/logs/ @soheiokamoto @jherre @tlozoot @bharatnc @cloudflare/PCX # Magic Transit products/magic-transit/ @annikagarbers @cloudflare/PCX +# Magic Firewall +products/magic-firewall/ @arges @annikagarbers @cloudflare/PCX + # Network Interconnect products/network-interconnect @ConzorKingKong @cloudflare/PCX # Pages products/pages/ @cloudflare/workers-docs @cloudflare/PCX +# Page Shield +products/page-shield/ @cloudflare/PCX + +# Railgun +products/railgun/ @cloudflare/PCX + # Randomness Beacon products/randomness-beacon/ @lukevalenta @armfazh @cloudflare/PCX # Registrar -products/registrar/ @TownLake @cloudflare/PCX +products/registrar/ @cloudflare/PCX # Rules products/rules/ @cloudflare/PCX @@ -85,8 +106,11 @@ products/time-services/ @lukevalenta @wbl @armfazh @cloudflare/PCX # WAF products/waf/ @cloudflare/firewall @cloudflare/PCX +# Waiting Room +products/waiting-room/ @cloudflare/PCX + # Warp Client -products/warp-client/ @abracchi-tw +products/warp-client/ @cloudflare/PCX # Workers products/workers/ @cloudflare/workers-docs @cloudflare/PCX diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5b396e75020..92b3142bcbf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,29 +13,34 @@ jobs: access: ${{ steps.filter.outputs.access }} analytics: ${{ steps.filter.outputs.analytics }} api: ${{ steps.filter.outputs.api }} - argo-tunnel: ${{ steps.filter.outputs.argo-tunnel }} + api-security: ${{ steps.filter.outputs.api-security }} automatic-platform-optimization: ${{ steps.filter.outputs.automatic-platform-optimization }} bots: ${{ steps.filter.outputs.bots }} byoip: ${{ steps.filter.outputs.byoip }} + cache: ${{ steps.filter.outputs.cache }} + client-ip-geolocation: ${{ steps.filter.outputs.client-ip-geolocation }} cloudflare-one: ${{ steps.filter.outputs.cloudflare-one }} distributed-web: ${{ steps.filter.outputs.distributed-web }} docs-engine: ${{ steps.filter.outputs.docs-engine }} events: ${{ steps.filter.outputs.events }} firewall: ${{ steps.filter.outputs.firewall }} fundamentals: ${{ steps.filter.outputs.fundamentals }} - gateway: ${{ steps.filter.outputs.gateway }} browser-isolation: ${{ steps.filter.outputs.browser-isolation }} http3: ${{ steps.filter.outputs.http3 }} - images: ${{ steps.filter.outputs.images }} + image-resizing: ${{ steps.filter.outputs.image-resizing }} load-balancing: ${{ steps.filter.outputs.load-balancing }} logs: ${{ steps.filter.outputs.logs }} + magic-firewall: ${{ steps.filter.outputs.magic-firewall }} magic-transit: ${{ steps.filter.outputs.magic-transit }} + magic-wan: ${{ steps.filter.outputs.magic-wan }} network-interconnect: ${{ steps.filter.outputs.network-interconnect }} pages: ${{ steps.filter.outputs.pages }} + railgun: ${{ steps.filter.outputs.railgun }} page-shield: ${{ steps.filter.outputs.page-shield }} + partners: ${{ steps.filter.outputs.partners }} randomness-beacon: ${{ steps.filter.outputs.randomness-beacon }} registrar: ${{ steps.filter.outputs.registrar }} - rules: ${{ steps.filter.outputs.rules }} + rules: ${{ steps.filter.outputs.rules }} spectrum: ${{ steps.filter.outputs.spectrum }} ssl: ${{ steps.filter.outputs.ssl }} stream: ${{ steps.filter.outputs.stream }} @@ -62,14 +67,18 @@ jobs: - 'products/analytics/**' api: - 'products/api/**' - argo-tunnel: - - 'products/argo-tunnel/**' + api-security: + - 'products/api-security/**' automatic-platform-optimization: - 'products/automatic-platform-optimization/**' bots: - 'products/bots/**' byoip: - 'products/byoip/**' + cache: + - 'products/cache/**' + client-ip-geolocation: + - 'products/client-ip-geolocation/**' cloudflare-one: - 'products/cloudflare-one/**' distributed-web: @@ -82,26 +91,32 @@ jobs: - 'products/firewall/**' fundamentals: - 'products/fundamentals/**' - gateway: - - 'products/gateway/**' browser-isolation: - 'products/browser-isolation/**' http3: - 'products/http3/**' - images: - - 'products/images/**' + image-resizing: + - 'products/image-resizing/**' load-balancing: - 'products/load-balancing/**' logs: - 'products/logs/**' + magic-firewall: + - 'products/magic-firewall/**' magic-transit: - 'products/magic-transit/**' + magic-wan: + - 'products/magic-wan/**' network-interconnect: - 'products/network-interconnect/**' pages: - 'products/pages/**' page-shield: - 'products/page-shield/**' + partners: + - 'products/partners/**' + railgun: + - 'products/railgun/**' randomness-beacon: - 'products/randomness-beacon/**' registrar: @@ -222,14 +237,14 @@ jobs: npm run ghactionsbootstrap npm run build - build-argo-tunnel: + build-api-security: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.argo-tunnel == 'true' }} + if: ${{ needs.changes.outputs.api-security == 'true' }} defaults: run: shell: bash - working-directory: products/argo-tunnel + working-directory: products/api-security steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -241,7 +256,6 @@ jobs: npm run ghactionsbootstrap npm run build - build-automatic-platform-optimization: runs-on: ubuntu-latest needs: changes @@ -259,7 +273,7 @@ jobs: npm install mkdir .docs npm run ghactionsbootstrap - npm run build + npm run build build-bots: runs-on: ubuntu-latest @@ -298,6 +312,44 @@ jobs: mkdir .docs npm run ghactionsbootstrap npm run build + + build-client-ip-geolocation: + runs-on: ubuntu-latest + needs: changes + if: ${{ needs.changes.outputs.client-ip-geolocation == 'true' }} + defaults: + run: + shell: bash + working-directory: products/client-ip-geolocation + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 14.2.0 + - run: | + npm install + mkdir .docs + npm run ghactionsbootstrap + npm run build + + build-cache: + runs-on: ubuntu-latest + needs: changes + if: ${{ needs.changes.outputs.cache == 'true' }} + defaults: + run: + shell: bash + working-directory: products/cache + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 14.2.0 + - run: | + npm install + mkdir .docs + npm run ghactionsbootstrap + npm run build build-cloudflare-one: runs-on: ubuntu-latest @@ -412,14 +464,14 @@ jobs: npm run ghactionsbootstrap npm run build - build-gateway: + build-browser-isolation: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.gateway == 'true' }} + if: ${{ needs.changes.outputs.browser-isolation == 'true' }} defaults: run: shell: bash - working-directory: products/gateway + working-directory: products/browser-isolation steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -431,14 +483,14 @@ jobs: npm run ghactionsbootstrap npm run build - build-browser-isolation: + build-http3: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.browser-isolation == 'true' }} + if: ${{ needs.changes.outputs.http3 == 'true' }} defaults: run: shell: bash - working-directory: products/browser-isolation + working-directory: products/http3 steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -450,14 +502,14 @@ jobs: npm run ghactionsbootstrap npm run build - build-http3: + build-image-resizing: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.http3 == 'true' }} + if: ${{ needs.changes.outputs.image-resizing == 'true' }} defaults: run: shell: bash - working-directory: products/http3 + working-directory: products/image-resizing steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -469,14 +521,14 @@ jobs: npm run ghactionsbootstrap npm run build - build-images: + build-load-balancing: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.images == 'true' }} + if: ${{ needs.changes.outputs.load-balancing == 'true' }} defaults: run: shell: bash - working-directory: products/images + working-directory: products/load-balancing steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -488,14 +540,14 @@ jobs: npm run ghactionsbootstrap npm run build - build-load-balancing: + build-logs: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.load-balancing == 'true' }} + if: ${{ needs.changes.outputs.logs == 'true' }} defaults: run: shell: bash - working-directory: products/load-balancing + working-directory: products/logs steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -507,14 +559,14 @@ jobs: npm run ghactionsbootstrap npm run build - build-logs: + build-magic-firewall: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.logs == 'true' }} + if: ${{ needs.changes.outputs.magic-firewall == 'true' }} defaults: run: shell: bash - working-directory: products/logs + working-directory: products/magic-firewall steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -545,6 +597,25 @@ jobs: npm run ghactionsbootstrap npm run build + build-magic-wan: + runs-on: ubuntu-latest + needs: changes + if: ${{ needs.changes.outputs.magic-wan == 'true' }} + defaults: + run: + shell: bash + working-directory: products/magic-wan + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 14.2.0 + - run: | + npm install + mkdir .docs + npm run ghactionsbootstrap + npm run build + build-network-interconnect: runs-on: ubuntu-latest needs: changes @@ -582,7 +653,7 @@ jobs: mkdir .docs npm run ghactionsbootstrap npm run build - + build-page-shield: runs-on: ubuntu-latest needs: changes @@ -602,6 +673,44 @@ jobs: npm run ghactionsbootstrap npm run build + build-partners: + runs-on: ubuntu-latest + needs: changes + if: ${{ needs.changes.outputs.partners == 'true' }} + defaults: + run: + shell: bash + working-directory: products/partners + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 14.2.0 + - run: | + npm install + mkdir .docs + npm run ghactionsbootstrap + npm run build + + build-railgun: + runs-on: ubuntu-latest + needs: changes + if: ${{ needs.changes.outputs.railgun == 'true' }} + defaults: + run: + shell: bash + working-directory: products/railgun + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 14.2.0 + - run: | + npm install + mkdir .docs + npm run ghactionsbootstrap + npm run build + build-randomness-beacon: runs-on: ubuntu-latest needs: changes diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 02e83693abe..47e741f84a2 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -15,26 +15,31 @@ jobs: access: ${{ steps.filter.outputs.access }} analytics: ${{ steps.filter.outputs.analytics }} api: ${{ steps.filter.outputs.api }} - argo-tunnel: ${{ steps.filter.outputs.argo-tunnel }} + api-security: ${{ steps.filter.outputs.api-security }} automatic-platform-optimization: ${{ steps.filter.outputs.automatic-platform-optimization }} bots: ${{ steps.filter.outputs.bots }} byoip: ${{ steps.filter.outputs.byoip }} + cache: ${{ steps.filter.outputs.cache }} + client-ip-geolocation: ${{ steps.filter.outputs.client-ip-geolocation }} cloudflare-one: ${{ steps.filter.outputs.cloudflare-one }} distributed-web: ${{ steps.filter.outputs.distributed-web }} docs-engine: ${{ steps.filter.outputs.docs-engine }} events: ${{ steps.filter.outputs.events }} firewall: ${{ steps.filter.outputs.firewall }} fundamentals: ${{ steps.filter.outputs.fundamentals }} - gateway: ${{ steps.filter.outputs.gateway }} browser-isolation: ${{ steps.filter.outputs.browser-isolation }} http3: ${{ steps.filter.outputs.http3 }} - images: ${{ steps.filter.outputs.images }} + image-resizing: ${{ steps.filter.outputs.image-resizing }} load-balancing: ${{ steps.filter.outputs.load-balancing }} logs: ${{ steps.filter.outputs.logs }} + magic-firewall: ${{ steps.filter.outputs.magic-firewall }} magic-transit: ${{ steps.filter.outputs.magic-transit }} + magic-wan: ${{ steps.filter.outputs.magic-wan }} network-interconnect: ${{ steps.filter.outputs.network-interconnect }} pages: ${{ steps.filter.outputs.pages }} page-shield: ${{ steps.filter.outputs.page-shield }} + partners: ${{ steps.filter.outputs.partners }} + railgun: ${{ steps.filter.outputs.railgun }} randomness-beacon: ${{ steps.filter.outputs.randomness-beacon }} registrar: ${{ steps.filter.outputs.registrar }} rules: ${{ steps.filter.outputs.rules }} @@ -64,14 +69,18 @@ jobs: - 'products/analytics/**' api: - 'products/api/**' - argo-tunnel: - - 'products/argo-tunnel/**' + api-security: + - 'products/api-security/**' automatic-platform-optimization: - 'products/automatic-platform-optimization/**' bots: - 'products/bots/**' byoip: - 'products/byoip/**' + cache: + - 'products/cache/**' + client-ip-geolocation: + - 'products/client-ip-geolocation/**' cloudflare-one: - 'products/cloudflare-one/**' distributed-web: @@ -84,26 +93,32 @@ jobs: - 'products/firewall/**' fundamentals: - 'products/fundamentals/**' - gateway: - - 'products/gateway/**' browser-isolation: - 'products/browser-isolation/**' http3: - 'products/http3/**' - images: - - 'products/images/**' + image-resizing: + - 'products/image-resizing/**' load-balancing: - 'products/load-balancing/**' logs: - 'products/logs/**' + magic-firewall: + - 'products/magic-firewall/**' magic-transit: - 'products/magic-transit/**' + magic-wan: + - 'products/magic-wan/**' network-interconnect: - 'products/network-interconnect/**' pages: - 'products/pages/**' page-shield: - 'products/page-shield/**' + partners: + - 'products/partners/**' + railgun: + - 'products/railgun/**' randomness-beacon: - 'products/randomness-beacon/**' registrar: @@ -296,15 +311,15 @@ jobs: workingDirectory: "products/api" environment: "production" wranglerVersion: '1.13.0' - - deploy-argo-tunnel: + + deploy-api-security: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.argo-tunnel == 'true' }} + if: ${{ needs.changes.outputs.api-security == 'true' }} defaults: run: shell: bash - working-directory: products/argo-tunnel + working-directory: products/api-security steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -321,13 +336,13 @@ jobs: uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/argo-tunnel" + workingDirectory: "products/api-security" wranglerVersion: '1.13.0' - name: Publish production uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/argo-tunnel" + workingDirectory: "products/api-security" environment: "production" wranglerVersion: '1.13.0' @@ -430,6 +445,70 @@ jobs: apiToken: ${{ secrets.CF_API_TOKEN }} workingDirectory: "products/byoip" environment: "production" + + deploy-client-ip-geolocation: + runs-on: ubuntu-latest + needs: changes + if: ${{ needs.changes.outputs.client-ip-geolocation == 'true' }} + defaults: + run: + shell: bash + working-directory: products/client-ip-geolocation + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 14.2.0 + - run: | + npm install + mkdir .docs + npm run ghactionsbootstrap + npm run build + env: + WORKERS_ENV: development + - name: Publish staging + uses: cloudflare/wrangler-action@1.2.0 + with: + apiToken: ${{ secrets.CF_API_TOKEN }} + workingDirectory: "products/client-ip-geolocation" + - name: Publish production + uses: cloudflare/wrangler-action@1.2.0 + with: + apiToken: ${{ secrets.CF_API_TOKEN }} + workingDirectory: "products/client-ip-geolocation" + environment: "production" + + deploy-cache: + runs-on: ubuntu-latest + needs: changes + if: ${{ needs.changes.outputs.cache == 'true' }} + defaults: + run: + shell: bash + working-directory: products/cache + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 14.2.0 + - run: | + npm install + mkdir .docs + npm run ghactionsbootstrap + npm run build + env: + WORKERS_ENV: development + - name: Publish staging + uses: cloudflare/wrangler-action@1.2.0 + with: + apiToken: ${{ secrets.CF_API_TOKEN }} + workingDirectory: "products/cache" + - name: Publish production + uses: cloudflare/wrangler-action@1.2.0 + with: + apiToken: ${{ secrets.CF_API_TOKEN }} + workingDirectory: "products/cache" + environment: "production" deploy-cloudflare-one: runs-on: ubuntu-latest @@ -635,14 +714,14 @@ jobs: environment: "production" wranglerVersion: '1.13.0' - deploy-gateway: + deploy-browser-isolation: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.gateway == 'true' }} + if: ${{ needs.changes.outputs.browser-isolation == 'true' }} defaults: run: shell: bash - working-directory: products/gateway + working-directory: products/browser-isolation steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -659,24 +738,24 @@ jobs: uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/gateway" + workingDirectory: "products/browser-isolation" wranglerVersion: '1.13.0' - name: Publish production uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/gateway" + workingDirectory: "products/browser-isolation" environment: "production" wranglerVersion: '1.13.0' - deploy-browser-isolation: + deploy-http3: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.browser-isolation == 'true' }} + if: ${{ needs.changes.outputs.http3 == 'true' }} defaults: run: shell: bash - working-directory: products/browser-isolation + working-directory: products/http3 steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -693,24 +772,24 @@ jobs: uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/browser-isolation" + workingDirectory: "products/http3" wranglerVersion: '1.13.0' - name: Publish production uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/browser-isolation" + workingDirectory: "products/http3" environment: "production" wranglerVersion: '1.13.0' - deploy-http3: + deploy-image-resizing: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.http3 == 'true' }} + if: ${{ needs.changes.outputs.image-resizing == 'true' }} defaults: run: shell: bash - working-directory: products/http3 + working-directory: products/image-resizing steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -727,24 +806,24 @@ jobs: uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/http3" + workingDirectory: "products/image-resizing" wranglerVersion: '1.13.0' - name: Publish production uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/http3" + workingDirectory: "products/image-resizing" environment: "production" wranglerVersion: '1.13.0' - deploy-images: + deploy-load-balancing: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.images == 'true' }} + if: ${{ needs.changes.outputs.load-balancing == 'true' }} defaults: run: shell: bash - working-directory: products/images + working-directory: products/load-balancing steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -761,24 +840,24 @@ jobs: uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/images" + workingDirectory: "products/load-balancing" wranglerVersion: '1.13.0' - name: Publish production uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/images" + workingDirectory: "products/load-balancing" environment: "production" wranglerVersion: '1.13.0' - deploy-load-balancing: + deploy-logs: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.load-balancing == 'true' }} + if: ${{ needs.changes.outputs.logs == 'true' }} defaults: run: shell: bash - working-directory: products/load-balancing + working-directory: products/logs steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -795,24 +874,24 @@ jobs: uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/load-balancing" + workingDirectory: "products/logs" wranglerVersion: '1.13.0' - name: Publish production uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/load-balancing" + workingDirectory: "products/logs" environment: "production" wranglerVersion: '1.13.0' - deploy-logs: + deploy-magic-firewall: runs-on: ubuntu-latest needs: changes - if: ${{ needs.changes.outputs.logs == 'true' }} + if: ${{ needs.changes.outputs.magic-firewall == 'true' }} defaults: run: shell: bash - working-directory: products/logs + working-directory: products/magic-firewall steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -829,13 +908,13 @@ jobs: uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/logs" + workingDirectory: "products/magic-firewall" wranglerVersion: '1.13.0' - name: Publish production uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} - workingDirectory: "products/logs" + workingDirectory: "products/magic-firewall" environment: "production" wranglerVersion: '1.13.0' @@ -873,6 +952,40 @@ jobs: environment: "production" wranglerVersion: '1.13.0' + deploy-magic-wan: + runs-on: ubuntu-latest + needs: changes + if: ${{ needs.changes.outputs.magic-wan == 'true' }} + defaults: + run: + shell: bash + working-directory: products/magic-wan + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 14.2.0 + - run: | + npm install + mkdir .docs + npm run ghactionsbootstrap + npm run build + env: + WORKERS_ENV: development + - name: Publish staging + uses: cloudflare/wrangler-action@1.2.0 + with: + apiToken: ${{ secrets.CF_API_TOKEN }} + workingDirectory: "products/magic-wan" + wranglerVersion: '1.13.0' + - name: Publish production + uses: cloudflare/wrangler-action@1.2.0 + with: + apiToken: ${{ secrets.CF_API_TOKEN }} + workingDirectory: "products/magic-wan" + environment: "production" + wranglerVersion: '1.13.0' + deploy-network-interconnect: runs-on: ubuntu-latest needs: changes @@ -940,6 +1053,13 @@ jobs: workingDirectory: 'products/pages' environment: 'production' wranglerVersion: '1.13.0' + - name: Google Chat Notification + uses: signalnerve/google-chat-notification@master + with: + name: Build + url: ${{ secrets.WDC_TEAM_GOOGLE_CHAT_WEBHOOK }} + status: ${{ job.status }} + if: ${{ failure() }} deploy-page-shield: runs-on: ubuntu-latest @@ -975,6 +1095,72 @@ jobs: environment: 'production' wranglerVersion: '1.13.0' + deploy-partners: + runs-on: ubuntu-latest + needs: changes + if: ${{ needs.changes.outputs.partners == 'true' }} + defaults: + run: + shell: bash + working-directory: products/partners + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 14.2.0 + - run: | + npm install + mkdir .docs + npm run ghactionsbootstrap + npm run build + env: + WORKERS_ENV: development + - name: Publish staging + uses: cloudflare/wrangler-action@1.2.0 + with: + apiToken: ${{ secrets.CF_API_TOKEN }} + workingDirectory: 'products/partners' + wranglerVersion: '1.13.0' + - name: Publish production + uses: cloudflare/wrangler-action@1.2.0 + with: + apiToken: ${{ secrets.CF_API_TOKEN }} + workingDirectory: 'products/partners' + environment: 'production' + wranglerVersion: '1.13.0' + + deploy-railgun: + runs-on: ubuntu-latest + needs: changes + if: ${{ needs.changes.outputs.railgun == 'true' }} + defaults: + run: + shell: bash + working-directory: products/railgun + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 14.2.0 + - run: | + npm install + mkdir .docs + npm run ghactionsbootstrap + npm run build + env: + WORKERS_ENV: development + - name: Publish staging + uses: cloudflare/wrangler-action@1.2.0 + with: + apiToken: ${{ secrets.CF_API_TOKEN }} + workingDirectory: "products/railgun" + - name: Publish production + uses: cloudflare/wrangler-action@1.2.0 + with: + apiToken: ${{ secrets.CF_API_TOKEN }} + workingDirectory: "products/railgun" + environment: "production" + deploy-randomness-beacon: runs-on: ubuntu-latest needs: changes @@ -1414,3 +1600,10 @@ jobs: workingDirectory: "products/workers" environment: "production" wranglerVersion: '1.13.0' + - name: Google Chat Notification + uses: signalnerve/google-chat-notification@master + with: + name: Build + url: ${{ secrets.WDC_TEAM_GOOGLE_CHAT_WEBHOOK }} + status: ${{ job.status }} + if: ${{ failure() }} diff --git a/README.md b/README.md index b3df6ad7666..63e10fbef87 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,6 @@ To get write access to this repo, please reach out to the __Developer Docs__ roo | Analytics | analytics | [Test](https://analytics.cloudflare-docs.workers.dev/analytics) | [Prod](https://developers.cloudflare.com/analytics) | | API | api | [Test](https://api.cloudflare-docs.workers.dev/api) | [Prod](https://developers.cloudflare.com/api) | | Automatic Platform Optimization | automatic-platform-optimization | [Test](https://automatic-platform-optimization.cloudflare-docs.workers.dev/automatic-platform-optimization) | [Prod](https://developers.cloudflare.com/automatic-platform-optimization) | -| Argo Tunnel | argo-tunnel | [Test](https://argo-tunnel.cloudflare-docs.workers.dev/argo-tunnel) | [Prod](https://developers.cloudflare.com/argo-tunnel) | | Bots | bots | [Test](https://bots.cloudflare-docs.workers.dev/bots) | [Prod](https://developers.cloudflare.com/bots) | BYOIP | byoip | [Test](https://byoip.cloudflare-docs.workers.dev/byoip) | [Prod](https://developers.cloudflare.com/byoip) | | Cloudflare One | cloudflare-one | [Test](https://cloudflare-one.cloudflare-docs.workers.dev/cloudflare-one) | [Prod](https://developers.cloudflare.com/cloudflare-one) | @@ -28,14 +27,15 @@ To get write access to this repo, please reach out to the __Developer Docs__ roo | Events | events | [Test](https://events.cloudflare-docs.workers.dev/events) | [Prod](https://developers.cloudflare.com/events) | | Firewall | firewall | [Test](https://firewall.cloudflare-docs.workers.dev/firewall) | [Prod](https://developers.cloudflare.com/firewall) | | Fundamentals | fundamentals | [Test](https://fundamentals.cloudflare-docs.workers.dev/fundamentals) | [Prod](https://developers.cloudflare.com/fundamentals) | -| Gateway | gateway | [Test](https://gateway.cloudflare-docs.workers.dev/gateway) | [Prod](https://developers.cloudflare.com/gateway) | | HTTP/3 | http3 | [Test](https://http3.cloudflare-docs.workers.dev/http3) | [Prod](https://developers.cloudflare.com/http3) | | Image Resizing | images | [Test](https://images.cloudflare-docs.workers.dev/images) | [Prod](https://developers.cloudflare.com/images) | | Load Balancing | load-balancing | [Test](https://load-balancing.cloudflare-docs.workers.dev/load-balancing) | [Prod](https://developers.cloudflare.com/load-balancing) | | Logs | logs | [Test](https://logs.cloudflare-docs.workers.dev/logs) | [Prod](https://developers.cloudflare.com/logs) | +| Magic Firewall | magic-firewall | [Test](https://magic-firewall.cloudflare-docs.workers.dev/magic-firewall) | [Prod](https://developers.cloudflare.com/magic-firewall) | | Magic Transit | magic-transit | [Test](https://magic-transit.cloudflare-docs.workers.dev/magic-transit) | [Prod](https://developers.cloudflare.com/magic-transit) | | Network Interconnect | network-interconnect | [Test](https://network-interconnect.cloudflare-docs.workers.dev/network-interconnect) | [Prod](https://developers.cloudflare.com/network-interconnect) | | Pages | pages | [Test](https://pages.cloudflare-docs.workers.dev/pages) | [Prod](https://developers.cloudflare.com/pages) | +| Railgun | railgun | [Test](https://railgun.cloudflare-docs.workers.dev/railgun) | [Prod](https://developers.cloudflare.com/railgun) | | Randomness Beacon | randomness-beacon | [Test](https://randomness-beacon.cloudflare-docs.workers.dev/randomness-beacon) | [Prod](https://developers.cloudflare.com/randomness-beacon) | | Registrar | registrar | [Test](https://registrar.cloudflare-docs.workers.dev/registrar) | [Prod](https://developers.cloudflare.com/registrar) | | Rules | rules | [Test](https://rules.cloudflare-docs.workers.dev/rules) | [Prod](https://developers.cloudflare.com/rules) | diff --git a/developers.cloudflare.com/docs-config.js b/developers.cloudflare.com/docs-config.js index 341088bf13b..cefd807344c 100644 --- a/developers.cloudflare.com/docs-config.js +++ b/developers.cloudflare.com/docs-config.js @@ -9,8 +9,8 @@ module.exports = { url: "https://cloudflare.com" }], search: { - indexName: "", - apiKey: "", + indexName: "developers-cloudflare", + apiKey: "b23088ab4d346409f9d3ece6606344c3", algoliaOptions: { "facetFilters": "" } }, siteMetadata: { @@ -18,6 +18,6 @@ module.exports = { description: "Browse the latest developer documentation including API reference, articles, and sample code.", author: "@cloudflare", url: "https://developers.cloudflare.com", - image: "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" + image: "https://www.cloudflare.com/img/cf-twitter-card.png" } } diff --git a/developers.cloudflare.com/gatsby-config.js b/developers.cloudflare.com/gatsby-config.js index 90553ba003e..c2de45bec9c 100755 --- a/developers.cloudflare.com/gatsby-config.js +++ b/developers.cloudflare.com/gatsby-config.js @@ -13,7 +13,6 @@ const products = [ "access", "analytics", "api", - "argo-tunnel", "byoip", "cloudflare-for-teams", "cloudflare-one", @@ -22,13 +21,13 @@ const products = [ "events", "firewall", "fundamentals", - "gateway", "http3", "images", "load-balancing", "logs", "magic-transit", "network-interconnect", + "railgun", "randomness-beacon", "registrar", "spectrum", diff --git a/developers.cloudflare.com/package.json b/developers.cloudflare.com/package.json index c9817731634..a7fd4437a42 100755 --- a/developers.cloudflare.com/package.json +++ b/developers.cloudflare.com/package.json @@ -5,8 +5,8 @@ "version": "0.1.0", "author": "Cloudflare ", "dependencies": { - "@adaptivelink/pops": "0.2.25", - "@cloudflare/cloudflare-brand-assets": "4.7.5", + "@adaptivelink/pops": "0.3.3", + "@cloudflare/cloudflare-brand-assets": "4.7.7", "@material-ui/core": "4.11.0", "@mdx-js/mdx": "1.6.6", "@mdx-js/react": "1.6.6", diff --git a/developers.cloudflare.com/src/components/product-grid.js b/developers.cloudflare.com/src/components/product-grid.js index 2865c2153b5..8f399ea7eaa 100644 --- a/developers.cloudflare.com/src/components/product-grid.js +++ b/developers.cloudflare.com/src/components/product-grid.js @@ -6,22 +6,27 @@ const $ = {} $["1.1.1.1"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/1.1.1.1.js").pathD $["analytics"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/analytics.js").pathD $["api"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/api.js").pathD +$["api-security"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/page-shield.js").pathD $["automatic-platform-optimization"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/automatic-platform-optimization.js").pathD $["bots"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/bots.js").pathD $["byoip"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/byoip.js").pathD +$["cache"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/cache.js").pathD $["cloudflare-for-teams"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/cloudflare-for-teams.js").pathD $["cloudflare-one"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/cloudflare-one.js").pathD $["distributed-web"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/distributed-web.js").pathD $["firewall"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/firewall.js").pathD $["http3"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/http3.js").pathD -$["images"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/images.js").pathD +$["image-resizing"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/images.js").pathD $["fundamentals"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/fundamentals.js").pathD $["load-balancing"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/load-balancing.js").pathD $["logs"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/logs.js").pathD $["magic-transit"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/magic-transit.js").pathD +$["magic-firewall"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/firewall.js").pathD +$["magic-wan"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/magic-wan.js").pathD $["network-interconnect"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/network-interconnect.js").pathD $["pages"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/pages.js").pathD $["page-shield"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/page-shield.js").pathD +$["partners"] = require("../../../products/partners/src/content/icons/partners.js").pathD $["railgun"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/railgun.js").pathD $["randomness-beacon"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/randomness-beacon.js").pathD $["registrar"] = require("@cloudflare/cloudflare-brand-assets/resources/product-icons/registrar.js").pathD @@ -43,6 +48,11 @@ const products = [ path: "api", icon: "api", }, + { + title: "API Security", + path: "api-security", + icon: "page-shield", + }, { title: "Analytics", path: "analytics", @@ -74,6 +84,11 @@ const products = [ path: "byoip", icon: "byoip", }, + { + title: "Cache", + path: "cache", + icon: "cache", + }, { title: "Cloudflare for Teams", path: "cloudflare-one", @@ -103,8 +118,8 @@ const products = [ }, { title: "Image Resizing", - path: "images", - icon: "images", + path: "image-resizing", + icon: "image-resizing", }, { title: "Cloudflare Fundamentals", @@ -127,6 +142,16 @@ const products = [ path: "magic-transit", icon: "magic-transit", }, + { + title: "Magic Firewall", + path: "magic-firewall", + icon: "magic-firewall", + }, + { + title: "Magic WAN", + path: "magic-wan", + icon: "magic-wan", + }, { title: "Network Interconnect", path: "network-interconnect", @@ -143,9 +168,14 @@ const products = [ path: "page-shield", icon: "page-shield", }, + { + title: "Partners", + path: "partners", + icon: "partners", + }, { title: "Railgun", - href: "https://www.cloudflare.com/docs/railgun/", + path: "railgun", icon: "railgun", }, { @@ -217,7 +247,7 @@ const products = [ ] const ProductGridLink = ({ product }) => ( - + {product.title} diff --git a/developers.cloudflare.com/src/components/seo.js b/developers.cloudflare.com/src/components/seo.js index 5f5bf885d44..26a39eb9824 100755 --- a/developers.cloudflare.com/src/components/seo.js +++ b/developers.cloudflare.com/src/components/seo.js @@ -54,6 +54,7 @@ function SEO({ lang, title, description, meta }) { + diff --git a/developers.cloudflare.com/src/components/site-header.js b/developers.cloudflare.com/src/components/site-header.js index 6ba6b0d09b6..8e301cba2e6 100644 --- a/developers.cloudflare.com/src/components/site-header.js +++ b/developers.cloudflare.com/src/components/site-header.js @@ -5,6 +5,7 @@ import { Link } from "gatsby" import CloudflareLogo from "cloudflare-docs-engine/src/components/cloudflare-logo" import DocsNavLogoLockup from "cloudflare-docs-engine/src/components/docs-nav-logo-lockup" import ThemeToggle from "cloudflare-docs-engine/src/components/theme-toggle" +import SiteSearch from "./site-search" import "../css/components/site-header.css" @@ -26,6 +27,10 @@ const SiteHeader = () => ( +
+ +
+
Docs diff --git a/developers.cloudflare.com/src/components/site-page.js b/developers.cloudflare.com/src/components/site-page.js index 6bf06cd4b40..2fd7b895965 100755 --- a/developers.cloudflare.com/src/components/site-page.js +++ b/developers.cloudflare.com/src/components/site-page.js @@ -26,7 +26,6 @@ const SitePage = ({ pageContext: page, children, location }) => { const htmlProps = {} htmlProps["is-site-page"] = "" htmlProps["is-docs-page"] = "" - htmlProps["search-disabled"] = "" return ( <> diff --git a/developers.cloudflare.com/src/components/site-search.js b/developers.cloudflare.com/src/components/site-search.js new file mode 100644 index 00000000000..9a5610e363b --- /dev/null +++ b/developers.cloudflare.com/src/components/site-search.js @@ -0,0 +1,174 @@ +// Based on cloudflare-docs-engine/src/components/docs-search.js +// Keep these components (mostly) in sync. +// +// Due to what seems like a Gatsby bug which occurs only with `gatsby build` +// and not `gatsby develop`, when any file imported from cloudflare-docs-engine +// contains `useStaticQuery` the build fails due to a relative import issue with +// the way GraphQL stores the cached static JSON. + +import React, { useCallback, useEffect, useState } from "react" +import Helmet from "react-helmet" + +import { useStaticQuery, graphql } from "gatsby" + +import AccessibleSVG from "cloudflare-docs-engine/src/components/accessible-svg" + +import "../css/components/site-search.css" + +const SiteSearch = () => { + const { site: { siteMetadata }} = useStaticQuery( + graphql` + query { + site { + siteMetadata { + cloudflareDocs { + search { + indexName + apiKey + algoliaOptions { + facetFilters + } + } + } + } + } + } + ` + ) + + const { + search: { + indexName, + apiKey, + algoliaOptions + } + } = siteMetadata.cloudflareDocs + + const enableSearch = indexName && apiKey && algoliaOptions + + let [scriptAdded, setScriptAdded] = useState(false) + let [scriptLoaded, setScriptLoaded] = useState(false) + let [searchFocused, setSearchFocused] = useState(false) + + const onSearchFocus = useCallback(() => setSearchFocused(true), []) + const onSearchBlur = useCallback(() => setSearchFocused(false), []) + + useEffect(() => { + if (enableSearch && !scriptAdded) { + const searchScript = document.createElement('script') + searchScript.type = "text/javascript" + searchScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/docsearch.js/2.6.3/docsearch.min.js' + searchScript.onload = () => { setScriptLoaded(true) } + document.body.appendChild(searchScript) + setScriptAdded(true) + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + + useEffect(() => { + const init = () => { + const search = window.docsearch({ + indexName, + apiKey, + algoliaOptions, + + // TODO: pass DOM in with Reacth.createRef? + inputSelector: "#SiteSearch--input", + + autocompleteOptions: { + // https://github.com/algolia/autocomplete.js#global-options + autoselect: true, + openOnFocus: true, + clearOnSelected: false, + tabAutocomplete: false, + + appendTo: ".SiteSearch--input-wrapper", + hint: false, + + autoselectOnBlur: matchMedia("(pointer: course)").matches + }, + + // https://docsearch.algolia.com/docs/behavior + handleSelected: (input, event, suggestion, datasetNumber, context) => { + const url = new URL(suggestion.url) + + // Don’t scroll to hash when it’s just the h1. + if (suggestion.isLvl0) { + url.hash = "" + } + window.location.href = url.toString() + }, + + transformData: function(hits) { + // Remove empty results + for (let i = hits.length - 1; i >= 0; i -= 1) { + if (!hits[i].hierarchy.lvl0 && !hits[i].hierarchy.lvl1) { + hits.splice(i, 1) + } + } + } + }) + + const autocompleteWrapper = search.autocomplete.autocomplete.getWrapper() + + search.autocomplete.on("autocomplete:shown", event => { + autocompleteWrapper.setAttribute("data-expanded", true) + }) + + search.autocomplete.on("autocomplete:closed", event => { + autocompleteWrapper.setAttribute("data-expanded", false) + }) + + const input = search.input[0] + + document.addEventListener("keydown", event => { + if (event.target === input) return + + const slashShortcut = event.key === "/" + const commandShortcut = event.key === "S" && event.shiftKey + + if (slashShortcut || commandShortcut) { + event.preventDefault() + window.scrollTo(0, 0) + input.focus() + } + }) + } + + if (enableSearch && scriptLoaded) { + init() + } + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [scriptLoaded]) + + if (!enableSearch) { + return ( + <> + + + + + ) + } + + return ( + <> +
+
+ +
+ + + +
+
+
+ + ) +} + +export default SiteSearch + diff --git a/developers.cloudflare.com/src/css/components/site-header.css b/developers.cloudflare.com/src/css/components/site-header.css index b6cacd1a669..21bc1537660 100644 --- a/developers.cloudflare.com/src/css/components/site-header.css +++ b/developers.cloudflare.com/src/css/components/site-header.css @@ -50,13 +50,6 @@ margin-right: auto; } -@supports ((-webkit-backdrop-filter: blur(1em)) or (backdrop-filter:blur(1em))) { - .SiteHeader { - background: rgba(var(--background-color-rgb), .8); - -webkit-backdrop-filter: blur(1em); - backdrop-filter: blur(1em) - } -} .SiteHeader--logo-section { display: flex; @@ -85,8 +78,16 @@ .SiteHeader--theme-toggle { display: flex; align-items: center; - margin-left: auto; - padding-right: 1rem; + padding: 0 1rem; +} + +.SiteHeader--search { + flex: 1; + margin-right: auto; +} + +[search-disabled] .SiteHeader--search { + visibility: hidden; } .SiteHeader--nav { @@ -139,6 +140,14 @@ display: none; } + .SiteHeader--search { + flex-basis: 3em; + flex-grow: 0; + margin-left: auto; + margin-right: 0; + max-width: 100vw; + } + .SiteHeader--cloudflare-logo-link { --docs-logo-lockup-gap: var(--docs-logo-lockup-gap-small); --logo-size: 2.5em; @@ -146,6 +155,13 @@ } .SiteHeader--theme-toggle { + padding-left: 0; padding-right: .9rem; } } + +@media (max-width: 1024px) { + .SiteHeader--nav { + display: none; + } +} diff --git a/developers.cloudflare.com/src/css/components/site-page.css b/developers.cloudflare.com/src/css/components/site-page.css index fff15a5d3ba..5b249a9fa10 100755 --- a/developers.cloudflare.com/src/css/components/site-page.css +++ b/developers.cloudflare.com/src/css/components/site-page.css @@ -1,7 +1,7 @@ /* TODO: move to @cloudflare/cloudflare-docs-engine/src/css/docs/components/docs-page.css */ [is-site-page] .DocsPage { --docs-sidebar-width: 0; - --docs-content-gap: 1em; + --docs-content-gap: 3.7em; } html[is-site-page] .DocsContent { diff --git a/developers.cloudflare.com/src/css/components/site-search.css b/developers.cloudflare.com/src/css/components/site-search.css new file mode 100644 index 00000000000..c29504c0c7c --- /dev/null +++ b/developers.cloudflare.com/src/css/components/site-search.css @@ -0,0 +1,311 @@ +.SiteSearch { + --text-indent: calc(var(--docs-content-gap) + 1px); + height: var(--docs-header-height); + flex: 1; +} + +.SiteSearch--input-wrapper { + position: relative; + height: 100%; +} + +.SiteSearch--input { + position: relative; + color: inherit; + height: 100%; + width: 100%; + border: 0; + padding: 0 var(--text-indent) .05em; + background: transparent; + outline: none; + z-index: 2; +} + +@-moz-document url-prefix() { + .SiteSearch--input { + letter-spacing: 0; + } +} + +.SiteSearch--input::placeholder { + color: rgba(var(--color-rgb), .45); + opacity: 1; +} + +[theme="dark"] .SiteSearch--input::placeholder { + color: rgba(var(--color-rgb), .55); +} + +.SiteSearch--input-icon { + position: absolute; + top: 0; + bottom: .05em; + margin-top: auto; + margin-bottom: auto; + left: 2.2em; + height: .8823529411em; + width: .8823529411em; + pointer-events: none; + opacity: .5; + transition: color .3s ease, opacity .3s ease; + z-index: 3; +} + +.SiteSearch--input-wrapper:focus-within .SiteSearch--input-icon { + color: var(--orange); + opacity: 1; +} + +[theme="dark"] .SiteSearch--input { + background: + linear-gradient(to right, + rgba(var(--shadow-color-rgb), .1) 0%, + rgba(var(--shadow-color-rgb), .1) calc(30% - 6em), + rgba(var(--shadow-color-rgb), 0) 30% + ); +} + +/* Algolia DocSearch (https://docsearch.algolia.com) */ + +.SiteSearch .algolia-autocomplete { + --dropdown-text-indent: var(--text-indent); + --suggestion-item-vertical-padding: .5em; + + /* Combat Algolia-set inline styles */ + display: block !important; + top: 0 !important; + left: 0 !important; + right: auto !important; + z-index: 1 !important; + + background: var(--background-color); + + --box-shadow: + 0 3rem 6rem -1.2rem rgba(var(--shadow-color-rgb), .25), + 0 3rem 6rem -3rem rgba(var(--shadow-color-rgb), .3); + + --backdrop-box-shadow-alpha: .07; + --backdrop-box-shadow: + 0 0 0 999em rgba(var(--shadow-color-rgb), var(--backdrop-box-shadow-alpha)); + + box-shadow: var(--box-shadow), var(--backdrop-box-shadow); + + border-radius: 0 0 .5em .5em; + will-change: opacity; + transition: opacity .15s ease; +} + +[theme="dark"] .SiteSearch .algolia-autocomplete { + --dark-theme-shadow-offset: 1px; + --dropdown-text-indent: calc(var(--text-indent) - var(--dark-theme-shadow-offset)); + --box-shadow: 0 0 0 1px rgb(var(--shadow-color-rgb), .3), 0 .3em 2em rgb(var(--shadow-color-rgb), .3); + --backdrop-box-shadow-alpha: .3; + background: var(--gray-0); + margin-left: var(--dark-theme-shadow-offset); +} + +.SiteSearch .algolia-autocomplete[style*="display: none"], +.SiteSearch .algolia-autocomplete:not([data-expanded="true"]) { + opacity: 0; + --backdrop-box-shadow: none; + pointer-events: none; +} + +@supports ((-webkit-backdrop-filter: blur(1em)) or (backdrop-filter: blur(1em))) { + .SiteSearch .algolia-autocomplete { + background: rgba(var(--background-color-rgb), .8); + -webkit-backdrop-filter: saturate(200%) blur(1.25em); + backdrop-filter: saturate(200%) blur(1.25em); + } + + [theme="dark"] .SiteSearch .algolia-autocomplete { + background: rgba(var(--gray-0-rgb), .8); + } + + /* Safari only hack */ + @media not all and (min-resolution:.001dpcm) { @media { + .SiteSearch .algolia-autocomplete { + background: rgba(var(--background-color-rgb), 1); + } + }} +} + +.SiteSearch .algolia-autocomplete [class|="ds-dataset"] > *:first-child { + position: relative; + --padding-top: calc(var(--docs-header-height) + .66rem); + padding: var(--padding-top) var(--dropdown-text-indent) 0; +} + +.SiteSearch .algolia-autocomplete [class|="ds-dataset"] > *:first-child::before { + content: ""; + position: absolute; + left: 0; + right: 0; + top: var(--docs-header-height); + margin-top: -1px; + height: 1px; + background: rgba(var(--color-rgb), .07); +} + +[theme="dark"] .SiteSearch .algolia-autocomplete [class|="ds-dataset"] > *:first-child::before { + margin-top: 0; + background: rgba(var(--color-rgb), .07); + box-shadow: + 0 -1px rgba(var(--shadow-color-rgb), .2), + 0 calc(-1 * var(--docs-header-height)) rgba(var(--shadow-color-rgb), .1); +} + +.SiteSearch .ds-suggestion { + display: block; + --horizontal-padding: 1em; + padding: var(--suggestion-item-vertical-padding) var(--horizontal-padding); + margin: 0 calc(-1 * var(--horizontal-padding)); + border-radius: .25em; +} + +.SiteSearch .ds-suggestion.ds-cursor { + background: rgba(var(--gray-5-rgb), .2); +} + +[theme="dark"] .SiteSearch .ds-suggestion.ds-cursor { + background: rgba(var(--gray-6-rgb), .15); +} + +.SiteSearch a.algolia-docsearch-suggestion { + display: block; + color: inherit; + text-decoration: none; +} + +.SiteSearch .algolia-docsearch-suggestion--text { + font-size: .9em; + color: rgba(var(--color-rgb), .8); +} + +.SiteSearch .algolia-docsearch-suggestion--highlight { + --highlight-opacity: .2; + background-color: rgba(var(--orange-rgb), var(--highlight-opacity)); + color: var(--color); +} + +[theme="dark"] .SiteSearch .algolia-docsearch-suggestion--highlight { + --highlight-opacity: .4; +} + +.SiteSearch .algolia-docsearch-suggestion--no-results { + padding-top: var(--suggestion-item-vertical-padding); + margin-bottom: 1em; +} + +.SiteSearch .algolia-docsearch-suggestion--no-results .algolia-docsearch-suggestion--text { + padding-top: var(--suggestion-item-vertical-padding); + font-size: 1em; +} + +.SiteSearch .algolia-docsearch-suggestion--no-results b { + font-weight: inherit; +} + +.SiteSearch .algolia-docsearch-footer { + margin-top: .5rem; + padding: 0 var(--dropdown-text-indent) 2rem; + font-size: .7em; + opacity: .5; +} + +.SiteSearch .algolia-docsearch-footer--logo { + color: inherit; +} + +.SiteSearch .algolia-docsearch-suggestion--category-header-lvl0:empty::before { + content: "Document"; +} + +.SiteSearch .algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--subcategory-column, +.SiteSearch .algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--subcategory-inline, +.SiteSearch .algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--title { + display: none; +} + +.SiteSearch .algolia-docsearch-suggestion:not(.algolia-docsearch-suggestion__main) .algolia-docsearch-suggestion--subcategory-column, +.SiteSearch .algolia-docsearch-suggestion:not(.algolia-docsearch-suggestion__main) .algolia-docsearch-suggestion--subcategory-inline { + display: none; +} + +.SiteSearch .algolia-docsearch-suggestion:not(.algolia-docsearch-suggestion__main) .algolia-docsearch-suggestion--category-header, +.SiteSearch .algolia-docsearch-suggestion:not(.algolia-docsearch-suggestion__main) .algolia-docsearch-suggestion--wrapper, +.SiteSearch .algolia-docsearch-suggestion:not(.algolia-docsearch-suggestion__main) .algolia-docsearch-suggestion--content, +.SiteSearch .algolia-docsearch-suggestion:not(.algolia-docsearch-suggestion__main) .algolia-docsearch-suggestion--title { + display: inline; +} + +.SiteSearch .algolia-docsearch-suggestion:not(.algolia-docsearch-suggestion__main) .algolia-docsearch-suggestion--content:not(.algolia-docsearch-suggestion--no-results)::before { + content: "›"; + opacity: .15; + padding: 0 .333em; + display: inline-block; + transform: scale3d(1.5, 1.2, 1); +} + +.SiteSearch .algolia-docsearch-suggestion:not(.algolia-docsearch-suggestion__main) .algolia-docsearch-suggestion--content:not(.algolia-docsearch-suggestion--no-results) .algolia-docsearch-suggestion--title::before { + content: "#"; + padding-right: .25em; + opacity: .5; +} + +@media (max-width: 768px) { + .SiteSearch { + pointer-events: all; + } + + .SiteSearch--input:not(:focus) { + padding: 0; + opacity: 0; + } + + .SiteSearch[is-focused] { + position: fixed; + top: 0; + left: 0; + right: 0; + --text-indent: 3rem; + z-index: 2; + } + + .SiteSearch--input-icon { + left: 15px; + height: 15px; + width: 15px; + } + + .SiteSearch--input-wrapper:focus-within .SiteSearch--input-icon { + left: 19px; + } + + .SiteSearch[is-focused] .SiteSearch--input-wrapper { + background: var(--background-color); + height: var(--docs-header-height); + } + + .SiteSearch--input-bottom-border { + display: none; + } + + .SiteSearch .algolia-autocomplete { + position: fixed; + top: var(--docs-header-height); + width: 100% !important; + } + + @supports ((-webkit-backdrop-filter: blur(1em)) or (backdrop-filter: blur(1em))) { + .SiteSearch .algolia-autocomplete { + background: var(--background-color); + -webkit-backdrop-filter: none; + backdrop-filter: none; + } + + [theme="dark"] .SiteSearch .algolia-autocomplete { + background: var(--background-color); + } + } +} diff --git a/developers.cloudflare.com/src/images/cf-twitter-card.png b/developers.cloudflare.com/src/images/cf-twitter-card.png new file mode 100644 index 00000000000..bd726b62fd7 Binary files /dev/null and b/developers.cloudflare.com/src/images/cf-twitter-card.png differ diff --git a/developers.cloudflare.com/static/robots.txt b/developers.cloudflare.com/static/robots.txt index a54d276d23a..b50e84daa54 100644 --- a/developers.cloudflare.com/static/robots.txt +++ b/developers.cloudflare.com/static/robots.txt @@ -1,16 +1,15 @@ User-agent: * Allow: / Disallow: /browser-isolation +Disallow: /client-ip-geolocation Sitemap: https://developers.cloudflare.com/developers/sitemap.xml -Sitemap: https://developers.cloudflare.com/onedot/sitemap.xml -Sitemap: https://developers.cloudflare.com/access/sitemap.xml +Sitemap: https://developers.cloudflare.com/1.1.1.1/sitemap.xml Sitemap: https://developers.cloudflare.com/analytics/sitemap.xml Sitemap: https://developers.cloudflare.com/api/sitemap.xml -Sitemap: https://developers.cloudflare.com/argo-tunnel/sitemap.xml +Sitemap: https://developers.cloudflare.com/api-security/sitemap.xml Sitemap: https://developers.cloudflare.com/automatic-platform-optimization/sitemap.xml Sitemap: https://developers.cloudflare.com/bots/sitemap.xml -Sitemap: https://developers.cloudflare.com/browser-isolation/sitemap.xml Sitemap: https://developers.cloudflare.com/byoip/sitemap.xml Sitemap: https://developers.cloudflare.com/cloudflare-one/sitemap.xml Sitemap: https://developers.cloudflare.com/distributed-web/sitemap.xml @@ -18,15 +17,16 @@ Sitemap: https://developers.cloudflare.com/docs-engine/sitemap.xml Sitemap: https://developers.cloudflare.com/events/sitemap.xml Sitemap: https://developers.cloudflare.com/firewall/sitemap.xml Sitemap: https://developers.cloudflare.com/fundamentals/sitemap.xml -Sitemap: https://developers.cloudflare.com/gateway/sitemap.xml Sitemap: https://developers.cloudflare.com/http3/sitemap.xml -Sitemap: https://developers.cloudflare.com/images/sitemap.xml +Sitemap: https://developers.cloudflare.com/image-resizing/sitemap.xml Sitemap: https://developers.cloudflare.com/load-balancing/sitemap.xml Sitemap: https://developers.cloudflare.com/logs/sitemap.xml Sitemap: https://developers.cloudflare.com/magic-transit/sitemap.xml +Sitemap: https://developers.cloudflare.com/magic-firewall/sitemap.xml Sitemap: https://developers.cloudflare.com/network-interconnect/sitemap.xml Sitemap: https://developers.cloudflare.com/pages/sitemap.xml Sitemap: https://developers.cloudflare.com/page-shield/sitemap.xml +Sitemap: https://developers.cloudflare.com/railgun/sitemap.xml Sitemap: https://developers.cloudflare.com/randomness-beacon/sitemap.xml Sitemap: https://developers.cloudflare.com/registrar/sitemap.xml Sitemap: https://developers.cloudflare.com/rules/sitemap.xml diff --git a/developers.cloudflare.com/wrangler.toml b/developers.cloudflare.com/wrangler.toml index db09640d0c3..8d9f0e6bea6 100644 --- a/developers.cloudflare.com/wrangler.toml +++ b/developers.cloudflare.com/wrangler.toml @@ -8,6 +8,9 @@ workers_dev = false account_id = "b54f07a6c269ecca2fa60f1ae4920c99" # cloudflare-docs.workers.dev zone_id = "351cf9fc660523187714fa772ad5ca49" route = "https://developers.cloudflare.com/*" +kv_namespaces = [ + { binding = "REDIRECTS", id = "42719e2c4502479e9145f347015e5b34" } +] [site] bucket = "./public" diff --git a/products/.DS_Store b/products/.DS_Store deleted file mode 100644 index 5008ddfcf53..00000000000 Binary files a/products/.DS_Store and /dev/null differ diff --git a/products/1.1.1.1/docs-config.js b/products/1.1.1.1/docs-config.js index 72495b73211..0f0af8eede5 100644 --- a/products/1.1.1.1/docs-config.js +++ b/products/1.1.1.1/docs-config.js @@ -24,6 +24,6 @@ module.exports = { description: "A blazing fast DNS resolver built for private browsing.", author: "@cloudflare", url: "https://developers.cloudflare.com/1.1.1.1", - image: "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" + image: "https://www.cloudflare.com/img/cf-twitter-card.png" } } diff --git a/products/1.1.1.1/src/content/1.1.1.1-for-families/index.md b/products/1.1.1.1/src/content/1.1.1.1-for-families/index.md index 24f65cfb0ed..4992be737a2 100644 --- a/products/1.1.1.1/src/content/1.1.1.1-for-families/index.md +++ b/products/1.1.1.1/src/content/1.1.1.1-for-families/index.md @@ -1,10 +1,11 @@ --- order: 3 +pcx-content: interim --- # 1.1.1.1 for Families -1.1.1.1 for Families is the easiest way to add a layer of protection to your home network, and protect it from malware and adult content. 1.1.1.1 for Families leverages Cloudflare's global network to ensure that it is fast and secure around the world, and includes the same [strong privacy guarantees](/1.1.1.1/privacy/public-dns-resolver/) that we committed to when we launched 1.1.1.1 two years ago. +1.1.1.1 for Families is the easiest way to add a layer of protection to your home network, and protect it from malware and adult content. 1.1.1.1 for Families leverages Cloudflare's global network to ensure that it is fast and secure around the world, and includes the same [strong privacy guarantees](/privacy/public-dns-resolver/) that we committed to when we launched 1.1.1.1 two years ago. 1.1.1.1 for Families has two default options: one that blocks malware and the other that blocks malware and adult content. You choose which setting you want depending on which IP address you configure. @@ -12,21 +13,21 @@ order: 3 Using the following DNS resolvers will block malicious content: -* **1.1.1.2** -* **1.0.0.2** -* **2606:4700:4700::1112** -* **2606:4700:4700::1002** +* `1.1.1.2` +* `1.0.0.2` +* `2606:4700:4700::1112` +* `2606:4700:4700::1002` ## Block malware and adult content When you change your DNS resolvers to the addresses below, 1.1.1.1 for Families will block malware and adult content. -* **1.1.1.3** -* **1.0.0.3** -* **2606:4700:4700::1113** -* **2606:4700:4700::1003** +* `1.1.1.3` +* `1.0.0.3` +* `2606:4700:4700::1113` +* `2606:4700:4700::1003` -Cloudflare will return 0.0.0.0 if the FQDN or IP in a DNS query is classified as malicious. +Cloudflare will return `0.0.0.0` if the FQDN or IP in a DNS query is classified as malicious. Ready to set it up? You’ll find an easy guide for every device in the [setup instructions](/1.1.1.1-for-families/setup-instructions/) page. @@ -36,4 +37,4 @@ Customers can decide to block certain categories, like “Gambling” or “Spor If you are using Gateway or 1.1.1.1 for Families and see a domain that you believe is miscategorized, fill in this [form](https://radar.cloudflare.com/categorization-feedback/) to bring it to our attention. Your submission will remain anonymous. -We review these submissions to improve Cloudflare’s categorization. +We review these submissions to improve Cloudflare’s categorization. \ No newline at end of file diff --git a/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/dns-over-https.md b/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/dns-over-https.md index e37e0df3f6c..a303551cdba 100644 --- a/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/dns-over-https.md +++ b/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/dns-over-https.md @@ -1,16 +1,19 @@ --- order: 5 +pcx-content: interim --- # DNS over HTTPS You can send DNS queries in an encrypted fashion for 1.1.1.1 for Families. If you have DNS over HTTPS compliant client, use the following URLs to use 1.1.1.1 for Families. ## Block Malware -To block all malware use the following URL + +To block all malware use the following URL: https://security.cloudflare-dns.com/dns-query ## Block Malware and Adult Content -To block all malware and adult content use following URL + +To block all malware and adult content use following URL: https://family.cloudflare-dns.com/dns-query \ No newline at end of file diff --git a/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/index.md b/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/index.md index f9e47ecfde0..7af7e8a51a2 100644 --- a/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/index.md +++ b/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/index.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content: navigation --- # Setup instructions @@ -19,3 +20,7 @@ See how you can send DNS queries to 1.1.1.1 for Families from Windows. ## [Linux](./linux/) See how you can send DNS queries to 1.1.1.1 for Families from a Linux distro. + +## [DNS over HTTPS](./dns-over-https/) + +See how you can encrypt and protect your DNS queries. diff --git a/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/linux.md b/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/linux.md index 69fff79f487..cf7898ac4b2 100644 --- a/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/linux.md +++ b/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/linux.md @@ -1,7 +1,10 @@ --- order: 4 +pcx-content: how-to --- +import CaptivePortals from "../../_partials/_captive-portals.md" + # Linux setup instructions ## Block malware @@ -9,73 +12,152 @@ order: 4 ### Ubuntu #### IPv4 -* Click System > Preferences > Network Connections. -* Click on the Wireless tab, then choose the Wi-Fi network you are currently connected to. -* Click Edit then click IPv4. -* Remove any IP addresses that may be already listed and in their place add the following IP addresses: - * **1.1.1.2** - * **1.0.0.2** -* Click Apply + +1. Click **System** > **Preferences** > **Network Connections**. +1. Click on the **Wireless** tab, then choose the Wi-Fi network you are currently connected to. +1. Click **Edit** > **IPv4**. +1. Remove any IP addresses that may be already listed and in their place add the following IP addresses: + + ```txt + 1.1.1.2 + 1.0.0.2 + ``` + +1. Click **Apply**. #### IPv6 -* Click System > Preferences > Network Connections. -* Click on the Wireless tab, then choose the Wi-Fi network you are currently connected to. -* Then go to IPv6. -* Add the IPv6 address listed below: - * **2606:4700:4700::1112** - * **2606:4700:4700::1002** -* Click Apply. + +1. Click **System** > **Preferences** > **Network Connections**. +1. Click on the **Wireless** tab, then choose the Wi-Fi network you are currently connected to. +1. Go to **IPv6**. +1. Add the IPv6 addresses listed below: + + ```txt + 2606:4700:4700::1112 + 2606:4700:4700::1002 + ``` + +1. Click **Apply**. ### Debian #### IPv4 -* In the command line, type: `sudo vim /etc/resolv.conf` -* Replace the nameserver lines with: (Since you are using vim press the i key on your keyboard to edit the document) - * **1.1.1.2** - * **1.0.0.2** -* Save and exit vim by pressing the ESC key on your keyboard. Then after lifting the key type `:wq`. + +1. In the command line, type: + + ```bash + sudo vim /etc/resolv.conf + ``` + +1. Press the i key on your keyboard to edit the document. +1. Replace the nameserver lines with: + + ```txt + 1.1.1.2 + 1.0.0.2 + ``` + +2. Press the ESC key on your keyboard to save and exit vim. Then, after lifting the key, type: + + ``` + :wq + ``` #### IPv6 -* In the command line, type: `sudo vim /etc/resolv.conf` -* Add the IPv6 address listed below: - * **2606:4700:4700::1112** - * **2606:4700:4700::1002** -* Save and exit vim by pressing the ESC key on your keyboard. Then after lifting the key type `:wq` + +1. In the command line, type: + + ```bash + sudo vim /etc/resolv.conf + ``` + +1. Add the IPv6 address listed below: + + ```txt + 2606:4700:4700::1112 + 2606:4700:4700::1002 + ``` + +1. Press the ESC key on your keyboard to save and exit vim. Then, after lifting the key, type: + + ``` + :wq + ``` ## Block Malware and Adult Content ### Ubuntu #### IPv4 -* Click System > Preferences > Network Connections. -* Click on the Wireless tab, then choose the Wi-Fi network you are currently connected to. -* Click Edit then click IPv4. -* Remove any IP addresses that may be already listed and in their place add the following IP addresses: - * **1.1.1.3** - * **1.0.0.3** -* Click Apply + +1. Click **System** > **Preferences** > **Network Connections**. +1. Click on the **Wireless** tab, then choose the Wi-Fi network you are currently connected to. +1. Click **Edit** > **IPv4**. +1. Remove any IP addresses that may be already listed and in their place add the following IP addresses: + + ```txt + 1.1.1.3 + 1.0.0.3 + ``` +1. Click **Apply**. #### IPv6 -* Click System > Preferences > Network Connections. -* Click on the Wireless tab, then choose the Wi-Fi network you are currently connected to. -* Then go to IPv6. -* Add the IPv6 address listed below: - * **2606:4700:4700::1113** - * **2606:4700:4700::1003** -* Click Apply. + +1. Click **System** > **Preferences** > **Network Connections**. +1. Click on the **Wireless** tab, then choose the Wi-Fi network you are currently connected to. +1. Go to **IPv6**. +1. Add the IPv6 addresses listed below: + + ```txt + 2606:4700:4700::1113 + 2606:4700:4700::1003 + ``` + +1. Click **Apply**. ### Debian #### IPv4 -* In the command line, type: `sudo vim /etc/resolv.conf` -* Replace the nameserver lines with: (Since you are using vim press the i key on your keyboard to edit the document) - * **1.1.1.3** - * **1.0.0.3** -* Save and exit vim by pressing the ESC key on your keyboard. Then after lifting the key type `:wq` + +1. In the command line, type: + + ```bash + sudo vim /etc/resolv.conf + ``` + +1. Press the i key on your keyboard to edit the document. +1. Replace the nameserver lines with: + + ```txt + 1.1.1.3 + 1.0.0.3 + ``` + +1. Press the ESC key on your keyboard to save and exit vim. Then, after lifting the key, type: + + ``` + :wq + ``` #### IPv6 -* In the command line, type: `sudo vim /etc/resolv.conf` -* Add the IPv6 address listed below: - * **2606:4700:4700::1113** - * **2606:4700:4700::1003** -* Save and exit vim by pressing the ESC key on your keyboard. Then after lifting the key type `:wq` + +1. In the command line, type: + + ```bash + sudo vim /etc/resolv.conf + ``` + +1. Add the IPv6 addresses listed below: + + ```txt + 2606:4700:4700::1113 + 2606:4700:4700::1003 + ``` + +1. Press the ESC key on your keyboard to save and exit vim. Then, after lifting the key, type: + + ``` + :wq + ``` + + \ No newline at end of file diff --git a/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/mac.md b/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/mac.md index ef338c7c04f..1d9ef7b17c5 100644 --- a/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/mac.md +++ b/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/mac.md @@ -1,49 +1,74 @@ --- order: 2 +pcx-content: how-to --- +import CaptivePortals from "../../_partials/_captive-portals.md" + # Mac setup instructions ## Block malware ### IPv4 -* Go to System Preferences. You can find it by pressing Command+Space on your Mac and typing System Preferences. -* Click on the icon called Network. -* Click Advanced. -* Select the DNS tab. Remove any IP addresses that may be already listed and in their place add the following IP addresses: - * **1.1.1.2** - * **1.0.0.2** -* Click OK. -* Click Apply. + +1. Go to **System Preferences**. You can find it by pressing Command + Space on your keyboard and typing `System Preferences`. +1. Click on the **Network** icon. +1. Click **Advanced**. +1. Select the **DNS** tab. Remove any IP addresses that may be already listed and in their place add the following IP addresses: + + ```txt + 1.1.1.2 + 1.0.0.2 + ``` + +1. Click **OK**. +1. Click **Apply**. ### IPv6 -* Go to System Preferences. You can find it by pressing Command+Space on your Mac and typing System Preferences. -* Click on the icon called Network. -* Click Advanced. -* Select the DNS tab. Remove any IP addresses that may be already listed and in their place add the IPv6 address we listed below: - * **2606:4700:4700::1112** - * **2606:4700:4700::1002** -* Click OK. -* Click Apply. + +1. Go to **System Preferences**. You can find it by pressing Command + Space on your keyboard and typing `System Preferences`. +1. Click on the **Network** icon. +1. Click **Advanced**. +1. Select the **DNS** tab. Remove any IP addresses that may be already listed and in their place add the IPv6 addresses listed below: + + ```txt + 2606:4700:4700::1112 + 2606:4700:4700::1002 + ``` + +1. Click **OK**. +1. Click **Apply**. ## Block malware and adult content ### IPv4 -* Go to System Preferences. You can find it by pressing Command+Space on your Mac and typing System Preferences. -* Click on the icon called Network. -* Click Advanced. -* Select the DNS tab. Remove any IP addresses that may be already listed and in their place add the following IP addresses: - * **1.1.1.3** - * **1.0.0.3** -* Click OK. -* Click Apply. + +1. Go to **System Preferences**. You can find it by pressing Command + Space on your keyboard and typing `System Preferences`. +1. Click on the **Network** icon. +1. Click **Advanced**. +1. Select the **DNS** tab. Remove any IP addresses that may be already listed and in their place add the following IP addresses: + + ```txt + 1.1.1.3 + 1.0.0.3 + ``` + +1. Click **OK**. +1. Click **Apply**. ### IPv6 -* Go to System Preferences. You can find it by pressing Command+Space on your Mac and typing System Preferences. -* Click on the icon called Network. -* Click Advanced. -* Select the DNS tab. Remove any IP addresses that may be already listed and in their place add the IPv6 address we listed below: - * **2606:4700:4700::1113** - * **2606:4700:4700::1003** -* Click OK. -* Click Apply. + +1. Go to **System Preferences**. You can find it by pressing Command + Space on your keyboard and typing `System Preferences`. +1. Click on the **Network** icon. +1. Click **Advanced**. +1. Select the **DNS** tab. Remove any IP addresses that may be already listed and in their place add the IPv6 addresses we listed below: + + ```txt + 2606:4700:4700::1113 + 2606:4700:4700::1003 + ``` + +2. Click **OK**. +3. Click **Apply**. + + \ No newline at end of file diff --git a/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/router.md b/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/router.md index 73281d4bc40..3147e57be87 100644 --- a/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/router.md +++ b/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/router.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content: how-to --- # Router setup instructions @@ -8,179 +9,159 @@ order: 1 Follow this quick guide to start using 1.1.1.1 for Families on your router. -Step 1: Go to the IP address used to access your router's admin console in your browser. +1. Go to the IP address used to access your router's admin console in your browser. - * Linksys and Asus routers typically use [http://192.168.1.1](http://192.168.1.1) - * Netgear routers typically use [http://192.168.0.1](http://192.168.0.1) or [http://192.168.1.1](http://192.168.1.1) - * D-Link routers typically use [http://192.168.0.1](http://192.168.0.1) - * Ubiquiti routers typically use [http://unifi.ubnt.com](http://unifi.ubnt.com) + * Linksys and Asus routers typically use [http://192.168.1.1](http://192.168.1.1) + * Netgear routers typically use [http://192.168.0.1](http://192.168.0.1) or [http://192.168.1.1](http://192.168.1.1) + * D-Link routers typically use [http://192.168.0.1](http://192.168.0.1) + * Ubiquiti routers typically use [http://unifi.ubnt.com](http://unifi.ubnt.com) -Step 2: Enter the router password. +1. Enter the router password. -Step 3: Find the place in the admin console where DNS settings are set. +1. Find the place in the admin console where DNS settings are set. +1. Replace the existing addresses with: -Step 4: Replace the existing addresses with: + ```txt + 1.1.1.2 + 1.0.0.2 + 2606:4700:4700::1112 + 2606:4700:4700::1002 + ``` -```txt -1.1.1.2 -1.0.0.2 -2606:4700:4700::1112 -2606:4700:4700::1002 -``` - -Step 5: Save and exit. +1. Save the updated settings. ### Using DNS-Over-TLS on OpenWRT -It is possible to encrypt DNS traffic out from your router using DNS-over-TLS if it is running OpenWRT. For more details, see our blog post on the topic: [Adding DNS-Over-TLS support to OpenWRT (LEDE) with Unbound](https://blog.cloudflare.com/dns-over-tls-for-openwrt/) +It is possible to encrypt DNS traffic out from your router using DNS-over-TLS if it is running OpenWRT. For more details, see our blog post on the topic: [Adding DNS-Over-TLS support to OpenWRT (LEDE) with Unbound](https://blog.cloudflare.com/dns-over-tls-for-openwrt/). ### Ubiquiti UniFi controller -Step 1: Go to [http://unifi.ubnt.com](http://unifi.ubnt.com) and enter your email and password. - -Step 2: Click on the name of the network you are managing. Click Launch. - -Step 3: Click on the settings icon in the lower left-hand corner. - -Step 4: From the settings menu, choose Networks. - -Step 5; Click Edit by the name of the Network. - -Step 6: Scroll to where it says DHCP Name Server. If Auto is selected, select Manual instead. - -Step 7: In the boxes called DNS Server 1, 2, 3, etc. put: - -```txt -1.1.1.2 -1.0.0.2 -2606:4700:4700::1112 -2606:4700:4700::1002 -``` - -Step 8: Click Save. +1. Go to [http://unifi.ubnt.com](http://unifi.ubnt.com). +1. Enter your email and password. +1. Click on the name of the network you are managing. +1. Click **Launch**. +1. Click on the **Settings** icon in the lower left-hand corner. +1. From the Settings menu, click **Networks**. +1. Click **Edit by the name of the Network**. +1. Scroll to where it says DHCP Name Server. If Auto is selected, select **Manual** instead. +1. In the boxes called DNS Server 1, 2, 3, etc. put: + + ```txt + 1.1.1.2 + 1.0.0.2 + 2606:4700:4700::1112 + 2606:4700:4700::1002 + ``` + +1. Click **Save**. ### Google Wi-Fi -Step 1: Open the Google Wifi app on your phone. - -Step 2: Click the settings tab, then click on Network & general - -Step 3: Click on Advanced networking then click on DNS - -Step 4: Remove any IP addresses that may be already listed and in their place enter: +1. Open the Google Wifi app on your phone. +1. Click the **Settings** tab > **Network & general**. +1. Click on **Advanced networking** > **DNS**. +1. Remove any IP addresses that may be already listed and in their place enter: -```txt -1.1.1.2 -1.0.0.2 -2606:4700:4700::1112 -2606:4700:4700::1002 -``` + ```txt + 1.1.1.2 + 1.0.0.2 + 2606:4700:4700::1112 + 2606:4700:4700::1002 + ``` -Step 5: Click Save. +1. Click **Save**. ### Asus Router -Step 1: Go to https://192.168.1.1/ +1. Go to https://192.168.1.1/. -![Asus Router](../../static/asus.png) + ![Asus Router](../../static/asus.png) -Step 2: Under Advanced Settings, click on WAN +1. Under **Advanced Settings**, click on **WAN**. +1. In **Internet Connection** > **WAN DNS Setting** > **DNS servers**, add: -Step 3: In the Internet Connection tab, under WAN DNS Setting, in DNS servers, add: - -```txt -1.1.1.2 -1.0.0.2 -2606:4700:4700::1112 -2606:4700:4700::1002 -``` + ```txt + 1.1.1.2 + 1.0.0.2 + 2606:4700:4700::1112 + 2606:4700:4700::1002 + ``` ## Block Malware and Adult Content -Follow this quick guide to start using 1.1.1.1 for Families on your router. - -Step 1: Go to the IP address used to access your router's admin console in your browser. - * Linksys and Asus routers typically use [http://192.168.1.1](http://192.168.1.1) - * Netgear routers typically use [http://192.168.0.1](http://192.168.0.1) or [http://192.168.1.1](http://192.168.1.1) - * D-Link routers typically use [http://192.168.0.1](http://192.168.0.1) - * Ubiquiti routers typically use [http://unifi.ubnt.com](http://unifi.ubnt.com) - -Step 2: Enter the router password. - -Step 3: Find the place in the admin console where DNS settings are set. +Follow this quick guide to start using 1.1.1.1 for Families on your router. -Step 4: Replace the existing addresses with: +1. Go to the IP address used to access your router's admin console in your browser. + * Linksys and Asus routers typically use [http://192.168.1.1](http://192.168.1.1) + * Netgear routers typically use [http://192.168.0.1](http://192.168.0.1) or [http://192.168.1.1](http://192.168.1.1) + * D-Link routers typically use [http://192.168.0.1](http://192.168.0.1) + * Ubiquiti routers typically use [http://unifi.ubnt.com](http://unifi.ubnt.com) +1. Enter the router password. +1. Find the place in the admin console where DNS settings are set. +1. Replace the existing addresses with: -```txt -1.1.1.3 -1.0.0.3 -2606:4700:4700::1113 -2606:4700:4700::1003 -``` + ```txt + 1.1.1.3 + 1.0.0.3 + 2606:4700:4700::1113 + 2606:4700:4700::1003 + ``` -Step 5: Save and exit. +1. Save the updated settings. ### Ubiquiti UniFi Controller -Step 1: Go to [http://unifi.ubnt.com](http://unifi.ubnt.com) and enter your email and password. - -Step 2: Click on the name of the network you are managing. Click Launch. - -Step 3: Click on the settings icon in the lower left-hand corner. - -Step 4: From the settings menu, choose Networks. - -Step 5; Click Edit by the name of the Network. - -Step 6: Scroll to where it says DHCP Name Server. If Auto is selected, select Manual instead. - -Step 7: In the boxes called DNS Server 1, 2, 3, etc. put: - -```txt -1.1.1.3 -1.0.0.3 -2606:4700:4700::1113 -2606:4700:4700::1003 -``` - -Step 8: Click Save. +1. Go to [http://unifi.ubnt.com](http://unifi.ubnt.com). +1. Enter your email and password. +1. Click on the name of the network you are managing. +1. Click **Launch**. +1. Click on the **Settings** icon in the lower left-hand corner. +1. From the Settings menu, choose **Networks**. +1. Click **Edit** by the name of the Network. +1. Scroll to where it says **DHCP Name Server**. If **Auto** is selected, select **Manual** instead. +1. In the boxes called DNS Server 1, 2, 3, etc. put: + + ```txt + 1.1.1.3 + 1.0.0.3 + 2606:4700:4700::1113 + 2606:4700:4700::1003 + ``` + +1. Click **Save**. ### Google Wi-Fi -Step 1: Open the Google Wifi app on your phone. - -Step 2: Click the settings tab, then click on Network & general +1. Open the Google Wifi app on your phone. +1. Click **Settings** > **Network & general**. +1. Click **Advanced networking** > **DNS**. +1. Remove any IP addresses that may be already listed and in their place enter: -Step 3: Click on Advanced networking then click on DNS + ```txt + 1.1.1.3 + 1.0.0.3 + 2606:4700:4700::1113 + 2606:4700:4700::1003 + ``` -Step 4: Remove any IP addresses that may be already listed and in their place enter: - -```txt -1.1.1.3 -1.0.0.3 -2606:4700:4700::1113 -2606:4700:4700::1003 -``` - -Step 5: Click Save. +1. Click **Save**. ### Asus Router -Step 1: Go to https://192.168.1.1/ - -![Asus Router](../../static/asus.png) +1. Go to https://192.168.1.1/. -Step 2: Under Advanced Settings, click on WAN + ![Asus Router](../../static/asus.png) -Step 3: In the Internet Connection tab, under WAN DNS Setting, in DNS servers, add: +1. Under **Advanced Settings**, click on **WAN**. +1. In **Internet Connection tab** > **WAN DNS Setting** > **DNS servers**, add: -```txt -1.1.1.3 -1.0.0.3 -2606:4700:4700::1113 -2606:4700:4700::1003 -``` + ```txt + 1.1.1.3 + 1.0.0.3 + 2606:4700:4700::1113 + 2606:4700:4700::1003 + ``` \ No newline at end of file diff --git a/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/windows.md b/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/windows.md index 4923bf1ad5b..9e092a5c945 100644 --- a/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/windows.md +++ b/products/1.1.1.1/src/content/1.1.1.1-for-families/setup-instructions/windows.md @@ -1,64 +1,78 @@ --- - order: 3 +pcx-content: how-to --- +import CaptivePortals from "../../_partials/_captive-portals.md" + # Windows setup instructions ## Block malware ### IPv4 -* Click on the Start menu, then click on Control Panel. -* Click on Network and Internet. -* Click on Change Adapter Settings. -* Right click on the Wi-Fi network you are connected to. -* Click Properties. -* Select Internet Protocol Version 4. -* Click Properties. -* Remove any IP addresses that may be already listed and in their place add the following IP addresses: - * **1.1.1.2** - * **1.0.0.2** -* Click OK. - -# IPv6 -* Click on the Start menu, then click on Control Panel. -* Click on Network and Internet. -* Click on Change Adapter Settings. -* Right click on the Wi-Fi network you are connected to. -* Click Properties. -* Select Internet Protocol Version 6. -* Click Properties. -* Click Use The Following DNS Server Addresses. -* Remove any IP addresses that may be already listed and in their place add the following IP addresses: - * **2606:4700:4700::1112** - * **2606:4700:4700::1002** -* Click OK. + +1. Open the **Start menu** and select **Control Panel**. +2. Click **Network and Internet** > **Change Adapter Settings**. +3. Right-click on the Wi-Fi network you are connected to. +4. Select **Properties** > **Internet Protocol Version 4**. +5. Click **Properties**. +6. Remove any IP addresses that may be already listed and in their place add the following IP addresses: + + ```txt + 1.1.1.2 + 1.0.0.2 + ``` + +7. Click **OK**. + +### IPv6 + +1. Open the **Start menu** and select **Control Panel**. +2. Click **Network and Internet** > **Change Adapter Settings**. +3. Right-click on the Wi-Fi network you are connected to. +4. Click **Properties** > **Internet Protocol Version 6**. +5. Select **Properties** > **Use The Following DNS Server Addresses**. +6. Remove any IP addresses that may be already listed and in their place add the following IP addresses: + + ```txt + 2606:4700:4700::1112 + 2606:4700:4700::1002 + ``` + +7. Click **OK**. ## Block malware and adult content ### IPv4 -* Click on the Start menu, then click on Control Panel. -* Click on Network and Internet. -* Click on Change Adapter Settings. -* Right click on the Wi-Fi network you are connected to. -* Click Properties. -* Select Internet Protocol Version 4. -* Click Properties. -* Remove any IP addresses that may be already listed and in their place add the following IP addresses: - * **1.1.1.3** - * **1.0.0.3** -* Click OK. - -# IPv6 -* Click on the Start menu, then click on Control Panel. -* Click on Network and Internet. -* Click on Change Adapter Settings. -* Right click on the Wi-Fi network you are connected to. -* Click Properties. -* Select Internet Protocol Version 6. -* Click Properties. -* Click Use The Following DNS Server Addresses. -* Remove any IP addresses that may be already listed and in their place add the following IP addresses: - * **2606:4700:4700::1113** - * **2606:4700:4700::1003** -* Click OK. + +1. Open the **Start menu** and select **Control Panel**. +1. Click **Network and Internet** > **Change Adapter Settings**. +1. Right-click on the Wi-Fi network you are connected to. +1. Click **Properties**. +1. Select **Internet Protocol Version 4**. +1. Click **Properties**. +1. Remove any IP addresses that may be already listed and in their place add the following IP addresses: + + ```txt + 1.1.1.3 + 1.0.0.3 + ``` + +1. Click **OK**. + +### IPv6 + +1. Open the **Start menu** and select **Control Panel**. +1. Click **Network and Internet** > **Change Adapter Settings**. +1. Right-click on the Wi-Fi network you are connected to. +1. Select **Properties** > **Internet Protocol Version 6**. +1. Click **Properties** > **Use The Following DNS Server Addresses**. +1. Remove any IP addresses that may be already listed and in their place add the following IP addresses: + + ```txt + 2606:4700:4700::1113 + 2606:4700:4700::1003 + ``` +1. Click **OK**. + + \ No newline at end of file diff --git a/products/1.1.1.1/src/content/_partials/_captive-portals.md b/products/1.1.1.1/src/content/_partials/_captive-portals.md new file mode 100644 index 00000000000..cac37d7e3c8 --- /dev/null +++ b/products/1.1.1.1/src/content/_partials/_captive-portals.md @@ -0,0 +1,10 @@ + diff --git a/products/1.1.1.1/src/content/dns-over-https/cloudflared-proxy.md b/products/1.1.1.1/src/content/dns-over-https/cloudflared-proxy.md index 1bf8cfea4f7..34d95aefc40 100644 --- a/products/1.1.1.1/src/content/dns-over-https/cloudflared-proxy.md +++ b/products/1.1.1.1/src/content/dns-over-https/cloudflared-proxy.md @@ -1,5 +1,6 @@ --- order: 10 +pcx-content: how-to --- # Running a DNS over HTTPS client @@ -10,33 +11,36 @@ There are several DNS over HTTPS (DoH) clients you can use to connect to 1.1.1.1 We've open sourced a Golang DoH client you can use to get started. Follow this quick guide to start a DNS over HTTPS proxy to 1.1.1.1. -Step 1: Download the cloudflared daemon. You can [find it here](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation). +1. Download the cloudflared daemon. You can [find it here](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation). +1. Verify that the `cloudflared` daemon is installed: -Step 2: Verify that the `cloudflared` daemon is installed - - cloudflared --version + ```sh + $ cloudflared --version cloudflared version 2020.11.11 (built 2020-11-25-1643 UTC) + ``` -Step 3: Start the DNS proxy on an address and port in your network. If you don't -specify an address and port, it will start listening on `localhost:53`. DNS (53) -is a privileged port, so for the initial demo we will use a different port: +1. Start the DNS proxy on an address and port in your network. If you don't specify an address and port, it will start listening on `localhost:53`. DNS (53) is a privileged port, so for the initial demo we will use a different port: - cloudflared proxy-dns --port 5553 + ```sh + $ cloudflared proxy-dns --port 5553 INFO[2020-12-04T19:58:57Z] Adding DNS upstream - url: https://1.1.1.1/dns-query INFO[2020-12-04T19:58:57Z] Adding DNS upstream - url: https://1.0.0.1/dns-query INFO[2020-12-04T19:58:57Z] Starting metrics server on 127.0.0.1:44841/metrics INFO[2020-12-04T19:58:57Z] Starting DNS over HTTPS proxy server on: dns://localhost:5553 + ``` -Step 4: You can verify that it's running using a `dig`, `kdig`, `host`, or any other DNS client. +1. You can verify that it's running using a `dig`, `kdig`, `host`, or any other DNS client. - dig +short @127.0.0.1 -p5553 cloudflare.com AAAA + ```sh + $ dig +short @127.0.0.1 -p5553 cloudflare.com AAAA 2606:4700::6810:85e5 2606:4700::6810:84e5 + ``` -Step 5: Set up cloudflared as a service so it starts on user login. On many -Linux distributions, this can be done with: +1. Set up `cloudflared` as a service so it starts on user login. On many Linux distributions, this can be done with: - sudo tee /etc/systemd/system/cloudflared-proxy-dns.service >/dev/null </dev/null </dev/null + ```sh + $ sudo rm -f /etc/resolv.conf + $ echo nameserver 127.0.0.1 | sudo tee /etc/resolv.conf >/dev/null + ``` -Step 7: Finally verify it locally with: +1. Finally, verify it locally with: - dig +short @127.0.0.1 cloudflare.com AAAA + ```sh + $ dig +short @127.0.0.1 cloudflare.com AAAA 2606:4700::6810:85e5 2606:4700::6810:84e5 + ``` ## dnscrypt-proxy The [dnscrypt-proxy](https://dnscrypt.info) 2.0+ supports DoH out of the box. It supports both 1.1.1.1, and other services. It includes more advanced features, such as load balancing and local filtering. -Step 1: Install the dnscrypt-proxy. You can [find the instructions here](https://github.com/jedisct1/dnscrypt-proxy/wiki/installation). - -Step 2: Verify that the `dnscrypt-proxy` is installed, and at least version 2.0 +1. Install the dnscrypt-proxy. You can [find the instructions here](https://github.com/jedisct1/dnscrypt-proxy/wiki/installation). +1. Verify that the `dnscrypt-proxy` is installed, and at least version 2.0: - dnscrypt-proxy -version + ```sh + $ dnscrypt-proxy -version 2.0.8 + ``` -Step 3: Set up the configuration file using the [official instructions](https://github.com/jedisct1/dnscrypt-proxy/wiki/installation#setting-up-dnscrypt-proxy), and add 'cloudflare' and 'cloudflare-ipv6' to the server list in `dnscrypt-proxy.toml` +1. Set up the configuration file using the [official instructions](https://github.com/jedisct1/dnscrypt-proxy/wiki/installation#setting-up-dnscrypt-proxy), and add `cloudflare` and `cloudflare-ipv6` to the server list in `dnscrypt-proxy.toml`: + ```toml server_names = ['cloudflare', 'cloudflare-ipv6'] + ``` -Step 4: Make sure that nothing else is running on `localhost:53`, and check that everything works as expected +1. Make sure that nothing else is running on `localhost:53`, and check that everything works as expected: - dnscrypt-proxy -resolve cloudflare-dns.com + ```sh + $ dnscrypt-proxy -resolve cloudflare-dns.com Resolving [cloudflare-dns.com] Domain exists: yes, 3 name servers found @@ -90,5 +103,6 @@ Step 4: Make sure that nothing else is running on `localhost:53`, and check that IP addresses: 2400:cb00:2048:1::6810:6f19, 2400:cb00:2048:1::6810:7019, 104.16.111.25, 104.16.112.25 TXT records: - Resolver IP: 172.68.140.217 + ``` -Step 5: Register it as a system service using the [instructions here](https://github.com/jedisct1/dnscrypt-proxy/wiki/installation#installing-as-a-system-service-windows-linux-macos) +1. Register it as a system service according to the [dnscrypt-proxy installation instructions](https://github.com/jedisct1/dnscrypt-proxy/wiki/installation). \ No newline at end of file diff --git a/products/1.1.1.1/src/content/dns-over-https/index.md b/products/1.1.1.1/src/content/dns-over-https/index.md index 2ab3cda976a..580fa468fd4 100644 --- a/products/1.1.1.1/src/content/dns-over-https/index.md +++ b/products/1.1.1.1/src/content/dns-over-https/index.md @@ -1,5 +1,6 @@ --- order: 8 +pcx-content: concept --- # DNS over HTTPS diff --git a/products/1.1.1.1/src/content/dns-over-https/json-format.md b/products/1.1.1.1/src/content/dns-over-https/json-format.md index 2af029b699f..e1588fcf8b7 100644 --- a/products/1.1.1.1/src/content/dns-over-https/json-format.md +++ b/products/1.1.1.1/src/content/dns-over-https/json-format.md @@ -1,64 +1,77 @@ --- order: 3 +pcx-content: reference --- # Using JSON Cloudflare's DNS over HTTPS endpoint also supports JSON format for querying DNS data. For lack of an agreed upon JSON schema for DNS over HTTPS in the IETF, Cloudflare has chosen to follow the same schema as Google's DNS over HTTPS resolver. -JSON formatted queries are sent using a GET request. When making requests using GET, the DNS query is encoded into the URL. An additional URL parameter of 'ct' should indicate the MIME type (application/dns-json). +JSON formatted queries are sent using a `GET` request. When making requests using `GET`, the DNS query is encoded into the URL. An additional URL parameter of `ct` should indicate the MIME type (`application/dns-json`). Supported Parameters: + + Field | Required? | Description | Example -------------------|----------------|----------------------------------------------------------------------------|---------------- -name | Required | Query Name | example.com -type | Required | Query Type (either a numeric value or text) | AAAA -do | No | DO bit - set if client wants DNSSEC data (either boolean or numeric value) | true -cd | No | CD bit - set to disable validation (either boolean or numeric value) | false +name | Required | Query Name. | example.com +type | Required | Query Type (either a numeric value or text). | AAAA +do | No | DO bit - set if client wants DNSSEC data (either boolean or numeric value).| true +cd | No | CD bit - set to disable validation (either boolean or numeric value). | false + + -Example Request: +Example request: - curl -H 'accept: application/dns-json' 'https://cloudflare-dns.com/dns-query?name=example.com&type=AAAA' +```sh +$ curl -H 'accept: application/dns-json' 'https://cloudflare-dns.com/dns-query?name=example.com&type=AAAA' +``` -Example Response: +Example response: +```json +{ + "Status": 0, + "TC": false, + "RD": true, + "RA": true, + "AD": true, + "CD": false, + "Question": [ + { + "name": "example.com.", + "type": 28 + } + ], + "Answer": [ { - "Status": 0, - "TC": false, - "RD": true, - "RA": true, - "AD": true, - "CD": false, - "Question": [ - { - "name": "example.com.", - "type": 28 - } - ], - "Answer": [ - { - "name": "example.com.", - "type": 28, - "TTL": 1726, - "data": "2606:2800:220:1:248:1893:25c8:1946" - } - ] + "name": "example.com.", + "type": 28, + "TTL": 1726, + "data": "2606:2800:220:1:248:1893:25c8:1946" } + ] +} +``` + +The following table has more information on each response field: -Below the fields in the response are explained + Field | Description ---------------|----------------------------------- -Status | The Response Code of the DNS Query. These are defined here: https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6 +Status | The Response Code of the DNS Query. These are defined here: https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6. TC | If true, it means the truncated bit was set. This happens when the DNS answer is larger than a single UDP or TCP packet. TC will almost always be false with Cloudflare DNS over HTTPS because Cloudflare supports the maximum response size. RD | If true, it means the Recursive Desired bit was set. This is always set to true for Cloudflare DNS over HTTPS. RA | If true, it means the Recursion Available bit was set. This is always set to true for Cloudflare DNS over HTTPS. AD | If true, it means that every record in the answer was verified with DNSSEC. CD | If true, the client asked to disable DNSSEC validation. In this case, Cloudflare will still fetch the DNSSEC-related records, but it will not attempt to validate the records. Question: name | The record name requested. -Question: type | The type of DNS record requested. These are defined here: https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4 +Question: type | The type of DNS record requested. These are defined here: https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4. Answer: name | The record owner. -Answer: type | The type of DNS record. These are defined here: https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4 +Answer: type | The type of DNS record. These are defined here: https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4. Answer: TTL | The number of seconds the answer can be stored in cache before it is considered stale. Answer: data | The value of the DNS record for the given name and type. The data will be in text for standardized record types and in hex for unknown types. + + \ No newline at end of file diff --git a/products/1.1.1.1/src/content/dns-over-https/request-structure.md b/products/1.1.1.1/src/content/dns-over-https/request-structure.md index 24a11297e42..22175ab9e78 100644 --- a/products/1.1.1.1/src/content/dns-over-https/request-structure.md +++ b/products/1.1.1.1/src/content/dns-over-https/request-structure.md @@ -1,5 +1,6 @@ --- order: 2 +pcx-content: reference --- # Making requests @@ -16,11 +17,23 @@ See curl examples for [UDP wireformat](https://developers.cloudflare.com/1.1.1.1 ## HTTP method -Cloudflare's DOH endpoint supports POST and GET for UDP wireformat, and GET for JSON format. +Cloudflare's DOH endpoint supports `POST` and `GET` for UDP wireformat, and `GET` for JSON format. -When making requests using POST, the DNS query is included as the message body of the HTTP request, and the MIME type (application/dns-udpwireformat) is sent in the Content-Type request header. Cloudflare will use the message body of the HTTP request as sent by the client, so the message body should not be encoded. +When making requests using `POST`, the DNS query is included as the message body of the HTTP request, and the MIME type (`application/dns-udpwireformat`) is sent in the `Content-Type` request header. Cloudflare will use the message body of the HTTP request as sent by the client, so the message body should not be encoded. -When making requests using GET, the DNS query is encoded into the URL. An additional URL parameter of 'ct' should indicate the MIME type (see below). +When making requests using `GET`, the DNS query is encoded into the URL. An additional URL parameter of `ct` should indicate the MIME type (see below). + +## Send multiple questions in a query + +Sending more than one question when making requests depends on the HTTP version used, as each DNS query maps to exactly one HTTP request. HTTP/2 and HTTP/3 have multiplexing and you can start multiple requests concurrently. HTTP/2 is, in fact, the minimum recommended version of HTTP for use with DNS over HTTPS (DoH). This is not specific to 1.1.1.1, but rather how DoH works. + +You can learn more about how DoH works in RFC8484, more specifically [the HTTP layer requirements](https://datatracker.ietf.org/doc/html/rfc8484#section-5.2). + +The following example sends two questions in a query: + +```sh +$ curl --http2 -H 'accept: application/dns-json' https://1.1.1.1/dns-query?name=cloudflare.com --next --http2 -H 'accept: application/dns-json' https://1.1.1.1/dns-query?name=example.com +``` ## Wireformat and JSON options @@ -28,7 +41,7 @@ Both [UDP wireformat](https://developers.cloudflare.com/1.1.1.1/dns-over-https/w ## Valid MIME types -If you use JSON format, set 'application/dns-json' URL parameter, and if you use DNS wire format, use 'application/dns-message' as either URL parameter of 'ct' or a Content-Type header for POST requests. +If you use JSON format, set `application/dns-json` URL parameter, and if you use DNS wire format, use `application/dns-message` as either URL parameter of `ct` or a `Content-Type` header for `POST` requests. ## Authentication diff --git a/products/1.1.1.1/src/content/dns-over-https/web-browser.md b/products/1.1.1.1/src/content/dns-over-https/web-browser.md index 68e6dac05d0..f940a7b7ecc 100644 --- a/products/1.1.1.1/src/content/dns-over-https/web-browser.md +++ b/products/1.1.1.1/src/content/dns-over-https/web-browser.md @@ -1,5 +1,6 @@ --- order: 10 +pcx-content: how-to --- # Configure your browser to use DNS over HTTPS @@ -8,13 +9,13 @@ There are several browsers compatible with DNS over HTTPS (DoH) that you can use ## Mozilla Firefox -1. Click the hamburger menu at the top-right corner of your browser window. +1. Click the **hamburger menu** at the top-right corner of your browser window. 1. Click **Preferences**. 1. In the **General** menu, scroll down to access `Network Settings`. -1. Click on the `Settings` button. +1. Click on the **Settings** button. 1. Click **Enable DNS over HTTPS**. By default, it resolves to Cloudflare DNS. -## Google Chrome +## Google Chrome -1. Click on the three-dot menu at in the top-right corner of your browser window. +1. Click on the **three-dot menu** at in the top-right corner of your browser window. 1. Click **Settings**. -1. Navigate to **Privacy and security > Security**. +1. Navigate to **Privacy and security** > **Security**. 1. Enable the **Use secure DNS** switch. Your browser infers the DNS over HTTPS provider you want based on your system DNS. To benefit from Cloudflare DoH, make sure your system is [properly configured](https://1.1.1.1/dns/#setup-instructions). @@ -38,9 +39,9 @@ Your browser infers the DNS over HTTPS provider you want based on your system DN ## Brave -1. Click the hamburger menu at the top-right corner of your browser window. +1. Click the **hamburger menu** at the top-right corner of your browser window. 1. Navigate to **Settings**. -1. Navigate to **Privacy and security > Security**. +1. Navigate to **Privacy and security** > **Security**. 1. Enable the **Use secure DNS**. 1. Choose *Cloudflare (1.1.1.1)* as a service provider. @@ -50,5 +51,5 @@ As of today, Safari does not support DNS over HTTPS. ## How to check if my browser is configured correctly? -1. Visit [1.1.1.1 help page](https://1.1.1.1/help) -2. Verify that `Using DNS over HTTPS (DoH)` is `Yes` +1. Visit [1.1.1.1 help page](https://1.1.1.1/help). +1. Verify that `Using DNS over HTTPS (DoH)` is `Yes`. \ No newline at end of file diff --git a/products/1.1.1.1/src/content/dns-over-https/wireformat.md b/products/1.1.1.1/src/content/dns-over-https/wireformat.md index 8a138cb7cfa..5d919fa1d69 100644 --- a/products/1.1.1.1/src/content/dns-over-https/wireformat.md +++ b/products/1.1.1.1/src/content/dns-over-https/wireformat.md @@ -1,84 +1,93 @@ --- order: 11 +pcx-content: how-to --- # Using DNS Wireformat Cloudflare respects DNS wireformat as is defined in RFC1035. -To send queries using DNS wire format, set the header 'accept: application/dns-message', or 'content-type: application/dns-message' if using POST to signalize the media type of the query. +To send queries using DNS wire format, set the header `accept: application/dns-message`, or `content-type: application/dns-message` if using `POST` to signalize the media type of the query. -Queries using DNS wireformat can be sent using POST or GET. +Queries using DNS wireformat can be sent using `POST` or `GET`. ## Using POST -When making requests using POST, the DNS query is included as the message body of the HTTP request, and the MIME type (see below) is included in the Content-Type request header. Cloudflare will use the message body of the HTTP request as sent by the client, so the message body should not be encoded. +When making requests using `POST`, the DNS query is included as the message body of the HTTP request, and the MIME type (see below) is included in the `Content-Type` request header. Cloudflare will use the message body of the HTTP request as sent by the client, so the message body should not be encoded. Example request: The same DNS query for www.example.com, using the POST method would be: - :method = POST - :scheme = https - :authority = cloudflare-dns.com - :path = /dns-query - accept = application/dns-message - content-type = application/dns-message - content-length = 33 - - <33 bytes represented by the following hex encoding> - 00 00 01 00 00 01 00 00 00 00 00 00 03 77 77 77 - 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 - 01 +```txt +:method = POST +:scheme = https +:authority = cloudflare-dns.com +:path = /dns-query +accept = application/dns-message +content-type = application/dns-message +content-length = 33 + +<33 bytes represented by the following hex encoding> +00 00 01 00 00 01 00 00 00 00 00 00 03 77 77 77 +07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 +01 +``` And would return the answer in wireformat: - :status = 200 - content-type = application/dns-message - content-length = 64 - cache-control = max-age=128 +```txt +:status = 200 +content-type = application/dns-message +content-length = 64 +cache-control = max-age=128 - <64 bytes represented by the following hex encoding> - 00 00 81 80 00 01 00 01 00 00 00 00 03 77 77 77 - 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 - 01 03 77 77 77 07 65 78 61 6d 70 6c 65 03 63 6f - 6d 00 00 01 00 01 00 00 00 80 00 04 C0 00 02 01 +<64 bytes represented by the following hex encoding> +00 00 81 80 00 01 00 01 00 00 00 00 03 77 77 77 +07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 +01 03 77 77 77 07 65 78 61 6d 70 6c 65 03 63 6f +6d 00 00 01 00 01 00 00 00 80 00 04 C0 00 02 01 +``` To try using cURL you can do: - echo -n 'q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' | base64 -D | curl -H 'content-type: application/dns-message' --data-binary @- https://cloudflare-dns.com/dns-query -o - | hexdump +```sh +$ echo -n 'q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' | base64 -D | curl -H 'content-type: application/dns-message' --data-binary @- https://cloudflare-dns.com/dns-query -o - | hexdump +``` ## Using GET -When making requests using GET, the DNS query is encoded into the URL. The 'accept' header can be used to indicate the MIME type (default: 'application/dns-message'). +When making requests using GET, the DNS query is encoded into the URL. The `accept` header can be used to indicate the MIME type (default: `application/dns-message`). Example request: - $ curl -H 'accept: application/dns-message' -v 'https://cloudflare-dns.com/dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' | hexdump - * Using HTTP2, server supports multi-use - * Connection state changed (HTTP/2 confirmed) - * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0 - * Using Stream ID: 1 (easy handle 0x7f968700a400) - GET /dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB HTTP/2 - Host: cloudflare-dns.com - User-Agent: curl/7.54.0 - accept: application/dns-message - - * Connection state changed (MAX_CONCURRENT_STREAMS updated)! - HTTP/2 200 - date: Fri, 23 Mar 2018 05:14:02 GMT - content-type: application/dns-message - content-length: 49 - cache-control: max-age=0 - set-cookie: \__cfduid=dd1fb65f0185fadf50bbb6cd14ecbc5b01521782042; expires=Sat, 23-Mar-19 05:14:02 GMT; path=/; domain=.cloudflare.com; HttpOnly - server: cloudflare-nginx - cf-ray: 3ffe69838a418c4c-SFO-DOG - - { [49 bytes data] - 100 49 100 49 0 0 493 0 --:--:-- --:--:-- --:--:-- 494 - * Connection #0 to host cloudflare-dns.com left intact - 0000000 ab cd 81 80 00 01 00 01 00 00 00 00 03 77 77 77 - 0000010 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 - 0000020 01 c0 0c 00 01 00 01 00 00 0a 8b 00 04 5d b8 d8 - 0000030 22 - 0000031 +```sh +$ curl -H 'accept: application/dns-message' -v 'https://cloudflare-dns.com/dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' | hexdump +* Using HTTP2, server supports multi-use +* Connection state changed (HTTP/2 confirmed) +* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0 +* Using Stream ID: 1 (easy handle 0x7f968700a400) +GET /dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB HTTP/2 +Host: cloudflare-dns.com +User-Agent: curl/7.54.0 +accept: application/dns-message + +* Connection state changed (MAX_CONCURRENT_STREAMS updated)! +HTTP/2 200 +date: Fri, 23 Mar 2018 05:14:02 GMT +content-type: application/dns-message +content-length: 49 +cache-control: max-age=0 +set-cookie: \__cfduid=dd1fb65f0185fadf50bbb6cd14ecbc5b01521782042; expires=Sat, 23-Mar-19 05:14:02 GMT; path=/; domain=.cloudflare.com; HttpOnly +server: cloudflare-nginx +cf-ray: 3ffe69838a418c4c-SFO-DOG + +{ [49 bytes data] +100 49 100 49 0 0 493 0 --:--:-- --:--:-- --:--:-- 494 +* Connection #0 to host cloudflare-dns.com left intact +0000000 ab cd 81 80 00 01 00 01 00 00 00 00 03 77 77 77 +0000010 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 +0000020 01 c0 0c 00 01 00 01 00 00 0a 8b 00 04 5d b8 d8 +0000030 22 +0000031 +``` diff --git a/products/1.1.1.1/src/content/dns-over-tls/index.md b/products/1.1.1.1/src/content/dns-over-tls/index.md index 15e875f6065..125ea77e289 100644 --- a/products/1.1.1.1/src/content/dns-over-tls/index.md +++ b/products/1.1.1.1/src/content/dns-over-tls/index.md @@ -1,5 +1,6 @@ --- order: 9 +pcx-content: concept --- # DNS over TLS @@ -8,48 +9,50 @@ By default, DNS is sent over a plaintext connection. DNS over TLS is one way to ## Configuration -Cloudflare supports DNS over TLS on 1.1.1.1 and 1.0.0.1 on port 853. The certificate presented is for cloudflare-dns.com. +Cloudflare supports DNS over TLS on `1.1.1.1` and `1.0.0.1` on port 853. The certificate presented is for cloudflare-dns.com. ## How it works A stub resolver (the DNS client on a device that talks to the DNS resolver) connects to the resolver over a TLS connection: - * Before the connection the DNS stub resolver has stored a base64 encoded SHA256 hash of cloudflare-dns.com's TLS certificate (called SPKI) - * DNS stub resolver establishes a TCP connection with cloudflare-dns.com:853 - * DNS stub resolver initiates a TLS handshake - * In the TLS handshake, cloudflare-dns.com presents its TLS certificate. - * Once the TLS connection is established, the DNS stub resolver can send DNS over an encrypted connection, preventing eavesdropping and tampering. - * All DNS queries sent over the TLS connection must comply with specifications of [sending DNS over TCP](https://tools.ietf.org/html/rfc1035#section-4.2.2). +1. Before the connection the DNS stub resolver has stored a base64 encoded SHA256 hash of cloudflare-dns.com's TLS certificate (called SPKI). +1. DNS stub resolver establishes a TCP connection with `cloudflare-dns.com:853`. +1. DNS stub resolver initiates a TLS handshake. +1. In the TLS handshake, `cloudflare-dns.com` presents its TLS certificate. +1. Once the TLS connection is established, the DNS stub resolver can send DNS over an encrypted connection, preventing eavesdropping and tampering. +1. All DNS queries sent over the TLS connection must comply with specifications of [sending DNS over TCP](https://tools.ietf.org/html/rfc1035#section-4.2.2). ## Example - $ kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com example.com - ;; DEBUG: Querying for owner(example.com.), class(1), type(1), server(1.1.1.1), port(853), protocol(TCP) - ;; DEBUG: TLS, imported 170 system certificates - ;; DEBUG: TLS, received certificate hierarchy: - ;; DEBUG: #1, C=US,ST=CA,L=San Francisco,O=Cloudflare\, Inc.,CN=\*.cloudflare-dns.com - ;; DEBUG: SHA-256 PIN: yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc= - ;; DEBUG: #2, C=US,O=DigiCert Inc,CN=DigiCert ECC Secure Server CA - ;; DEBUG: SHA-256 PIN: PZXN3lRAy+8tBKk2Ox6F7jIlnzr2Yzmwqc3JnyfXoCw= - ;; DEBUG: TLS, skipping certificate PIN check - ;; DEBUG: TLS, The certificate is trusted. - ;; TLS session (TLS1.3)-(ECDHE-SECP256R1)-(ECDSA-SECP256R1-SHA256)-(AES-256-GC - ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 58548 - ;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1 - - ;; EDNS PSEUDOSECTION: - ;; Version: 0; flags: ; UDP size: 1536 B; ext-rcode: NOERROR - ;; PADDING: 408 B - - ;; QUESTION SECTION: - ;; example.com. IN A - - ;; ANSWER SECTION: - example.com. 2347 IN A 93.184.216.34 - - ;; Received 468 B - ;; Time 2018-03-31 15:20:57 PDT - ;; From 1.1.1.1@853(TCP) in 12.6 ms +```sh +$ kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com example.com +;; DEBUG: Querying for owner(example.com.), class(1), type(1), server(1.1.1.1), port(853), protocol(TCP) +;; DEBUG: TLS, imported 170 system certificates +;; DEBUG: TLS, received certificate hierarchy: +;; DEBUG: #1, C=US,ST=CA,L=San Francisco,O=Cloudflare\, Inc.,CN=\*.cloudflare-dns.com +;; DEBUG: SHA-256 PIN: yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc= +;; DEBUG: #2, C=US,O=DigiCert Inc,CN=DigiCert ECC Secure Server CA +;; DEBUG: SHA-256 PIN: PZXN3lRAy+8tBKk2Ox6F7jIlnzr2Yzmwqc3JnyfXoCw= +;; DEBUG: TLS, skipping certificate PIN check +;; DEBUG: TLS, The certificate is trusted. +;; TLS session (TLS1.3)-(ECDHE-SECP256R1)-(ECDSA-SECP256R1-SHA256)-(AES-256-GC +;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 58548 +;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1 + +;; EDNS PSEUDOSECTION: +;; Version: 0; flags: ; UDP size: 1536 B; ext-rcode: NOERROR +;; PADDING: 408 B + +;; QUESTION SECTION: +;; example.com. IN A + +;; ANSWER SECTION: +example.com. 2347 IN A 93.184.216.34 + +;; Received 468 B +;; Time 2018-03-31 15:20:57 PDT +;; From 1.1.1.1@853(TCP) in 12.6 ms +``` ## Supported TLS versions diff --git a/products/1.1.1.1/src/content/fun-stuff/dns-in-google-sheets.md b/products/1.1.1.1/src/content/fun-stuff/dns-in-google-sheets.md index b1afb644f1d..47ad90dbbc3 100644 --- a/products/1.1.1.1/src/content/fun-stuff/dns-in-google-sheets.md +++ b/products/1.1.1.1/src/content/fun-stuff/dns-in-google-sheets.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content: tutorial --- # DNS in Google Sheets @@ -100,4 +101,4 @@ Returns: `198.41.214.162, 198.41.215.162` -![function](../static/google-sheet-result.png) +![function](../static/google-sheet-result.png) \ No newline at end of file diff --git a/products/1.1.1.1/src/content/fun-stuff/dns-over-discord.md b/products/1.1.1.1/src/content/fun-stuff/dns-over-discord.md index 9c39edbc1cc..60a08e4368f 100644 --- a/products/1.1.1.1/src/content/fun-stuff/dns-over-discord.md +++ b/products/1.1.1.1/src/content/fun-stuff/dns-over-discord.md @@ -1,5 +1,6 @@ --- order: 2 +pcx-content: tutorial --- # DNS over Discord @@ -8,19 +9,25 @@ Ever wanted to make DNS requests from the comfort of your Discord server? Well n To start using the DNS over Discord bot, invite it to your Discord server using this link: [https://cfl.re/3nM6VfQ](https://cfl.re/3nM6VfQ) + ## dig command -Once the bot is in your server, type `/dig` to begin using the bot's main command -- performing DNS lookups. +Once the bot is in your server, type `/dig` to begin using the bot's main command — performing DNS lookups. This will provide a native interface within Discord that allows you to specify the domain to lookup, an optional DNS record type and an optional flag for a short result. -Due to limitations in Discord, the `/dig` command can only offer 10 different DNS record types, and will default to 'A' records if none is specified. +If only a domain is given for the command, the bot will default to looking for 'A' DNS records, and will return the full format result, not the short form. ![dig command](../static/dns-over-discord/dig-command.png) -![dig command types](../static/dns-over-discord/dig-command-types.png) +![dig domain: cloudflare.com](../static/dns-over-discord/dig-command-example-1.png) + +_`/dig domain: cloudflare.com`_ + ### Supported record types +Discord has a limit of 25 options in slash commands, so DNS over Discord offers the 25 most common DNS record types to choose from: + * A * AAAA * CAA @@ -31,69 +38,147 @@ Due to limitations in Discord, the `/dig` command can only offer 10 different DN * SPF * SRV * TXT +* DNSKEY +* DS +* LOC +* URI +* HTTPS +* NAPTR +* PTR +* SMIMEA +* SOA +* SSHFP +* SVCB +* TLSA +* HINFO +* CDS +* CDNSKEY -*For all DNS record types, use the `/multi-dig` command.* +*To query other DNS record types, or multiple record types at once, use the `/multi-dig` command.* -### Examples +![dig command types](../static/dns-over-discord/dig-command-types.png) -![dig domain: cloudflare.com](../static/dns-over-discord/dig-command-example-1.png) -_`/dig domain: cloudflare.com`_ +### Short form response + +Much like the dig command itself, DNS over Discord has an optional flag in the dig command that allows the user to request that the response be in the short form. + +When this is requested, the name and TTL columns will be excluded, with just the data column returned without the table formatting, similar to the equivalent dig command response. + +![dig domain: cloudflare.com type: AAAA short: true](../static/dns-over-discord/dig-command-example-2.png) + +_`/dig domain: cloudflare.com type: AAAA short: true`_ + + +### Refreshing existing results + +As part of the response that the DNS over Discord bot returns for dig commands there is a button to refresh the results. -![dig domain: cloudflare.com type: AAAA short: True](../static/dns-over-discord/dig-command-example-2.png) +Any user can press this button, triggering the bot to re-request the DNS query in the message and update the results in the message. + +The refresh button is available on all responses to the dig command, including those that resulted in an error, such as an unknown domain or no records found. + +![Refreshing dig domain: cloudflare.com](../static/dns-over-discord/dig-command-refresh.gif) + +_`/dig domain: cloudflare.com`_ -_`/dig domain: cloudflare.com type: AAAA short: True`_ ## multi-dig command -Want to lookup multiple DNS record types at once, or record types not available in `/dig`? +Want to lookup multiple DNS record types at once? The `/multi-dig` command allows you to specify any supported DNS record type, and multiple types separated by a space. -When providing DNS record types for the `/multi-dig` command, Discord will not prompt you with options. -Please provide a space-separated list of valid DNS record types to lookup, any invalid options will be silently dropped. -'A' records will be used as the default if no valid types are given. - ![multi-dig command](../static/dns-over-discord/multi-dig-command.png) -![multi-dig command types](../static/dns-over-discord/multi-dig-command-types.png) +![multi-dig domain: cloudflare.com types: A AAAA](../static/dns-over-discord/multi-dig-command-example-1.png) + +_`/multi-dig domain: cloudflare.com types: A AAAA`_ + ### Supported record types +When providing DNS record types for the `/multi-dig` command, Discord will not prompt you with options. + +Please provide a space-separated list of valid DNS record types to lookup, any invalid options will be silently dropped. +'A' records will be used as the default if no valid types are given. + +The following DNS record types are supported and considered valid by the bot: + * A * AAAA * CAA * CERT * CNAME +* MX +* NS +* SPF +* SRV +* TXT * DNSKEY * DS * LOC -* MX +* URI +* HTTPS * NAPTR -* NS * PTR * SMIMEA -* SPF -* SRV +* SOA * SSHFP +* SVCB * TLSA -* TXT -* URI +* HINFO +* CDS +* CDNSKEY +* AFSDB +* APL +* CSYNC +* DHCID +* DLV +* DNAME +* EUI48 +* EUI64 +* HIP +* IPSECKEY +* KEY +* KX +* NSEC +* NSEC3 +* NSEC3PARAM +* OPENPGPKEY +* RP +* TA +* TKEY +* ZONEMD *Use '\*' (asterisk) in place of a record type to get DNS results for all supported types.* -### Examples +![multi-dig command types](../static/dns-over-discord/multi-dig-command-types.png) -![multi-dig domain: cloudflare.com types: A AAAA](../static/dns-over-discord/multi-dig-command-example-1.png) -_`/multi-dig domain: cloudflare.com types: A AAAA`_ +### Short form response + +Like the main dig command, the multi-dig command also supports the optional short flag after the types have been specified in the slash command. -![multi-dig domain: cloudflare.com types: DNSKEY short: True](../static/dns-over-discord/multi-dig-command-example-2.png) +![multi-dig domain: cloudflare.com types: CDS CDNSKEY short: true](../static/dns-over-discord/multi-dig-command-example-2.png) + +_`/multi-dig domain: cloudflare.com types: CDS CDNSKEY short: true`_ + + +### Refreshing existing results + +The multi-dig command also provides a refresh button below each set of DNS results requested (or after each block of 10 DNS record types if more than 10 were requested). + +As with the dig command, any user can press the refresh button to refresh the displayed DNS results, including for DNS queries that had previously failed. + +![Refreshing multi-dig domain: cloudflare.com types: A AAAA](../static/dns-over-discord/multi-dig-command-refresh.gif) + +_`/multi-dig domain: cloudflare.com types: A AAAA`_ -_`/multi-dig domain: cloudflare.com types: DNSKEY short: True`_ ## whois command -The `/whois` command allows you to perform an RDAP/WHOIS lookup right in Discord to find who is behind a given domain name, an IP address, or an ASN. +Curious about who's behind a domain name, an IP address or even an ASN? +The `/whois` command allows you to perform an RDAP/WHOIS lookup right in Discord for a given domain, IP or ASN. ![whois command](../static/dns-over-discord/whois-command.png) @@ -160,4 +245,4 @@ _`/invite`_ The DNS over Discord bot is deployed on [Cloudflare Workers](https://workers.cloudflare.com/). -You can find the source code for the bot on GitHub, as well as information on getting started with contributing to the project, at [https://github.com/MattIPv4/DNS-over-Discord/](https://github.com/MattIPv4/DNS-over-Discord/). +You can find the source code for the bot on GitHub, as well as information on getting started with contributing to the project, at [https://github.com/MattIPv4/DNS-over-Discord/](https://github.com/MattIPv4/DNS-over-Discord/). diff --git a/products/1.1.1.1/src/content/fun-stuff/dns-over-email.md b/products/1.1.1.1/src/content/fun-stuff/dns-over-email.md index 6e4e6bd359f..95dc021cd9a 100644 --- a/products/1.1.1.1/src/content/fun-stuff/dns-over-email.md +++ b/products/1.1.1.1/src/content/fun-stuff/dns-over-email.md @@ -1,11 +1,10 @@ --- order: 3 +pcx-content: tutorial --- # DNS over email -Ah, the classic yet revolutionary DNS over email. - To receive DNS responses over email, send an email to `lookup@resolver.email`. The DNS query goes in the body of the message. You can send a single domain (defaults to AAAA). @@ -46,4 +45,4 @@ AAAA example.com Returns: -![DNS-over-email](../static/dns-over-email.png) +![DNS-over-email](../static/dns-over-email.png) \ No newline at end of file diff --git a/products/1.1.1.1/src/content/fun-stuff/dns-over-telegram.md b/products/1.1.1.1/src/content/fun-stuff/dns-over-telegram.md index 5d6ed6f2b32..55296a5537a 100644 --- a/products/1.1.1.1/src/content/fun-stuff/dns-over-telegram.md +++ b/products/1.1.1.1/src/content/fun-stuff/dns-over-telegram.md @@ -1,45 +1,43 @@ --- order: 4 +pcx-content: tutorial --- # DNS over Telegram To perform DNS over Telegram, you will need the Telegram app. For the unfamiliar, Telegram is an end-to-end encrypted messaging app. You can download it on [telegram.org](https://telegram.org/). -First, you will need to add the 1.1.1.1 bot to your friends list in Telegram. Open the Telegram app, click on 'contacts' and search for `onedotonedotonedotonedotbot`. +You will also need to add the 1.1.1.1 bot to your friends list in Telegram before using this functionality: +1. Open the Telegram app. +1. Click **Contacts**. +1. Search for `onedotonedotonedotonedotbot`. -![search](../static/search.png) +
Search
-When the 1.1.1.1 bot appears in the search results, click on it. +1. When the 1.1.1.1 bot appears in the search results, click on it. +1. Then press **Start**. -Then press `start`. +
Search
-![search](../static/click-start.png) +1. You can send a single domain name, which will default to returning the AAAA record. For example: -You can send a single domain name, which will default to returning the AAAA record. - -Example: - -![search](../static/example-com.png) +
Search
Or you can send a record type followed by a domain name. The record types supported are: -```txt -A -AAAA -CAA -CNAME -DS -DNSKEY -MX -NS -NSEC -NSEC3 -RRSIG -SOA -TXT -``` +* A +* AAAA +* CAA +* CNAME +* DS +* DNSKEY +* MX +* NS +* NSEC +* NSEC3 +* RRSIG +* SOA +* TXT Example: - -![search](../static/aaaa-example-com.png) +
Search
diff --git a/products/1.1.1.1/src/content/fun-stuff/dns-over-tor.md b/products/1.1.1.1/src/content/fun-stuff/dns-over-tor.md index 2d344efd1aa..b69f41cde43 100644 --- a/products/1.1.1.1/src/content/fun-stuff/dns-over-tor.md +++ b/products/1.1.1.1/src/content/fun-stuff/dns-over-tor.md @@ -1,84 +1,85 @@ --- order: 5 +pcx-content: tutorial --- # DNS over Tor -Follow this quick guide to start using the hidden resolver or read about it in -[this blog post](https://blog.cloudflare.com/welcome-hidden-resolver/) +Follow this quick guide to start using the hidden resolver or read about it in [this blog post](https://blog.cloudflare.com/welcome-hidden-resolver/) ## Setting up a Tor client -The important difference between using all other modes of DNS and this mode is that packet -routing no longer uses IP addresses, and therefore all connections must be routed through a -Tor client. Before anything else, head to the -[Tor Project](https://www.torproject.org/download/download.html.en) website to download and -install a Tor client. If you use the Tor Browser, it will automatically start a SOCKS proxy at -`127.0.0.1:9150`. If you use Tor from the command line, create a config file like below and run -`tor -f tor.conf`: +The important difference between using all other modes of DNS and this mode is that packet routing no longer uses IP addresses, and therefore all connections must be routed through a Tor client. Before anything else, head to the [Tor Project](https://www.torproject.org/download/download.html.en) website to download and install a Tor client. If you use the Tor Browser, it will automatically start a SOCKS proxy at `127.0.0.1:9150`. If you use Tor from the command line, create a config file like below and run `tor -f tor.conf`: - SOCKSPort 9150 +```txt +SOCKSPort 9150 +``` -Also, if you use the Tor Browser, you can head to the resolver's address to see the usual -1.1.1.1 page: +Also, if you use the Tor Browser, you can head to the resolver's address to see the usual 1.1.1.1 page: - https://dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion/ +```txt +https://dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion/ +``` -__Note:__ the HTTPS certificate indicator should say "Cloudflare, Inc. (US)." + + +**Tip:** If you ever forget the `dns4torblahblahblah.onion` address, use cURL: + +```sh +$ curl -sI https://tor.cloudflare-dns.com | grep -i alt-svc +alt-svc: h2="dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion:443"; ma=315360000; persist=1 +``` ## Setting up a local DNS proxy using socat -Of course, not all DNS clients support connecting to the Tor client, so the easiest way to -connect any DNS-speaking software to the hidden resolver is by forwarding ports locally, for -instance using [`socat`](http://www.dest-unreach.org/socat/). +Of course, not all DNS clients support connecting to the Tor client, so the easiest way to connect any DNS-speaking software to the hidden resolver is by forwarding ports locally, for instance using [`socat`](http://www.dest-unreach.org/socat/). ### DNS over TCP, TLS, and HTTPS -The hidden resolver is set up to listen on TCP ports 53 and 853 for DNS over TCP and TLS. After -setting up a Tor proxy, run the following `socat` command as a privileged user, replacing the -port number appropriately: +The hidden resolver is set up to listen on TCP ports 53 and 853 for DNS over TCP and TLS. After setting up a Tor proxy, run the following `socat` command as a privileged user, replacing the port number appropriately: - PORT=853; socat TCP4-LISTEN:${PORT},reuseaddr,fork SOCKS4A:127.0.0.1:dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion:${PORT},socksport=9150 +```sh +$ PORT=853; socat TCP4-LISTEN:${PORT},reuseaddr,fork SOCKS4A:127.0.0.1:dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion:${PORT},socksport=9150 +``` -From here, you can follow the regular guide for [Setting Up 1.1.1.1](../../setting-up-1.1.1.1/), -except always use `127.0.0.1` instead of 1.1.1.1. If you need to access the proxy from another -device, simply replace `127.0.0.1` in `socat` commands with your local IP address. +From here, you can follow the regular guide for [Setting up 1.1.1.1](../../setting-up-1.1.1.1/), except always use `127.0.0.1` instead of 1.1.1.1. If you need to access the proxy from another device, simply replace `127.0.0.1` in `socat` commands with your local IP address. ### DNS over UDP -Note that the Tor network does not support UDP connections, which is why some hacking is needed. -If your client only supports UDP connections, the solution is to encapsulate packets to port -UDP:53 on localhost as TCP packets using the following `socat` command: +Note that the Tor network does not support UDP connections, which is why some hacking is needed. If your client only supports UDP connections, the solution is to encapsulate packets to port `UDP:53` on localhost as TCP packets using the following `socat` command: - socat UDP4-LISTEN:53,reuseaddr,fork SOCKS4A:127.0.0.1:dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion:253,socksport=9150 +```sh +$ socat UDP4-LISTEN:53,reuseaddr,fork SOCKS4A:127.0.0.1:dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion:253,socksport=9150 +``` ### DNS over HTTPS As explained in the blog post, our favorite way of using the hidden resolver is using DoH. -1. First, start with downloading `cloudflared` by following the regular guide for -[Running a DNS over HTTPS Client](../../dns-over-https/cloudflared-proxy/). - -2. Start a Tor SOCKS proxy and use `socat` to forward port TCP:443 to localhost: - - socat TCP4-LISTEN:443,reuseaddr,fork SOCKS4A:127.0.0.1:dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion:443,socksport=9150 +1. First, start with downloading `cloudflared` by following the regular guide for [Running a DNS over HTTPS Client](../../dns-over-https/cloudflared-proxy/). +1. Start a Tor SOCKS proxy and use `socat` to forward port TCP:443 to localhost: -3. Instruct your machine to treat the .onion address as localhost: + ```sh + $ socat TCP4-LISTEN:443,reuseaddr,fork SOCKS4A:127.0.0.1:dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion:443,socksport=9150 + ``` - cat << EOF >> /etc/hosts - 127.0.0.1 dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion - EOF +1. Instruct your machine to treat the `.onion` address as localhost: -4. Finally, start a local DNS over UDP daemon: + ```bash + $ cat << EOF >> /etc/hosts + 127.0.0.1 dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion + EOF + ``` - cloudflared proxy-dns --upstream "https://dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion/dns-query" - INFO[0000] Adding DNS upstream url="https://dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion/dns-query" - INFO[0000] Starting DNS over HTTPS proxy server addr="dns://localhost:53" - INFO[0000] Starting metrics server addr="127.0.0.1:35659" +1. Finally, start a local DNS over UDP daemon: -5. Profit! + ```sh + $ cloudflared proxy-dns --upstream "https://dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion/dns-query" + INFO[0000] Adding DNS upstream url="https://dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion/dns-query" + INFO[0000] Starting DNS over HTTPS proxy server addr="dns://localhost:53" + INFO[0000] Starting metrics server addr="127.0.0.1:35659" + ``` diff --git a/products/1.1.1.1/src/content/fun-stuff/dns-over-twitter.md b/products/1.1.1.1/src/content/fun-stuff/dns-over-twitter.md deleted file mode 100644 index c18090d7ca8..00000000000 --- a/products/1.1.1.1/src/content/fun-stuff/dns-over-twitter.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -order: 6 ---- - -# DNS over Twitter - -Meet [@1111Resolver](https://twitter.com/1111Resolver), your DNS over Twitter client. - -To DNS over Twitter, tweet `@1111Resolver`, followed by a record type, followed by a domain name. - -Record types supported by @1111Resolver are `A` and `AAAA`. - -Example: - -![AAAA](../static/dns-twitter.png) diff --git a/products/1.1.1.1/src/content/fun-stuff/index.md b/products/1.1.1.1/src/content/fun-stuff/index.md index f30cda72107..887ae0855e9 100644 --- a/products/1.1.1.1/src/content/fun-stuff/index.md +++ b/products/1.1.1.1/src/content/fun-stuff/index.md @@ -1,11 +1,12 @@ --- order: 9 +pcx-content: interim --- # Fun with DNS -1.1.1.1's key innovation was bringing DNS to other transport protocols. You may have heard about [DNS over HTTPS](dns-over-https/) and [DNS over TLS](dns-over-tls/), but you may not have heard of the more breakthrough protocols such as [DNS over Twitter (DoT)](./dns-over-twitter/). +Did you know there are other ways to use 1.1.1.1? You may have heard about [DNS over HTTPS](/dns-over-https) and [DNS over TLS](/dns-over-tls), but how about the less common [DNS over Discord (DoD)](/fun-stuff/dns-over-discord)? -In the following sections you can explore the brand new scientific innovations of such modern DNS transit protocols. +
-(AAAA! Who knew DNS could be SOA cool. Enjoy the NXT sections. TT(y)L.) + diff --git a/products/1.1.1.1/src/content/index.md b/products/1.1.1.1/src/content/index.md index 6b296f657cf..73296fef1a3 100644 --- a/products/1.1.1.1/src/content/index.md +++ b/products/1.1.1.1/src/content/index.md @@ -1,24 +1,28 @@ --- -title: Welcome order: -2 type: overview +pcx-content: landing-page --- -import h1gif from "./static/1111-fancycolor.gif" -import IndexH1 from "./index-h1.js" +# Overview -# +
+
+ +![Cloudflare 1.1.1.1](static/1111-fancycolor.gif) + +
-1.1.1.1 is a fast and private way to browse the internet. It is a DNS resolver - kind of like Google Maps for your computer, it translates places (like cloudflare.com) into addresses (like 2400:cb00:2048:1::c629:d7a2). 1.1.1.1 is deployed in 150+ cities worldwide, and has access to the addresses of 7M+ domain names on the same servers it runs on so [it’s the fastest resolver out there](https://www.dnsperf.com/#!dns-resolvers). +1.1.1.1 is a fast and private way to browse the internet. It is a DNS resolver - kind of like Google Maps for your computer, it translates places (like cloudflare.com) into addresses (like `2400:cb00:2048:1::c629:d7a2`). 1.1.1.1 is deployed in 150+ cities worldwide, and has access to the addresses of 7M+ domain names on the same servers it runs on so [it’s the fastest resolver out there](https://www.dnsperf.com/#!dns-resolvers). The addresses of 1.1.1.1 are: -- 1.1.1.1 -- 1.0.0.1 -- 2606:4700:4700::1111 -- 2606:4700:4700::1001 +- `1.1.1.1` +- `1.0.0.1` +- `2606:4700:4700::1111` +- `2606:4700:4700::1001` Moreover, you can access 1.1.1.1 as a Tor hidden service at this address: @@ -29,4 +33,4 @@ Moreover, you can access 1.1.1.1 as a Tor hidden service at this address: - + \ No newline at end of file diff --git a/products/1.1.1.1/src/content/nitty-gritty-details/index.md b/products/1.1.1.1/src/content/nitty-gritty-details/index.md index d3979f6e450..8517cd8e8e1 100644 --- a/products/1.1.1.1/src/content/nitty-gritty-details/index.md +++ b/products/1.1.1.1/src/content/nitty-gritty-details/index.md @@ -1,12 +1,13 @@ --- order: 8 +pcx-content: interim --- # The nitty gritty ## ANY -Cloudflare [stopped supporting the ANY query](https://blog.cloudflare.com/deprecating-dns-any-meta-query-type/) in 2015 as ANY queries are more often used to perpetuate large volumetric attacks against the DNS system than valid use. 1.1.1.1 returns NOTIMPL when asked for qtype==ANY. +Cloudflare [stopped supporting the ANY query](https://blog.cloudflare.com/deprecating-dns-any-meta-query-type/) in 2015 as ANY queries are more often used to perpetuate large volumetric attacks against the DNS system than valid use. 1.1.1.1 returns `NOTIMPL` when asked for `qtype==ANY`. ## DNSSEC @@ -18,8 +19,6 @@ Cloudflare [stopped supporting the ANY query](https://blog.cloudflare.com/deprec ## IPv6 -It’s not 1995. - 1.1.1.1 has full IPv6 support. ## Purge cache diff --git a/products/1.1.1.1/src/content/privacy/firefox.md b/products/1.1.1.1/src/content/privacy/firefox.md index a6a8c7a4923..966d0b40ac8 100644 --- a/products/1.1.1.1/src/content/privacy/firefox.md +++ b/products/1.1.1.1/src/content/privacy/firefox.md @@ -1,12 +1,13 @@ --- order: 2 +pcx-content: concept --- # Cloudflare Resolver for Firefox -## FREQUENTLY ASKED QUESTIONS ABOUT THE CLOUDFLARE RESOLVER FOR FIREFOX +## Frequently asked questions about the Cloudflare resolver for Firefox -WHAT IS THE CLOUDFLARE RESOLVER FOR FIREFOX? +### What is the Cloudflare resolver for Firefox? Every time you type a web address, such as www.mozilla.org or www.firefox.com, into a web browser the web browser sends a query to a DNS resolver. If DNS is like the card catalog of the Internet, then a DNS resolver is like a helpful librarian that knows how to use the information from that catalog to track down the exact location of a website. Whenever a resolver receives your query it looks up the IP address associated with the web address that you entered and relays that information to your web browser. “DNS resolution” as this process is referred to, is a crucial component of your Internet experience because without it your web browser would be unable to communicate with the servers that host your favorite websites since communication requires knowing the IP addresses of those websites. @@ -14,7 +15,7 @@ For most Internet users the DNS resolver that they use is either the one that co To counter such threats, Mozilla has partnered with Cloudflare to provide direct DNS resolution from within the Firefox browser using the Cloudflare Resolver for Firefox. What this means is that whenever you click on or type a web address in the Firefox browser your DNS lookup request will be sent over a secure channel to the Cloudflare Resolver for Firefox rather than to an unknown DNS resolver, significantly decreasing the odds of any unwanted spying or man in the middle attacks. -WHAT INFORMATION DOES THE CLOUDFLARE RESOLVER FOR FIREFOX COLLECT? +### What information does the Cloudflare resolver for Firefox collect? Any data Cloudflare handles as a result of its resolver for Firefox is as a data processor acting pursuant to Firefox’s data processing instructions. Therefore, the data Cloudflare collects and processes pursuant to its agreement with Firefox is not covered by the [Cloudflare Privacy Policy](https://www.cloudflare.com/privacypolicy/). As part of its agreement with Firefox, Cloudflare has agreed to collect only a limited amount of data about the DNS requests that are sent to the Cloudflare Resolver for Firefox via the Firefox browser. Cloudflare will collect only the following information from Firefox users: @@ -58,7 +59,7 @@ All of the above information will be stored briefly as part of Cloudflare’s te Information stored in Cloudflare’s permanent logs will be anonymized and may be held indefinitely by Cloudflare for its own internal research and development purposes. -WHAT IS THE CLOUDFLARE PROMISE? +### What is the Cloudflare promise? Cloudflare understands how important your data is to you which is why we promise to use the information that we collect from the Cloudflare Resolver for Firefox solely to improve the performance of Cloudflare Resolver for Firefox and to assist us in debugging efforts if an issue arises. In addition to limiting our collection and use of your data, Cloudflare also promises: @@ -68,6 +69,6 @@ Cloudflare will not combine the data that it collects from such queries, with an Cloudflare will not sell, license, sublicense, or grant any rights to your data to any other person or entity without Mozilla’s explicit written permission. -WHAT ABOUT GOVERNMENT REQUESTS FOR CONTENT BLOCKING? +### What about government requests for content blocking? Cloudflare does not block or filter content through the Cloudflare Resolver for Firefox. As part of its agreement with Mozilla, Cloudflare is providing only direct DNS resolution. If Cloudflare were to receive written requests from law enforcement and government agencies to block access to domains or content through the Cloudflare resolver for Firefox, Cloudflare would, in consultation with Mozilla, exhaust our legal remedies before complying with such a request. We also commit to documenting any government request to block access in our semi-annual transparency report, unless legally prohibited from doing so. diff --git a/products/1.1.1.1/src/content/privacy/index.md b/products/1.1.1.1/src/content/privacy/index.md index 3694298080a..c1836205dba 100644 --- a/products/1.1.1.1/src/content/privacy/index.md +++ b/products/1.1.1.1/src/content/privacy/index.md @@ -1,5 +1,6 @@ --- order: 10 +pcx-content: reference --- # Privacy diff --git a/products/1.1.1.1/src/content/privacy/public-dns-resolver.md b/products/1.1.1.1/src/content/privacy/public-dns-resolver.md index 950fc803cb0..206a5db20f7 100644 --- a/products/1.1.1.1/src/content/privacy/public-dns-resolver.md +++ b/products/1.1.1.1/src/content/privacy/public-dns-resolver.md @@ -1,12 +1,13 @@ --- order: 1 +pcx-content: reference --- # 1.1.1.1 Public DNS Resolver *Last updated September 30, 2020* -Cloudflare’s Commitment to Privacy: 1.1.1.1 Public DNS Resolver +## Cloudflare’s commitment to privacy: 1.1.1.1 Public DNS Resolver The 1.1.1.1 public DNS resolver is governed by our [Privacy Policy](https://www.cloudflare.com/privacypolicy/). This document provides additional details on our collection, use, and disclosure of the information collected from the 1.1.1.1 public DNS resolver. @@ -21,16 +22,16 @@ Given the current state of affairs, Cloudflare created a DNS resolver with your The 1.1.1.1 public DNS resolver was designed for privacy first, and Cloudflare commits to the following: 1. Cloudflare will not sell or share Public Resolver users’ personal data with third parties or use personal data from the Public Resolver to target any user with advertisements. -2. Cloudflare will only retain or use what is being asked, not information that will identify who is asking it. Except for randomly sampled network packets captured from at most .05% of all traffic sent to Cloudflare’s network infrastructure, Cloudflare will not retain the source IP from DNS queries to the Public Resolver in non-volatile storage. These randomly sampled packets are solely used for network troubleshooting and DoS mitigation purposes. -3. A Public Resolver user’s IP address (referred to as the client or source IP address) will not be stored in non-volatile storage. Cloudflare will anonymize source IP addresses via IP truncation methods (last octet for IPv4 and last 80 bits for IPv6). Cloudflare will delete the truncated IP address within 25 hours. -4. Cloudflare will retain only the limited transaction and debug log data (“Public Resolver Logs”) set forth below, for the legitimate operation of our Public Resolver and research purposes, and Cloudflare will delete the Public Resolver Logs within 25 hours. -5. Cloudflare will not share the Public Resolver Logs with any third parties except for APNIC pursuant to a Research Cooperative Agreement. APNIC will only have limited access to query the anonymized data in the Public Resolver Logs and conduct research related to the operation of the DNS system. +1. Cloudflare will only retain or use what is being asked, not information that will identify who is asking it. Except for randomly sampled network packets captured from at most .05% of all traffic sent to Cloudflare’s network infrastructure, Cloudflare will not retain the source IP from DNS queries to the Public Resolver in non-volatile storage. These randomly sampled packets are solely used for network troubleshooting and DoS mitigation purposes. +1. A Public Resolver user’s IP address (referred to as the client or source IP address) will not be stored in non-volatile storage. Cloudflare will anonymize source IP addresses via IP truncation methods (last octet for IPv4 and last 80 bits for IPv6). Cloudflare will delete the truncated IP address within 25 hours. +1. Cloudflare will retain only the limited transaction and debug log data (“Public Resolver Logs”) set forth below, for the legitimate operation of our Public Resolver and research purposes, and Cloudflare will delete the Public Resolver Logs within 25 hours. +1. Cloudflare will not share the Public Resolver Logs with any third parties except for APNIC pursuant to a Research Cooperative Agreement. APNIC will only have limited access to query the anonymized data in the Public Resolver Logs and conduct research related to the operation of the DNS system. Frankly, we don’t want to know what any one person is doing on the Internet — it’s none of our business — and we’ve taken the technical steps to ensure we can’t. -We wanted to put our money where our mouth was, so we retained one of the top four accounting firms to audit our practices and publish a public report confirming we're doing what we said we would. The report is available [here](https://www.cloudflare.com/compliance/). +We wanted to put our money where our mouth was, so we retained one of the top four accounting firms to audit our practices and publish a public report confirming we're doing what we said we would. The report is available in the [Certifications and compliance resources](https://www.cloudflare.com/trust-hub/compliance-resources/) page. -## LIMITED DATA SHARING WITH APNIC +## Limited data sharing with APNIC Cloudflare has partnered with [APNIC Labs](https://labs.apnic.net/?p=1127), the regional Internet registry for the Asia-Pacific region to make the 1.1.1.1 IP address the home of the Cloudflare Public DNS Resolver. As part of its mission to ensure a global, open and secure Internet, APNIC conducts research about the functioning and governance of the Internet, which it makes available on its website, located at www.apnic.net. @@ -40,7 +41,7 @@ APNIC Labs will use such data for non-profit operational research. As part of Cl Aside from APNIC, Cloudflare will not share the Public Resolver Logs with any third party. -## DATA IN PUBLIC RESOLVER LOGS +## Data in public resolver logs The Public Resolver Logs we store consist entirely of the following fields: @@ -87,8 +88,8 @@ The following subrequest data is included in the Public Resolver Logs: * subrequest.queryName * subrequest.queryType * subrequest.responseCode -* subreqest.responseCount -* subreqeust.recordType +* subrequest.responseCount +* subrequest.recordType * subrequest.recordData * subrequest.error @@ -96,7 +97,7 @@ Except for the limited aggregated data generated using the Public Resolver Logs Cloudflare will only store the following aggregated data: -* Total number of queries with different protocol settings (e.g tcp/udp/dnssec) by Cloudflare PoP +* Total number of queries with different protocol settings (for example, tcp/udp/dnssec) by Cloudflare PoP * Response code/time quantiles with different protocol settings by Cloudflare PoP * Total Number of Requests Processed by Cloudflare PoP * Aggregate List of All Domain Names Requested, aggregate number of requests and timestamp of first time requested @@ -106,7 +107,7 @@ Cloudflare will only store the following aggregated data: Cloudflare may store the aggregated data described above indefinitely in order to power Cloudflare Radar and assist Cloudflare in improving Cloudflare services, such as, enhancing the overall performance of the Cloudflare Resolver and identifying security threats. -## WHAT ABOUT REQUESTS FOR CONTENT BLOCKING? +## What about requests for content blocking? Cloudflare does not block or filter any content through the 1.1.1.1 Public DNS Resolver, which is designed for direct, fast DNS resolution, not for blocking or filtering content. Cloudflare does block and filter malware and adult content through 1.1.1.1 for Families, which is designed to help individuals protect their home networks. diff --git a/products/1.1.1.1/src/content/setting-up-1.1.1.1/android.md b/products/1.1.1.1/src/content/setting-up-1.1.1.1/android.md index 6ab499e1ec2..6d97501bcb7 100644 --- a/products/1.1.1.1/src/content/setting-up-1.1.1.1/android.md +++ b/products/1.1.1.1/src/content/setting-up-1.1.1.1/android.md @@ -1,24 +1,27 @@ --- order: 1 +pcx-content: tutorial --- +import CaptivePortals from "../_partials/_captive-portals.md" + # Android -## Android 9 Pie +## Android 9 Pie or later -Android Pie supports Private DNS, which uses DNS over TLS to secure your queries. -If your device runs Android 9, this is the recommended method to set up 1.1.1.1 because unlike previous versions -of Android, it does not need to be configured for each new WiFi network. +Android Pie or later supports Private DNS, which uses DNS over TLS to secure your queries. +If your device runs Android version 9 or later, this is the recommended method to set up 1.1.1.1 because unlike previous versions +of Android, it does not need to be configured for each new Wi-Fi network. Follow these steps to configure your device to use 1.1.1.1. -Step 1: Go to Settings → Network & internet → Advanced → Private DNS. +1. Go to **Settings** > **Network & internet** > **Advanced** > **Private DNS**. -Step 2: Select the Private DNS provider hostname option. +1. Select the **Private DNS** provider hostname option. -Step 3: Enter `one.one.one.one` or `1dot1dot1dot1.cloudflare-dns.com` and hit Save. +1. Enter `one.one.one.one` or `1dot1dot1dot1.cloudflare-dns.com` and hit **Save**. -Step 4: Visit [1.1.1.1/help](https://1.1.1.1/help) to verify DNS over TLS is enabled. +1. Visit [1.1.1.1/help](https://1.1.1.1/help) to verify DNS over TLS is enabled. ## Previous versions @@ -26,25 +29,27 @@ Follow this quick guide to start using 1.1.1.1 on your Android. -Step 1: Open up Settings. +1. Open **Settings**. + +1. Click on **Wi-Fi**. -Step 2: Click on Wi-Fi. +1. Press down and hold on the name of the network you are currently connected to. -Step 3: Press down and hold on the name of the network you are currently connected to. +1. Click **Modify Network**. -Step 4: Click Modify Network. +1. Click the check box **Show Advanced Options**. -Step 5: Click the check box called Show Advanced Options. +1. Change the IP Settings to **Static**. -Step 6: Change the IP Settings to the option called Static. +1. Remove any IP addresses that may be already listed and in their place add: -Step 7: Remove any IP addresses that may be already listed and in their place add: + ```txt + 1.1.1.1 + 1.0.0.1 + 2606:4700:4700::1111 + 2606:4700:4700::1001 + ``` -```txt -1.1.1.1 -1.0.0.1 -2606:4700:4700::1111 -2606:4700:4700::1001 -``` +1. Click **Save**. You may need to disconnect from the Wi-Fi and reconnect for the changes to take place. -Step 8: Click Save. You may need to disconnect from the Wi-Fi and reconnect for the changes to take place. + \ No newline at end of file diff --git a/products/1.1.1.1/src/content/setting-up-1.1.1.1/azure.md b/products/1.1.1.1/src/content/setting-up-1.1.1.1/azure.md index 47db9bf40d9..b1b27e353c5 100644 --- a/products/1.1.1.1/src/content/setting-up-1.1.1.1/azure.md +++ b/products/1.1.1.1/src/content/setting-up-1.1.1.1/azure.md @@ -1,22 +1,23 @@ --- order: 2 +pcx-content: tutorial --- # Azure Follow this quick guide to start using 1.1.1.1 on Microsoft Azure. -Step 1: Log into your Azure portal. +1. Log into your Azure portal. -Step 2: From the Azure portal side menu, select **Virtual Networks**. +1. From the Azure portal side menu, select **Virtual Networks**. -Step 3: Navigate to the virtual network associated with your virtual machine (VM). +1. Navigate to the virtual network associated with your virtual machine (VM). -Step 4: Select **DNS Servers**, then **Custom**, and add two entries: +1. Select **DNS Servers** > **Custom**, and add two entries: -```txt -1.1.1.1 -1.0.0.1 -``` + ```txt + 1.1.1.1 + 1.0.0.1 + ``` -Step 5: Click **Save**. +1. Click **Save**. \ No newline at end of file diff --git a/products/1.1.1.1/src/content/setting-up-1.1.1.1/gaming.md b/products/1.1.1.1/src/content/setting-up-1.1.1.1/gaming.md index d93bac0b9be..2830dc87c0d 100644 --- a/products/1.1.1.1/src/content/setting-up-1.1.1.1/gaming.md +++ b/products/1.1.1.1/src/content/setting-up-1.1.1.1/gaming.md @@ -1,5 +1,6 @@ --- order: 3 +pcx-content: tutorial --- # Gaming consoles @@ -10,85 +11,62 @@ Follow the instructions below to setup 1.1.1.1 on your gaming consoles. ## PS4 -Step 1: Go to Settings. - -Step 2: Go to Network. - -Step 3: Go to Set Up Internet Connection - -Step 4: Select Wifi or LAN depending on what you use. - -Step 5: Select Custom. - -Step 6: Set IP Address Settings to Automatic. - -Step 7: Set DHCP Host Name to Do Not Specify - -Step 8: Set DNS Settings to Manual - -Step 9: Set Primary DNS to: `1.1.1.1` - -Step 10: Set Secondary DNS to: `1.0.0.1` - -Step 11: If you are able to add more DNS servers, you can add the IPv6 addresses as well: - -```txt -2606:4700:4700::1111 -2606:4700:4700::1001 -``` - -Step 12: Set MTU Settings to Automatic - -Step 13: Set Proxy Server to Do Not Use +1. Go to **Settings**. +1. Go to **Network**. +1. Go to **Set Up Internet Connection**. +1. Select **Wi-Fi** or **LAN** depending on what you use. +1. Select **Custom**. +1. Set **IP Address Settings** to **Automatic**. +1. Set **DHCP Host Name** to **Do Not Specify**. +1. Set **DNS Settings** to **Manual**. +1. Set **Primary DNS** to: `1.1.1.1`. +1. Set **Secondary DNS** to: `1.0.0.1`. +1. If you are able to add more DNS servers, you can add the IPv6 addresses as well: + + ```txt + 2606:4700:4700::1111 + 2606:4700:4700::1001 + ``` + +1. Set **MTU Settings** to **Automatic**. +1. Set **Proxy Server** to **Do Not Use**. ## Xbox One -Step 1: Open the Network screen by pressing the Xbox button (looks like the Xbox logo) and then selecting Settings > Network > Network Settings. - -Step 2: Click Advanced Settings - -Step 3: Click DNS Settings +1. Open the Network screen by pressing the Xbox button (looks like the Xbox logo). +1. Select **Settings** > **Network** > **Network Settings**. +1. Click **Advanced Settings**. +1. Click **DNS Settings**. +1. Choose **Manual**. +1. Set **Primary DNS** to: `1.1.1.1`. +1. Set **Secondary DNS** to: `1.0.0.1`. +1. If you are able to add more DNS servers, you can add the IPv6 addresses as well: -Step 4: Choose Manual + ```txt + 2606:4700:4700::1111 + 2606:4700:4700::1001 + ``` -Step 5: Set Primary DNS to: `1.1.1.1` - -Step 6: Set Secondary DNS to: `1.0.0.1` - -Step 7: If you are able to add more DNS servers, you can add the IPv6 addresses as well: - -```txt -2606:4700:4700::1111 -2606:4700:4700::1001 -``` - -Step 8: When you are done, you will be shown a confirmation screen. Press the B button to save. +1. When you are done, you will be shown a confirmation screen. Press the **B button** to save. ## Nintendo The following instructions work on New Nintendo 3DS, New Nintendo 3DS XL, New Nintendo 2DS XL, Nintendo 3DS, Nintendo 3DS XL, and Nintendo 2DS. -Step 1: Go to the home menu and choose System Settings (the wrench icon) - -Step 2: Select Internet Settings > Connection Settings - -Step 3: Select your internet connection and then select Change Settings - -Step 4: Select Change DNS - -Step 5: Set Auto-Obtain DNS to No. - -Step 6: Click Detailed Setup - -Step 7: Set Primary DNS to: `1.1.1.1` - -Step 8: Set Secondary DNS to: `1.0.0.1` - -Step 9: If you are able to add more DNS servers, you can add the IPv6 addresses as well: - -```txt -2606:4700:4700::1111 -2606:4700:4700::1001 -``` - -Step 10: Click Save then OK +1. Go to the home menu and choose **System Settings** (the wrench icon). +1. Select **Internet Settings** > **Connection Settings**. +1. Select your Internet connection and then select **Change Settings**. +1. Select **Change DNS**. +1. Set **Auto-Obtain DNS** to **No**. +1. Click **Detailed Setup**. +1. Set **Primary DNS** to: `1.1.1.1`. +1. Set **Secondary DNS** to: `1.0.0.1`. +1. If you are able to add more DNS servers, you can add the IPv6 addresses as well: + + ```txt + 2606:4700:4700::1111 + 2606:4700:4700::1001 + ``` + +1. Click **Save**. +1. Click **OK**. \ No newline at end of file diff --git a/products/1.1.1.1/src/content/setting-up-1.1.1.1/index.md b/products/1.1.1.1/src/content/setting-up-1.1.1.1/index.md index c4df5a6af6a..d9269c8aecb 100644 --- a/products/1.1.1.1/src/content/setting-up-1.1.1.1/index.md +++ b/products/1.1.1.1/src/content/setting-up-1.1.1.1/index.md @@ -1,5 +1,6 @@ --- order: -1 +pcx-content: navigation --- # Setting up 1.1.1.1 diff --git a/products/1.1.1.1/src/content/setting-up-1.1.1.1/iphone.md b/products/1.1.1.1/src/content/setting-up-1.1.1.1/iphone.md index 2bae8064a17..c17ac98d289 100644 --- a/products/1.1.1.1/src/content/setting-up-1.1.1.1/iphone.md +++ b/products/1.1.1.1/src/content/setting-up-1.1.1.1/iphone.md @@ -1,48 +1,56 @@ --- order: 5 +pcx-content: tutorial --- +import CaptivePortals from "../_partials/_captive-portals.md" + # iPhone Follow this quick guide to start using 1.1.1.1 on your iPhone. -Step 1: Go to Settings. - -Step 2: Click on Wi-Fi. - -Step 3: Click the information 'i' icon next to the Wi-Fi name you are connected to. +1. Go to **Settings**. +1. Click on **Wi-Fi**. +1. Click the information **'i'** icon next to the Wi-Fi name you are connected to. +1. Scroll down until you see the section called **Configure DNS**. +1. Change the configuration from **Automatic** to **Manual**. +1. Click **Add Server**. +1. Remove any IP addresses that may be already listed and in their place add: -Step 4: Scroll down until you see the section called Configure DNS + ```txt + 1.1.1.1 + 1.0.0.1 + 2606:4700:4700::1111 + 2606:4700:4700::1001 + ``` -Step 5: Change the configuration from Automatic to Manual. +1. Click **Save**. -Step 6: Click Add Server. +## 1.1.1.1 iOS app -Step 7: Remove any IP addresses that may be already listed and in their place add: +If you want to configure 1.1.1.1 automatically, you can [download Cloudflare's 1.1.1.1: Faster Internet](https://apps.apple.com/us/app/1-1-1-1-faster-internet/id1423538627) free iOS app. -```txt -1.1.1.1 -1.0.0.1 -2606:4700:4700::1111 -2606:4700:4700::1001 -``` +1.1.1.1: Faster Internet automatically configures your phone to use 1.1.1.1 on any network you connect to. The app also allows you to enable encryption for DNS queries to the 1.1.1.1 DNS resolver or enable [WARP mode](https://developers.cloudflare.com/warp-client/), which gives you all the protection from 1.1.1.1 while additionally keeping all your HTTP traffic private and secure. -Step 8: Click Save. +You can select between these options in 1.1.1.1: Faster Internet's settings. By default, 1.1.1.1:Faster Internet's settings are configured to WARP mode. -## Using DNS Override iOS App +To set up 1.1.1.1: Faster Internet: -You can also use a handy iOS app called DNS Override (paid app, costs $1.99) that automatically configures 1.1.1.1 for you on any network you connect to. To use it: +1. Download [1.1.1.1: Faster Internet from the app store](https://apps.apple.com/us/app/1-1-1-1-faster-internet/id1423538627). +1. Launch 1.1.1.1: Faster Internet and accept the Terms of Service. +1. Install the VPN profile that allows your phone to connect securely to 1.1.1.1. - +You are now using 1.1.1.1 for your DNS queries. If you want to add an extra layer of security and encrypt all of your traffic with HTTPS, toggle the **WARP** button to **Connected**. -Step 1: [Download DNS Override from the app store](https://itunes.apple.com/us/app/dns-override/id1060830093?mt=8). +Alternatively, you may want to only encrypt your DNS queries and leave the remaining traffic unencrypted. If this is the case: -Step 2: Launch the DNS Override app. +1. Open 1.1.1.1: Faster Internet. +1. Tap the menu button. +1. You will see two options: 1.1.1.1 and WARP. Select **1.1.1.1** > **Done**. -Step 3: Click 1.1.1.1 at the top of the app. +You are now using encryption only for your DNS queries. -Step 4: Turn on the DNS Override toggle -Step 5: DNS Override may ask you to install their VPN profile so that they can automatically update DNS settings. + diff --git a/products/1.1.1.1/src/content/setting-up-1.1.1.1/linux.md b/products/1.1.1.1/src/content/setting-up-1.1.1.1/linux.md index 3783f03fbb9..dd58228da49 100644 --- a/products/1.1.1.1/src/content/setting-up-1.1.1.1/linux.md +++ b/products/1.1.1.1/src/content/setting-up-1.1.1.1/linux.md @@ -1,62 +1,66 @@ --- order: 6 +pcx-content: tutorial --- +import CaptivePortals from "../_partials/_captive-portals.md" + # Linux Follow this quick guide to start using 1.1.1.1 on your Linux device. ## Ubuntu -Step 1: Click System > Preferences > Network Connections. - -Step 2: Click on the Wireless tab, then choose the Wi-Fi network you are currently connected to. - -Step 3: Click Edit then click IPv4. +1. Click **System** > **Preferences** > **Network Connections**. +1. Click on the **Wireless tab**, then choose the Wi-Fi network you are currently connected to. +1. Click **Edit** > **IPv4**. +1. Change the DNS servers listed to: -Step 4: Change the DNS servers listed to: + ```txt + 1.1.1.1 + 1.0.0.1 + ``` -```txt -1.1.1.1 -1.0.0.1 -``` +1. Click **Apply**. +1. Then, go to **IPv6**. +1. Add the DNS servers: -Step 5: Click Apply + ```txt + 2606:4700:4700::1111 + 2606:4700:4700::1001 + ``` -Step 6: Then go to IPv6. +1. Click **Apply**. -Step 7: Add the DNS servers: - -```txt -2606:4700:4700::1111 -2606:4700:4700::1001 -``` +## Debian -Step 8: Click Apply. + 1. In the command line, type: -## Debian + ```sh + $ sudo vim /etc/resolv.conf + ``` -Step 1: In the command line, type: + 1. Press the i key on your keyboard to edit the document. + 1. Replace the `nameserver` lines with: -```sh -$ sudo vim /etc/resolv.conf -``` + For IPv4: -Step 2: Replace the nameserver lines with: -(Since you are using vim press the i key on your keyboard to edit the document) + ```txt + nameserver 1.0.0.1 + nameserver 1.1.1.1 + ``` -For IPv4: + For IPv6: -```txt -nameserver 1.0.0.1 -nameserver 1.1.1.1 -``` + ```txt + nameserver 2606:4700:4700::1111 + nameserver 2606:4700:4700::1001 + ``` -For IPv6: + 1. Press the ESC key on your keyboard to save and exit vim. Then after lifting the key, type: -```txt -nameserver 2606:4700:4700::1111 -nameserver 2606:4700:4700::1001 -``` + ``` + :wq + ``` -Step 3: Save and exit vim by pressing the ESC key on your keyboard. Then after lifting the key type `:wq`. + \ No newline at end of file diff --git a/products/1.1.1.1/src/content/setting-up-1.1.1.1/mac.md b/products/1.1.1.1/src/content/setting-up-1.1.1.1/mac.md index 6d83da76eb5..0a6ed19631e 100644 --- a/products/1.1.1.1/src/content/setting-up-1.1.1.1/mac.md +++ b/products/1.1.1.1/src/content/setting-up-1.1.1.1/mac.md @@ -1,28 +1,29 @@ --- order: 7 +pcx-content: tutorial --- +import CaptivePortals from "../_partials/_captive-portals.md" + # macOS Follow this quick guide to start using 1.1.1.1 on your Mac. -Step 1: Go to System Preferences. You can find it by pressing Command+Space on your Mac and typing System Preferences. - -Step 2: Click on the icon called Network. - -Step 3: Click Advanced. - -Step 4: Select the DNS tab. Remove any IP addresses that may be already listed and in their place add: +1. Go to **System Preferences**. You can find it by pressing Command + Space on your keyboard and typing `System Preferences`. +1. Click on the **Network** icon. +1. Click **Advanced**. +1. Select the **DNS** tab. Remove any IP addresses that may be already listed and in their place add: -```txt -1.1.1.1 -1.0.0.1 -2606:4700:4700::1111 -2606:4700:4700::1001 -``` + ```txt + 1.1.1.1 + 1.0.0.1 + 2606:4700:4700::1111 + 2606:4700:4700::1001 + ``` -Step 5: Click OK. +1. Click **OK**. +1. Click **Apply**. -Step 6: Click Apply. + \ No newline at end of file diff --git a/products/1.1.1.1/src/content/setting-up-1.1.1.1/router.md b/products/1.1.1.1/src/content/setting-up-1.1.1.1/router.md index cb1db49610a..b90ff806a2e 100644 --- a/products/1.1.1.1/src/content/setting-up-1.1.1.1/router.md +++ b/products/1.1.1.1/src/content/setting-up-1.1.1.1/router.md @@ -1,32 +1,30 @@ --- order: 8 +pcx-content: tutorial --- # Router Follow this quick guide to start using 1.1.1.1 on your router. +1. Go to the **IP address** used to access your router's admin console in your browser. -Step 1: Go to the IP address used to access your router's admin console in your browser. + - Linksys and Asus routers typically use [http://192.168.1.1](http://192.168.1.1) + - Netgear routers typically use [http://192.168.0.1](http://192.168.0.1) or [http://192.168.1.1](http://192.168.1.1) + - D-Link routers typically use [http://192.168.0.1](http://192.168.0.1) + - Ubiquiti routers typically use [http://unifi.ubnt.com](http://unifi.ubnt.com) -- Linksys and Asus routers typically use [http://192.168.1.1](http://192.168.1.1) -- Netgear routers typically use [http://192.168.0.1](http://192.168.0.1) or [http://192.168.1.1](http://192.168.1.1) -- D-Link routers typically use [http://192.168.0.1](http://192.168.0.1) -- Ubiquiti routers typically use [http://unifi.ubnt.com](http://unifi.ubnt.com) +1. Enter the router password. +1. Find the place in the admin console where **DNS settings** are set. +1. Replace the existing addresses with: -Step 2: Enter the router password. + ```txt + 1.1.1.1 + 1.0.0.1 + 2606:4700:4700::1111 + 2606:4700:4700::1001 + ``` -Step 3: Find the place in the admin console where DNS settings are set. - -Step 4: Replace the existing addresses with: - -```txt -1.1.1.1 -1.0.0.1 -2606:4700:4700::1111 -2606:4700:4700::1001 -``` - -Step 5: Save and exit. +1. Save the updated settings. ## Using DNS-Over-TLS on OpenWRT @@ -36,65 +34,56 @@ It is possible to encrypt DNS traffic out from your router using DNS-over-TLS if -Step 1: Go to [http://unifi.ubnt.com](http://unifi.ubnt.com) and enter your email and password. - -Step 2: Click on the name of the network you are managing. Click Launch. - -Step 3: Click on the settings icon in the lower left-hand corner. - -Step 4: From the settings menu, choose Networks. - -Step 5; Click Edit by the name of the Network. +1. Go to [http://unifi.ubnt.com](http://unifi.ubnt.com) and enter your **email** and **password**. +1. Click on the name of the network you are managing. +1. Click **Launch**. +1. Click on the **settings** icon in the lower left-hand corner. +1. From the settings menu, choose **Networks**. +1. Click **Edit** by the name of the Network. +1. Scroll to where it says **DHCP Name Server**. If Auto is selected, select **Manual** instead. +1. In the boxes called DNS Server 1, 2, 3, etc. put: -Step 6: Scroll to where it says DHCP Name Server. If Auto is selected, select Manual instead. + ```txt + 1.1.1.1 + 1.0.0.1 + 2606:4700:4700::1111 + 2606:4700:4700::1001 + ``` -Step 7: In the boxes called DNS Server 1, 2, 3, etc. put: - -```txt -1.1.1.1 -1.0.0.1 -2606:4700:4700::1111 -2606:4700:4700::1001 -``` - -Step 8: Click Save. +1. Click **Save**. ## Google Wi-Fi -Step 1: Open the Google Wifi app on your phone. - -Step 2: Click the settings tab, then click on Network & general +1. Open the Google Wifi app on your phone. +1. Click **Settings** > **Network & general**. +1. Click on **Advanced networking** > **DNS**. +1. Remove any IP addresses that may be already listed and in their place enter: -Step 3: Click on Advanced networking then click on DNS + ```txt + 1.1.1.1 + 1.0.0.1 + 2606:4700:4700::1111 + 2606:4700:4700::1001 + ``` -Step 4: Remove any IP addresses that may be already listed and in their place enter: - -```txt -1.1.1.1 -1.0.0.1 -2606:4700:4700::1111 -2606:4700:4700::1001 -``` - -Step 5: Click Save. +1. Click **Save**. ## Asus Router -Step 1: Go to https://192.168.1.1/ - -![Asus Router](../static/asus.png) +1. Go to https://192.168.1.1/ -Step 2: Under Advanced Settings, click on WAN + ![Asus Router](../static/asus.png) -Step 3: In the Internet Connection tab, under WAN DNS Setting, in DNS servers, add: +1. Under **Advanced Settings**, click on **WAN**. +1. In the **Internet Connection** > **WAN DNS Setting** > **DNS servers**, add: -```txt -1.1.1.1 -1.0.0.1 -2606:4700:4700::1111 -2606:4700:4700::1001 -``` + ```txt + 1.1.1.1 + 1.0.0.1 + 2606:4700:4700::1111 + 2606:4700:4700::1001 + ``` ## FRITZ!Box -Starting with [FRITZ!OS 7.20](https://en.avm.de/press/press-releases/2020/07/fritzos-720-with-even-more-performance-convenience-and-security-more-than-100-new-features-and-updates/), DNS over TLS is supported, see [Configuring different DNS servers in the FRITZ!Box](https://en.avm.de/service/fritzbox/fritzbox-7590/knowledge-base/publication/show/165_Configuring-different-DNS-servers-in-the-FRITZ-Box/) +Starting with [FRITZ!OS 7.20](https://en.avm.de/press/press-releases/2020/07/fritzos-720-more-performance-convenience-security/), DNS over TLS is supported, see [Configuring different DNS servers in the FRITZ!Box](https://en.avm.de/service/knowledge-base/dok/FRITZ-Box-7590/165_Configuring-different-DNS-servers-in-the-FRITZ-Box/). \ No newline at end of file diff --git a/products/1.1.1.1/src/content/setting-up-1.1.1.1/windows.md b/products/1.1.1.1/src/content/setting-up-1.1.1.1/windows.md index 6df12091eed..f6b80aa499c 100644 --- a/products/1.1.1.1/src/content/setting-up-1.1.1.1/windows.md +++ b/products/1.1.1.1/src/content/setting-up-1.1.1.1/windows.md @@ -1,7 +1,10 @@ --- -order:8 +order: 8 +pcx-content: tutorial --- +import CaptivePortals from "../_partials/_captive-portals.md" + # Windows Follow this quick guide to start using 1.1.1.1 on your Windows computer. @@ -10,42 +13,32 @@ Follow this quick guide to start using 1.1.1.1 on your Windows computer. -Step 1: Click on the Start menu, then click on **Control Panel**. - -Step 2: Click on **Network and Internet**. - -Step 3: Click on Change **Adapter Settings**. - -Step 4: Right click on the Wi-Fi network you are connected to. - -Step 5: Click Properties. - -Step 6: Select **Internet Protocol Version 4**. - -Step 7: Click Properties. - -Step 8: Click Use The Following DNS Server Addresses. - -Step 9: Remove any IP addresses that may be already listed and in their place add: - -```txt -1.1.1.1 -1.0.0.1 -``` - -Step 10: Click OK. - -Step 11: Go now to **Internet Protocol Version 6**. - -Step 12: Click Properties - -Step 13: Click Use The Following DNS Server Addresses. - -Step 14: Remove any IP addresses that may be already listed and in their place add: - -```txt -2606:4700:4700::1111 -2606:4700:4700::1001 -``` - -Step 15: Click Close. +1. Click on the **Start menu** > **Control Panel**. +1. Click on **Network and Internet**. +1. Click on **Change Adapter Settings**. +1. Right click on the Wi-Fi network you are connected to. +1. Click **Properties**. +1. Select **Internet Protocol Version 4**. +1. Click **Properties**. +1. Click **Use The Following DNS Server Addresses**. +1. Remove any IP addresses that may be already listed and in their place add: + + ```txt + 1.1.1.1 + 1.0.0.1 + ``` + +1. Click **OK**. +1. Go now to **Internet Protocol Version 6**. +1. Click **Properties**. +1. Click **Use The Following DNS Server Addresses**. +1. Remove any IP addresses that may be already listed and in their place add: + + ```txt + 2606:4700:4700::1111 + 2606:4700:4700::1001 + ``` + +1. Click **Close**. + + \ No newline at end of file diff --git a/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-example-1.png b/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-example-1.png index 2cae2721ab2..55954613e95 100644 Binary files a/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-example-1.png and b/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-example-1.png differ diff --git a/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-example-2.png b/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-example-2.png index e3ba642e6b6..15eaa189f4d 100644 Binary files a/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-example-2.png and b/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-example-2.png differ diff --git a/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-refresh.gif b/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-refresh.gif new file mode 100644 index 00000000000..a2271ea1280 Binary files /dev/null and b/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-refresh.gif differ diff --git a/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-types.png b/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-types.png index a2523278a96..d5cb099674a 100644 Binary files a/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-types.png and b/products/1.1.1.1/src/content/static/dns-over-discord/dig-command-types.png differ diff --git a/products/1.1.1.1/src/content/static/dns-over-discord/dig-command.png b/products/1.1.1.1/src/content/static/dns-over-discord/dig-command.png index 4a5cd590b8d..428f2097586 100644 Binary files a/products/1.1.1.1/src/content/static/dns-over-discord/dig-command.png and b/products/1.1.1.1/src/content/static/dns-over-discord/dig-command.png differ diff --git a/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-example-1.png b/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-example-1.png index 53e16d9b531..91107fc22b6 100644 Binary files a/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-example-1.png and b/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-example-1.png differ diff --git a/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-example-2.png b/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-example-2.png index 4b2dc7ebbda..c86fd1d14da 100644 Binary files a/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-example-2.png and b/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-example-2.png differ diff --git a/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-refresh.gif b/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-refresh.gif new file mode 100644 index 00000000000..9876674e998 Binary files /dev/null and b/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-refresh.gif differ diff --git a/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-types.png b/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-types.png index 65e1c018616..de28ff3a9e2 100644 Binary files a/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-types.png and b/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command-types.png differ diff --git a/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command.png b/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command.png index 88fcc85cb55..71e55c789ab 100644 Binary files a/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command.png and b/products/1.1.1.1/src/content/static/dns-over-discord/multi-dig-command.png differ diff --git a/products/1.1.1.1/src/content/support-nat64/index.md b/products/1.1.1.1/src/content/support-nat64/index.md index 69e8c8bdad2..929025541d3 100644 --- a/products/1.1.1.1/src/content/support-nat64/index.md +++ b/products/1.1.1.1/src/content/support-nat64/index.md @@ -1,6 +1,7 @@ --- title: For IPv6-only networks order: 9 +pcx-content: interim --- # Supporting IPv6-only networks @@ -17,13 +18,17 @@ You should only enable DNS64 if you are managing or using an IPv6-only network. DNS64 is specifically for networks that already have NAT64 support. If you are a network operator who has NAT64, you can test our DNS64 support by updating it to the following IP addresses: - 2606:4700:4700::64 - 2606:4700:4700::6400 +```txt +2606:4700:4700::64 +2606:4700:4700::6400 +``` -Some devices use separate fields for all eight parts of IPv6 addresses and cannot accept the :: IPv6 abbreviation syntax. For such fields enter: +Some devices use separate fields for all eight parts of IPv6 addresses and cannot accept the `::` IPv6 abbreviation syntax. For such fields enter: - 2606:4700:4700:0:0:0:0:64 - 2606:4700:4700:0:0:0:0:6400 +```txt +2606:4700:4700:0:0:0:0:64 +2606:4700:4700:0:0:0:0:6400 +``` ## How can I test it? diff --git a/products/1.1.1.1/src/content/terms-of-use/index.md b/products/1.1.1.1/src/content/terms-of-use/index.md index d61b975b96b..d5b83180a8e 100644 --- a/products/1.1.1.1/src/content/terms-of-use/index.md +++ b/products/1.1.1.1/src/content/terms-of-use/index.md @@ -1,10 +1,9 @@ --- title: Terms order: 10 +pcx-content: reference --- # Terms of Use -1.1.1.1 Public DNS Resolver & 1.1.1.1 for Families Terms of Use - By using 1.1.1.1 Public DNS Resolver or 1.1.1.1 for Families, you consent to be bound by the [Cloudflare Website and Online Services Terms of Use](https://www.cloudflare.com/website-terms/). diff --git a/products/1.1.1.1/src/content/what-is-1.1.1.1/index.md b/products/1.1.1.1/src/content/what-is-1.1.1.1/index.md index 0394b9f9355..fd7a78ef708 100644 --- a/products/1.1.1.1/src/content/what-is-1.1.1.1/index.md +++ b/products/1.1.1.1/src/content/what-is-1.1.1.1/index.md @@ -1,5 +1,6 @@ --- order: 2 +pcx-content: concept --- # What is 1.1.1.1? @@ -8,9 +9,9 @@ order: 2 When you request to visit an application like cloudflare.com, your computer needs to know which server to connect you to so that it can load the application. Computers don’t know how to do this name to address translation, so they ask a specialized server to do it for them. -This specialized server is called a DNS recursive resolver. The resolver’s job is to find the address for a given name, like 2400:cb00:2048:1::c629:d7a2 for cloudflare.com, and return it to the computer that asked for it. +This specialized server is called a DNS recursive resolver. The resolver’s job is to find the address for a given name, like `2400:cb00:2048:1::c629:d7a2` for cloudflare.com, and return it to the computer that asked for it. -Computers are configured to talk to specific DNS resolvers, identified by IP address. Usually the configuration is managed by your ISP (like Comcast or AT&T) if you’re on your home or wireless internet, and by your network administrator if you’re connected to the office internet. You can also change the configured DNS resolver your computer talks to yourself. +Computers are configured to talk to specific DNS resolvers, identified by IP address. Usually the configuration is managed by your ISP (like Comcast or AT&T) if you’re on your home or wireless Internet, and by your network administrator if you’re connected to the office Internet. You can also change the configured DNS resolver your computer talks to yourself. ## What do DNS resolvers do? @@ -24,4 +25,4 @@ The resolver then asks the TLD’s servers where it can find the domain it is lo Once the resolver has the final IP address, it returns the answer to the computer that asked. -This whole system - with the servers that host the information (they are called authoritative DNS) and the servers that seek the information (the DNS resolvers) is called the Domain Name System (DNS). DNS is like Google Maps for the internet. It translates the name of places to addresses so that you can figure out how to get there. +This whole system — with the servers that host the information (they are called authoritative DNS) and the servers that seek the information (the DNS resolvers) — is called the Domain Name System (DNS). DNS is like Google Maps for the Internet. It translates the name of places to addresses so that you can figure out how to get there. diff --git a/products/access/docs-config.js b/products/access/docs-config.js index 0d706c5d87d..1c6b5584aa5 100644 --- a/products/access/docs-config.js +++ b/products/access/docs-config.js @@ -28,6 +28,6 @@ module.exports = { description: "Welcome to Cloudflare Access. You can now make all your applications available on the internet without a VPN. Access protects these applications and allows only authorized users to access them. For example, Cloudflare uses Access to ensure only people at Cloudflare can access internal tools like our staging site.", author: "@cloudflare", url: "https://developers.cloudflare.com/access", - image: "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" + image: "https://www.cloudflare.com/img/cf-twitter-card.png" } } diff --git a/products/access/src/content/api-and-terraform/access-with-terraform.md b/products/access/src/content/api-and-terraform/access-with-terraform.md index 4d19a7bd1e9..2fdde393a96 100644 --- a/products/access/src/content/api-and-terraform/access-with-terraform.md +++ b/products/access/src/content/api-and-terraform/access-with-terraform.md @@ -12,7 +12,8 @@ We're no longer maintaining this page. **It will be deleted on Feb 8, 2021**. Pl | Requirements | | ------------ | -| [Terraform](https://learn.hashicorp.com/terraform/getting-started/install.html) installed on your machine. | +| [Terraform](https://learn.hashicorp.com/terraform/getting-started/install.html) installed on your machine | +| The [Cloudflare provider](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs) properly configured | [Terraform](https://learn.hashicorp.com/terraform/getting-started/install.html) is a tool for building, changing, and versioning infrastructure, and provides components and documentation for building [Cloudflare resources](https://www.terraform.io/docs/providers/cloudflare/). Listed below are examples to help you get started with building Access with Terraform. For a more generalized guide on configuring Cloudflare and Terraform, visit our [Getting Started with Terraform and Cloudflare](https://blog.cloudflare.com/getting-started-with-terraform-and-cloudflare-part-1/) blog post. @@ -23,8 +24,6 @@ We're no longer maintaining this page. **It will be deleted on Feb 8, 2021**. Pl Here is an example configuration: ``` -provider "cloudflare" {} - variable "domain" { default = "example.com" } @@ -189,4 +188,4 @@ resource "cloudflare_access_policy" "cf_policy" { } } ``` -These are the basics to get up and running with Access and Terraform. See our [API documentation](https://api.cloudflare.com/#access-organizations-properties) for other endpoints that can be managed via Terraform. \ No newline at end of file +These are the basics to get up and running with Access and Terraform. See our [API documentation](https://api.cloudflare.com/#access-organizations-properties) for other endpoints that can be managed via Terraform. diff --git a/products/access/src/content/common-access-configurations/gitlab.md b/products/access/src/content/common-access-configurations/gitlab.md index 4cbc276c6aa..2552bc3f58f 100644 --- a/products/access/src/content/common-access-configurations/gitlab.md +++ b/products/access/src/content/common-access-configurations/gitlab.md @@ -48,8 +48,8 @@ Cloudflare Argo Tunnel creates a secure, outbound-only, connection between this Argo Tunnel can be installed on the machine with the following commands. ```sh -$ sudo wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb -$ sudo dpkg -i ./cloudflared-stable-linux-amd64.deb +$ sudo wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb +$ sudo dpkg -i ./cloudflared-linux-amd64.deb ``` Once installed, you will need to authenticate `cloudflared`. The following command will print a URL that can be visited in another machine with a browser. diff --git a/products/access/src/content/other-protocols/smb-guide.md b/products/access/src/content/other-protocols/smb-guide.md index 8a7cb0780a4..e3a17ef9144 100644 --- a/products/access/src/content/other-protocols/smb-guide.md +++ b/products/access/src/content/other-protocols/smb-guide.md @@ -37,8 +37,7 @@ For example, on a Windows server, the following Powershell example can be used. ```bash New-Item -Path "C:\cloudflared" -ItemType "directory" Set-Location "C:\cloudflared" -(New-Object System.Net.WebClient).DownloadFile("https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-windows-amd64.zip","c:\cloudflared\cloudflared.zip") -Expand-Archive -LiteralPath c:\cloudflared\cloudflared.zip -DestinationPath c:\cloudflared +(New-Object System.Net.WebClient).DownloadFile("https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-amd64.exe","c:\cloudflared\cloudflared.exe") ``` ## 2. Authenticate the Cloudflare daemon @@ -103,4 +102,4 @@ On the Windows machine, locate the Server process, likely called "Server" and ru **Common issues** -* Ensure that the machine's firewall permits egress on ports 80, 443, and 2244, otherwise `cloudflared` will return an error. \ No newline at end of file +* Ensure that the machine's firewall permits egress on ports 80, 443, and 2244, otherwise `cloudflared` will return an error. diff --git a/products/access/src/content/protocols-and-connections/SMB-file-shares.md b/products/access/src/content/protocols-and-connections/SMB-file-shares.md index 0650a5786a3..203c6c84ee8 100644 --- a/products/access/src/content/protocols-and-connections/SMB-file-shares.md +++ b/products/access/src/content/protocols-and-connections/SMB-file-shares.md @@ -41,8 +41,7 @@ For example, on a Windows server, the following Powershell example can be used. ```bash New-Item -Path "C:\cloudflared" -ItemType "directory" Set-Location "C:\cloudflared" -(New-Object System.Net.WebClient).DownloadFile("https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-windows-amd64.zip","c:\cloudflared\cloudflared.zip") -Expand-Archive -LiteralPath c:\cloudflared\cloudflared.zip -DestinationPath c:\cloudflared +(New-Object System.Net.WebClient).DownloadFile("https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-amd64.exe","c:\cloudflared\cloudflared.exe") ``` ### 2. Authenticate `cloudflared` diff --git a/products/analytics/docs-config.js b/products/analytics/docs-config.js index 2283cf64f2a..36a70b02ec3 100644 --- a/products/analytics/docs-config.js +++ b/products/analytics/docs-config.js @@ -20,6 +20,6 @@ module.exports = { description: "With the GraphQL Analytics API, all of your performance, security, and reliability data is available from one endpoint. And you can select exactly what you need, from one metric for a domain to multiple metrics aggregated for your account.", author: "@cloudflare", url: "https://developers.cloudflare.com/analytics", - image: "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" + image: "https://www.cloudflare.com/img/cf-twitter-card.png" } } diff --git a/products/analytics/src/content/faq/index.md b/products/analytics/src/content/faq/index.md index dfbbbc58e23..ca82e514047 100644 --- a/products/analytics/src/content/faq/index.md +++ b/products/analytics/src/content/faq/index.md @@ -1,69 +1,10 @@ --- -title: FAQ order: 40 +pcx-content-type: navigation --- # FAQs -## Web Analytics FAQ +Visit the following pages to see commonly asked questions: -### When I add the beacon to my website and load the webpage, I see an error that includes "is not allowed by Access-Controll-Allow-Origin" (CORS). What's happening? - -This error usually occurs when the hostname of the site loading the analytics does not match the name of the analytics site configured in the dashboard. Double-check that they are identical. - -Cloudflare matches hostnames based on a postfix. For example, if you set up analytics for "example.com", we'll allow analytics from "www.example.com," "blog.staging.example.com," and "fooexample.com." However, we won't allow analytics from "example.com.br." - -You may also see this error if the site does not send a "Referer" or "Origin" header. The "Referer" header is required (don't try to use the "Referrer-policy" header instead). We have a change in-flight now that only the "Origin" header will be required – we believe there is no way to disable that in the browser. - -### Can I track more than one website with Web Analytics? - -Yes. Right now there's a soft limit of 10 sites per account, but that can be adjusted by contacting Cloudflare support. - -### The analytics beacon is blocked by ad-blockers (including adblockplus, Brave, DuckDuckGo extension, etc). Why is that? - -Cloudflare is aware that the analytics beacon is blocked by these services. - -While Cloudflare Web Analytics uses a JS beacon, Cloudflare’s edge analytics can't be blocked because we can measure every request that's received. Edge analytics are available to any customer who "orange clouds" and proxies traffic through Cloudflare. Currently, users on Pro, Business, and Enterprise plans get advanced web analytics powered by our edge logs. - -### If I'm proxying my site through Cloudflare already, should I manually add the JS beacon? - -You can, but you don't have to. - -Existing Cloudflare customers can access analytics collected from our edge on the "Analytics" tab of the dashboard. You can also enable Browser Insights to measure performance using JavaScript. - -Cloudflare Web Analytics is designed primarily for customers who do not use Cloudflare's proxy to measure their web traffic. However, in the future we may add the option for orange-cloud users to automatically add the beacon if they'd like to measure web traffic using the beacon. - -### Can I see server-side analytics by URL? -Web Analytics only displays client-side analytics. All Cloudflare customers who proxy their traffic also get analytics based on traffic at their edge. - -Currently users on Pro, Business, and Enterprise plans get advanced HTTP traffic analytics, which is the only way to see features like a breakdown of traffic by URL based on server-side analytics. - -### Can I use Web Analytics with AMP? -Not yet, but we plan to support AMP soon. - -### Can I add Web Analytics to my site using a tag manager like Google Tag Manager (GTM)? -Yes. Instead of embedding the script using a tag manager as shown here: -```bash - -``` - -Add the following script: -```bash - -``` - -### Does Cloudflare Web Analytics support UTM parameters? -Not yet. UTM parameters are special query string parameters that can help track where traffic is coming from. -Currently Cloudflare Web Analytics don't log query strings to avoid collecting potentially sensitive data, but we may add support for this in the future. - -### Does Web Analytics support custom events? -Not yet, but we may add support for this in the future. - -### I'm not seeing all the metrics for SPA (or even MPA). Why is that? -Every route change that occurs in the single-page app will send the measurement of the route before the route is changed to the beacon endpoint. The measurement for the last route change will be sent whenever the user leaves the tab or closes the browser window. That will trigger visibilityState to a hidden state. Whenever that happens, Beacon JS sends the payload using the [Navigator.sendBeacon method](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon) that should not be cancelled even when the browser window is closed. However, due to compatibility, old browsers would fallback to using Ajax (XmlHttpRequest), which can be cancelled when the browser window is closed, so the last payload that gets sent to the beacon endpoint can be lost. Also, due to various network conditions, there can be data loss when the payload is sent to the beacon endpoint. - -### Can I use the same JS Snippet for a different domain? -No. However, if the root domain is the same, you can use the same site tag. For example, if you have provided us a hostname "example.com" when registering a site, you can use the JS Snippet from that site for "abc.example.com" and "def.example.com" since they use the same root domain. When payload gets sent to the beacon endpoint, we validate the hostname with postfix matching, so if your domain shares the same root domain, that would work. - -### If I'm orange-clouded, can Web Analytics load the script and report stats back to my own domain (using /cdn-cgi/, for example)? -Not yet, but we may add support for this in the future. + \ No newline at end of file diff --git a/products/analytics/src/content/faq/web-analytics/index.md b/products/analytics/src/content/faq/web-analytics/index.md new file mode 100644 index 00000000000..97d52bc9054 --- /dev/null +++ b/products/analytics/src/content/faq/web-analytics/index.md @@ -0,0 +1,105 @@ +--- +pcx-content-type: faq +--- + +# Web Analytics FAQ + +## Errors + +### When I add the beacon to my website and load the webpage, I see an error that includes "is not allowed by Access-Control-Allow-Origin" (CORS). What's happening? + +This error usually occurs when the hostname of the site loading the analytics does not match the name of the analytics site configured in the dashboard. Double-check that they are identical. + +Cloudflare matches hostnames based on a postfix. For example, if you set up analytics for `example.com`, we'll allow analytics from `www.example.com`, `blog.staging.example.com`, and `fooexample.com`. However, we won't allow analytics from `example.com.br`. + +You may also see this error if the site does not send a "Referer" or "Origin" header. The "Referer" header is required (don't try to use the "Referrer-policy" header instead). We have a change in-flight now that only the "Origin" header will be required – we believe there is no way to disable that in the browser. + +### The analytics beacon is blocked by ad-blockers (including adblockplus, Brave, DuckDuckGo extension, etc). Why is that? + +Cloudflare is aware that the analytics beacon is blocked by these services. + +While Cloudflare Web Analytics uses a JS beacon, Cloudflare’s edge analytics can't be blocked because we can measure every request that's received. Edge analytics are available to any customer who "orange clouds" and proxies traffic through Cloudflare. Currently, users on Pro, Business, and Enterprise plans get advanced web analytics powered by our edge logs. + +### Why am I not seeing all the metrics for SPA (or even MPA)? + +Every route change that occurs in the single-page app will send the measurement of the route before the route is changed to the beacon endpoint. The measurement for the last route change will be sent whenever the user leaves the tab or closes the browser window. That will trigger visibilityState to a hidden state. Whenever that happens, Beacon JS sends the payload using the [Navigator.sendBeacon method](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon) that should not be cancelled even when the browser window is closed. However, due to compatibility, old browsers would fallback to using Ajax (XmlHttpRequest), which can be cancelled when the browser window is closed, so the last payload that gets sent to the beacon endpoint can be lost. Also, due to various network conditions, there can be data loss when the payload is sent to the beacon endpoint. + +### For the same site, why would I see more data reported with an automatic setup? + +Unless you are using Rules to control which pages to be measured, using [automatic setup] will inject the JS snippet on all pages (sub-domains) under the zone. + +If you used a [manual setup] instead, only those pages that render the JS snippet will be reported. + + + +--- + +## Setup + +### If I'm proxying my site through Cloudflare already, should I manually add the JS beacon? + +You can, but you don't have to. Cloudflare Web Analytics is designed primarily for customers who do not use Cloudflare's proxy to measure their web traffic. + +Existing Cloudflare customers can access analytics collected from our edge on the **Analytics** tab of the dashboard. You can also enable Browser Insights to measure performance using JavaScript. + +Using an orange-clouded domain with [automatic setup] will report stats back to your own domain's `/cdn-cgi/rum` endpoint. If you have installed JS snippet yourself (a [manual setup]), it will report back to `cloudflareinsights.com/cdn-cgi/rum` endpoint. + +### Can I add Web Analytics to my site using a tag manager like Google Tag Manager (GTM)? + +Yes. Instead of embedding the script using a tag manager as shown here: +```bash + +``` + +Add the following script: +```bash + +``` + +### Can I use the same JS Snippet for a different domain? + +No. However, if the root domain is the same, you can use the same site tag. For example, if you have provided us a hostname `example.com` when registering a site, you can use the JS snippet from that site for `abc.example.com` and `def.example.com` since they use the same root domain. When payload gets sent to the beacon endpoint, we validate the hostname with postfix matching, so if your domain shares the same root domain, that would work. + +### Can I use automatic setup with a DNS-only domain (CNAME setup)? + +No, you can only use the [automatic setup] with JS snippet injection if traffic to your domain is proxied through Cloudflare (orange-clouded). + +If you have a DNS-only domain, you will have to do a [manual setup] instead. + +--- + +## Functionality + +### Can I see server-side analytics by URL? + +Web Analytics only displays client-side analytics. All Cloudflare customers who proxy their traffic also get analytics based on traffic at their edge. + +Currently users on Pro, Business, and Enterprise plans get advanced HTTP traffic analytics, which is the only way to see features like a breakdown of traffic by URL based on server-side analytics. + +### Can I use Web Analytics with AMP? + +Not yet, but we plan to support AMP soon. + +### What is the data retention policy for Web Analytics? + +One month, but we are planning to increase the retention in the near future. + +### Does Cloudflare Web Analytics support UTM parameters? + +Not yet. UTM parameters are special query string parameters that can help track where traffic is coming from. +Currently Cloudflare Web Analytics don't log query strings to avoid collecting potentially sensitive data, but we may add support for this in the future. + +### Does Web Analytics support custom events? + +Not yet, but we may add support for this in the future. + +### Can I track more than one website with Web Analytics? + +Yes. Right now there's a soft limit of 10 sites per account, but that can be adjusted by contacting Cloudflare support. + +[manual setup]:/web-analytics/getting-started#sites-not-proxied-through-cloudflare +[automatic setup]:/web-analytics/getting-started#sites-proxied-through-cloudflare \ No newline at end of file diff --git a/products/analytics/src/content/graphql-api/errors/index.md b/products/analytics/src/content/graphql-api/errors/index.md index 11a8a9f71aa..642088ace10 100644 --- a/products/analytics/src/content/graphql-api/errors/index.md +++ b/products/analytics/src/content/graphql-api/errors/index.md @@ -1,6 +1,6 @@ --- -title: Error responses order: 25 +pcx-content-type: reference --- # Error responses diff --git a/products/analytics/src/content/graphql-api/features/data-sets/index.md b/products/analytics/src/content/graphql-api/features/data-sets/index.md index d492b4e69e6..20826853982 100755 --- a/products/analytics/src/content/graphql-api/features/data-sets/index.md +++ b/products/analytics/src/content/graphql-api/features/data-sets/index.md @@ -1,6 +1,6 @@ --- -title: Data Sets (tables) order: 2 +pcx-content-type: reference --- # Data Sets (tables) @@ -34,6 +34,7 @@ The following data sets (and associated nodes) are available in Cloudflare Analy | Network Analytics | `ipFlows1mGroups` `ipFlows1hGroups` `ipFlows1dGroups` `ipFlows1mAttacksGroups` | | SYN Attacks (DoS Analytics) | `synAvgPps1mGroups` | | Workers Metrics | `workersInvocationsAdaptive` | +| Magic Firewall Analytics | `magicFirewallSamplesAdaptiveGroups` | @@ -64,8 +65,8 @@ The following data nodes are deprecated. To avoid disruption, migrate to replace | `firewallRulePreviewGroups` | `httpRequestsAdaptiveGroups` | March 1, 2021 | | `healthCheckEvents` | `healthCheckEventsAdaptive` | March 1, 2021 | | `healthCheckEventsGroups` | `healthCheckEventsAdaptiveGroups` | March 1, 2021 | -| `loadBalancingRequests` | `loadBalancingRequestsAdaptive` | March 1, 2021 | -| `loadBalancingRequestsGroups`| `loadBalancingRequestsAdaptiveGroups`| March 1, 2021 | +| `loadBalancingRequests` | `loadBalancingRequestsAdaptive` | September 30, 2021 | +| `loadBalancingRequestsGroups`| `loadBalancingRequestsAdaptiveGroups`| September 30, 2021 | diff --git a/products/analytics/src/content/graphql-api/features/filtering/index.md b/products/analytics/src/content/graphql-api/features/filtering/index.md index 441061bd2d7..f512bdcef25 100755 --- a/products/analytics/src/content/graphql-api/features/filtering/index.md +++ b/products/analytics/src/content/graphql-api/features/filtering/index.md @@ -1,6 +1,6 @@ --- -title: Filtering order: 10 +pcx-content-type: reference --- # Filtering @@ -102,12 +102,13 @@ The `like` operator is available for string comparisons and supports the `%` cha ```graphql { - myQuery( - filter: { - clientCountry: "UK" # all objects having client country equal to "UK" - datetime_gt: "2018-01-01T10:00:00Z" # all object having datetime greater than "2018-01-01T10:00:00Z" + viewer { + zones(filter: {zoneTag: $zoneTag}) { + httpRequestsAdaptiveGroups(filter: {datetime_gt: "2021-06-10T00:00:00Z", clientCountryName: "GB"}, limit: 1) { + count + } } - ) + } } ``` @@ -118,7 +119,7 @@ The following GraphQL example shows how to filter a specific node. The SQL equiv ##### GraphQL {#001} ```graphql -httpRequests1hGroups(filter: {datetime: "2018-01-01T10:00:00Z"}) { +httpRequestsAdaptiveGroups(filter: {datetime: "2018-01-01T10:00:00Z"}) { ... } ``` @@ -127,7 +128,6 @@ httpRequests1hGroups(filter: {datetime: "2018-01-01T10:00:00Z"}) { ```sql WHERE datetime="2018-01-01T10:00:00Z" - AND ((clientCountryName = "UK") OR (clientCountryName = "US")) ``` #### Filter on multiple fields @@ -150,14 +150,15 @@ WHERE (datetime > "2018-01-01T10:00:00Z") AND (datetime < "2018-01-01T10:00:00Z" #### Filter using the `OR` operator -The following GraphQL example demonstrates using the `OR` operator in a filter. This `OR` operator filters for the value `US` or `UK` in the `clientCountryName` field. +The following GraphQL example demonstrates using the `OR` operator in a filter. This `OR` operator filters for the value `US` or `GB` in the `clientCountryName` field. ##### GraphQL {#005} ```graphql -httpRequests1hGroups(filter: { - datetime: "2018-01-01T10:00:00Z", - OR:[{clientCountryName: "US"}, {clientCountryName: "UK"}]) { +httpRequestsAdaptiveGroups( + filter: { + datetime: "2018-01-01T10:00:00Z", + OR:[{clientCountryName: "US"}, {clientCountryName: "GB"}]) { ... } ``` @@ -166,7 +167,7 @@ httpRequests1hGroups(filter: { ```sql WHERE datetime="2018-01-01T10:00:00Z" - AND ((clientCountryName = "UK") OR (clientCountryName = "US")) + AND ((clientCountryName = "US") OR (clientCountryName = "GB")) ``` ### Subqueries (advanced filters) diff --git a/products/analytics/src/content/graphql-api/features/index.md b/products/analytics/src/content/graphql-api/features/index.md index 08f586d35e6..8bdd180b484 100644 --- a/products/analytics/src/content/graphql-api/features/index.md +++ b/products/analytics/src/content/graphql-api/features/index.md @@ -1,14 +1,10 @@ --- -title: Features order: 20 +pcx-content-type: navigation --- # Features The GraphQL Analytics API offers the following features: -- [Data Sets (tables)](/graphql-api/features/data-sets/) -- [Filtering](/graphql-api/features/filtering/) -- [Sorting](/graphql-api/features/sorting/) -- [Pagination](/graphql-api/features/pagination/) -- [Nested Structures](/graphql-api/features/nested-structures/) + diff --git a/products/analytics/src/content/graphql-api/features/nested-structures/index.md b/products/analytics/src/content/graphql-api/features/nested-structures/index.md index 4c076d3533b..3d30e1d51e5 100644 --- a/products/analytics/src/content/graphql-api/features/nested-structures/index.md +++ b/products/analytics/src/content/graphql-api/features/nested-structures/index.md @@ -1,6 +1,6 @@ --- -title: Nested Structures order: 16 +pcx-content-type: reference --- # Nested Structures diff --git a/products/analytics/src/content/graphql-api/features/pagination/index.md b/products/analytics/src/content/graphql-api/features/pagination/index.md index e232f31f141..089533cc3e0 100755 --- a/products/analytics/src/content/graphql-api/features/pagination/index.md +++ b/products/analytics/src/content/graphql-api/features/pagination/index.md @@ -1,6 +1,6 @@ --- -title: Pagination order: 14 +pcx-content-type: reference --- # Pagination diff --git a/products/analytics/src/content/graphql-api/features/sorting/index.md b/products/analytics/src/content/graphql-api/features/sorting/index.md index 4b4f4f3ec88..5e6654365b7 100755 --- a/products/analytics/src/content/graphql-api/features/sorting/index.md +++ b/products/analytics/src/content/graphql-api/features/sorting/index.md @@ -1,6 +1,6 @@ --- -title: Sorting order: 12 +pcx-content-type: reference --- # Sorting diff --git a/products/analytics/src/content/graphql-api/getting-started/authentication/api-key-auth.md b/products/analytics/src/content/graphql-api/getting-started/authentication/api-key-auth.md index 10578760460..a58f1fbe7cc 100644 --- a/products/analytics/src/content/graphql-api/getting-started/authentication/api-key-auth.md +++ b/products/analytics/src/content/graphql-api/getting-started/authentication/api-key-auth.md @@ -1,6 +1,6 @@ --- -title: Authenticate with a Cloudflare API key order: 30 +pcx-content-type: reference --- # Authenticate with a Cloudflare API key diff --git a/products/analytics/src/content/graphql-api/getting-started/authentication/api-token-auth.md b/products/analytics/src/content/graphql-api/getting-started/authentication/api-token-auth.md index 45e56989e72..de424e49d40 100644 --- a/products/analytics/src/content/graphql-api/getting-started/authentication/api-token-auth.md +++ b/products/analytics/src/content/graphql-api/getting-started/authentication/api-token-auth.md @@ -1,6 +1,6 @@ --- -title: Configure an Analytics API token order: 20 +pcx-content-type: how-to --- # Configure an Analytics API token @@ -11,10 +11,11 @@ For more detail on API tokens and the full range of supported options, see [_Cre To create an API token for authentication to the GraphQL Analytics API, use this workflow: -* [Access the Create API Token page](#access-the-create-api-token-page) -* [Configure a custom API token](#configure-a-custom-api-token) -* [Review and create your API token](#review-and-create-your-api-token) -* [Copy and test your API token](#copy-and-test-your-api-token) +- [Configure an Analytics API token](#configure-an-analytics-api-token) + - [Access the Create API Token page](#access-the-create-api-token-page) + - [Configure a custom API token](#configure-a-custom-api-token) + - [Review and create your API token](#review-and-create-your-api-token) + - [Copy and test your API token](#copy-and-test-your-api-token) ## Access the Create API Token page diff --git a/products/analytics/src/content/graphql-api/getting-started/authentication/graphql-client-headers.md b/products/analytics/src/content/graphql-api/getting-started/authentication/graphql-client-headers.md index 5b713b03d33..667cc528216 100644 --- a/products/analytics/src/content/graphql-api/getting-started/authentication/graphql-client-headers.md +++ b/products/analytics/src/content/graphql-api/getting-started/authentication/graphql-client-headers.md @@ -1,6 +1,6 @@ --- -title: Configure GraphQL client endpoint and HTTP headers order: 40 +pcx-content-type: how-to --- # Configure GraphQL client endpoint and HTTP headers diff --git a/products/analytics/src/content/graphql-api/getting-started/authentication/index.md b/products/analytics/src/content/graphql-api/getting-started/authentication/index.md index 2c408f9e0e8..5f0410247e9 100644 --- a/products/analytics/src/content/graphql-api/getting-started/authentication/index.md +++ b/products/analytics/src/content/graphql-api/getting-started/authentication/index.md @@ -1,6 +1,6 @@ --- -title: Authentication order: 10 +pcx-content-type: reference --- # Authentication diff --git a/products/analytics/src/content/graphql-api/getting-started/compose-graphql-query.md b/products/analytics/src/content/graphql-api/getting-started/compose-graphql-query.md index a59b206d08e..ef7405d97ab 100644 --- a/products/analytics/src/content/graphql-api/getting-started/compose-graphql-query.md +++ b/products/analytics/src/content/graphql-api/getting-started/compose-graphql-query.md @@ -1,6 +1,6 @@ --- -title: Create a query in GraphiQL order: 50 +pcx-content-type: interim --- # Create a query in GraphiQL diff --git a/products/analytics/src/content/graphql-api/getting-started/execute-graphql-query.md b/products/analytics/src/content/graphql-api/getting-started/execute-graphql-query.md index de9ec14eeff..a2641a6346d 100644 --- a/products/analytics/src/content/graphql-api/getting-started/execute-graphql-query.md +++ b/products/analytics/src/content/graphql-api/getting-started/execute-graphql-query.md @@ -1,6 +1,6 @@ --- -title: Use curl to query the Analytics API order: 60 +pcx-content-type: interim --- # Use curl to query the Analytics API diff --git a/products/analytics/src/content/graphql-api/getting-started/explore-graphql-schema.md b/products/analytics/src/content/graphql-api/getting-started/explore-graphql-schema.md index 1bd125ab766..6ef38999443 100644 --- a/products/analytics/src/content/graphql-api/getting-started/explore-graphql-schema.md +++ b/products/analytics/src/content/graphql-api/getting-started/explore-graphql-schema.md @@ -1,6 +1,6 @@ --- -title: Explore the Analytics schema with GraphiQL order: 40 +pcx-content-type: interim --- # Explore the Analytics schema with GraphiQL diff --git a/products/analytics/src/content/graphql-api/getting-started/index.md b/products/analytics/src/content/graphql-api/getting-started/index.md index edd61016c23..e96588465b6 100644 --- a/products/analytics/src/content/graphql-api/getting-started/index.md +++ b/products/analytics/src/content/graphql-api/getting-started/index.md @@ -1,9 +1,10 @@ --- title: Getting started order: 10 +pcx-content-type: navigation --- -# Getting started +# Get started Use these articles to get started with the Cloudflare GraphQL Analytics API: diff --git a/products/analytics/src/content/graphql-api/getting-started/querying-basics.md b/products/analytics/src/content/graphql-api/getting-started/querying-basics.md index c65c72e82e2..e81e2792b25 100644 --- a/products/analytics/src/content/graphql-api/getting-started/querying-basics.md +++ b/products/analytics/src/content/graphql-api/getting-started/querying-basics.md @@ -1,6 +1,6 @@ --- -title: Querying basics order: 20 +pcx-content-type: reference --- # Querying basics diff --git a/products/analytics/src/content/graphql-api/index.md b/products/analytics/src/content/graphql-api/index.md index 369ff37196f..f347f15dd50 100644 --- a/products/analytics/src/content/graphql-api/index.md +++ b/products/analytics/src/content/graphql-api/index.md @@ -1,6 +1,6 @@ --- -title: GraphQL Analytics API order: 2 +pcx-content-type: interim --- # GraphQL Analytics API diff --git a/products/analytics/src/content/graphql-api/limits/index.md b/products/analytics/src/content/graphql-api/limits/index.md index aba5d64011b..c2a658df235 100644 --- a/products/analytics/src/content/graphql-api/limits/index.md +++ b/products/analytics/src/content/graphql-api/limits/index.md @@ -1,6 +1,6 @@ --- -title: Limits order: 30 +pcx-content-type: reference --- # Limits @@ -41,6 +41,7 @@ Access to Network Analytics ipFlows nodes is only available to Enterprise | `loadBalancingRequestsGroups` | n/a | 3 days | 30 days | 30 days | | `loadBalancingRequests` | n/a | 3 days | 30 days | 30 days | | `synAvgPps1mGroups` | n/a | n/a | n/a | 7 days | +| `magicFirewallSamplesAdaptiveGroups` | n/a | n/a | n/a | 7 days | diff --git a/products/analytics/src/content/graphql-api/migration-guides/graphql-api-analytics/index.md b/products/analytics/src/content/graphql-api/migration-guides/graphql-api-analytics/index.md index 4b87ac0f7f7..a516fd485b5 100644 --- a/products/analytics/src/content/graphql-api/migration-guides/graphql-api-analytics/index.md +++ b/products/analytics/src/content/graphql-api/migration-guides/graphql-api-analytics/index.md @@ -1,6 +1,7 @@ --- title: HTTP Requests by Colo Groups to HTTP Requests by Adaptive Groups order: 10 +pcx-content-type: reference --- # httpRequests1mByColoGroups/httpRequests1dByColoGroups to httpRequestsAdaptiveGroups diff --git a/products/analytics/src/content/graphql-api/migration-guides/index.md b/products/analytics/src/content/graphql-api/migration-guides/index.md index d3d0bb7013a..a41b0fdb9af 100644 --- a/products/analytics/src/content/graphql-api/migration-guides/index.md +++ b/products/analytics/src/content/graphql-api/migration-guides/index.md @@ -1,6 +1,6 @@ --- -title: Migration guides order: 60 +pcx-content-type: navigation --- # Migration guides diff --git a/products/analytics/src/content/graphql-api/migration-guides/zone-analytics-colos/index.md b/products/analytics/src/content/graphql-api/migration-guides/zone-analytics-colos/index.md index 475886e2c0a..f0b923ff2d0 100644 --- a/products/analytics/src/content/graphql-api/migration-guides/zone-analytics-colos/index.md +++ b/products/analytics/src/content/graphql-api/migration-guides/zone-analytics-colos/index.md @@ -1,6 +1,6 @@ --- -title: Zone Analytics Colos Endpoint to GraphQL Analytics order: 12 +pcx-content-type: reference --- # Zone Analytics Colos Endpoint to GraphQL Analytics diff --git a/products/analytics/src/content/graphql-api/migration-guides/zone-analytics/index.md b/products/analytics/src/content/graphql-api/migration-guides/zone-analytics/index.md index 8422bf00b4d..e84de042fbf 100644 --- a/products/analytics/src/content/graphql-api/migration-guides/zone-analytics/index.md +++ b/products/analytics/src/content/graphql-api/migration-guides/zone-analytics/index.md @@ -1,6 +1,6 @@ --- -title: Zone Analytics to GraphQL Analytics order: 11 +pcx-content-type: reference --- # Zone Analytics to GraphQL Analytics diff --git a/products/analytics/src/content/graphql-api/sampling/index.md b/products/analytics/src/content/graphql-api/sampling/index.md index 1f4b3cd9772..ba3d78be637 100644 --- a/products/analytics/src/content/graphql-api/sampling/index.md +++ b/products/analytics/src/content/graphql-api/sampling/index.md @@ -1,6 +1,6 @@ --- -title: Sampling order: 40 +pcx-content-type: reference --- # Sampling @@ -15,13 +15,14 @@ Cloudflare Analytics builds the following data sets from sampled data: -| Data set | Nodes | -| :-------------------- | :----------------------------------------------------------------------------- | -| Firewall Activity Log | `firewallEventsAdaptive` `firewallEventsAdaptiveByTimeGroups` | -| Firewall Analytics | `firewallEventsAdaptiveGroups` | -| Firewall Rule Preview | `firewallRulePreviewGroups` | -| Network Analytics | `ipFlows1mGroups` `ipFlows1hGroups` `ipFlows1dGroups` `ipFlows1mAttacksGroups` | -| Workers Metrics | `workersInvocationsAdaptive` | +| Data set | Nodes | +| :-------------------------| :----------------------------------------------------------------------------- | +| Firewall Activity Log | `firewallEventsAdaptive` `firewallEventsAdaptiveByTimeGroups` | +| Firewall Analytics | `firewallEventsAdaptiveGroups` | +| Firewall Rule Preview | `firewallRulePreviewGroups` | +| Network Analytics | `ipFlows1mGroups` `ipFlows1hGroups` `ipFlows1dGroups` `ipFlows1mAttacksGroups` | +| Workers Metrics | `workersInvocationsAdaptive` | +| Magic Firewall Analytics | `magicFirewallSamplesAdaptiveGroups` | diff --git a/products/analytics/src/content/graphql-api/tutorials/build-your-own-analytics/index.md b/products/analytics/src/content/graphql-api/tutorials/build-your-own-analytics/index.md index 6fd77dc6783..f2990819a9b 100644 --- a/products/analytics/src/content/graphql-api/tutorials/build-your-own-analytics/index.md +++ b/products/analytics/src/content/graphql-api/tutorials/build-your-own-analytics/index.md @@ -1,6 +1,6 @@ --- -title: Build your own Analytics dashboard order: 40 +pcx-content-type: interim --- # Build your own Analytics dashboard diff --git a/products/analytics/src/content/graphql-api/tutorials/export-graphql-to-csv/index.md b/products/analytics/src/content/graphql-api/tutorials/export-graphql-to-csv/index.md index b29118e7d25..3816895e80f 100644 --- a/products/analytics/src/content/graphql-api/tutorials/export-graphql-to-csv/index.md +++ b/products/analytics/src/content/graphql-api/tutorials/export-graphql-to-csv/index.md @@ -1,5 +1,5 @@ --- -title: Export GraphQL data to CSV +pcx-content-type: interim --- # Export GraphQL data to CSV diff --git a/products/analytics/src/content/graphql-api/tutorials/index.md b/products/analytics/src/content/graphql-api/tutorials/index.md index 71e42408a74..49d2c328682 100644 --- a/products/analytics/src/content/graphql-api/tutorials/index.md +++ b/products/analytics/src/content/graphql-api/tutorials/index.md @@ -1,6 +1,6 @@ --- -title: Tutorials order: 50 +pcx-content-type: navigation --- # Tutorials diff --git a/products/analytics/src/content/graphql-api/tutorials/querying-firewall-events/index.md b/products/analytics/src/content/graphql-api/tutorials/querying-firewall-events/index.md index f0c58cbb211..514ee14163d 100644 --- a/products/analytics/src/content/graphql-api/tutorials/querying-firewall-events/index.md +++ b/products/analytics/src/content/graphql-api/tutorials/querying-firewall-events/index.md @@ -1,5 +1,5 @@ --- -title: Querying Firewall Events with GraphQL +pcx-content-type: interim --- # Querying Firewall Events with GraphQL diff --git a/products/analytics/src/content/graphql-api/tutorials/querying-magic-firewall-samples/index.md b/products/analytics/src/content/graphql-api/tutorials/querying-magic-firewall-samples/index.md new file mode 100644 index 00000000000..5092b7af6ed --- /dev/null +++ b/products/analytics/src/content/graphql-api/tutorials/querying-magic-firewall-samples/index.md @@ -0,0 +1,110 @@ +--- +pcx-content-type: interim +--- + +# Querying Magic Firewall Samples with GraphQL + +In this example, we're going to use the GraphQL Analytics API to query for Magic Firewall Samples over a specified time period. + +The following API call will request Magic Firewall Samples over a one hour period, and output the requested fields. Be sure to replace CLOUDFLARE_ZONE_ID, CLOUDFLARE_EMAIL, and CLOUDFLARE_API_KEY with your zone tag and API credentials, and adjust the datetime_geg and datetime_leq values to your liking. + +## API Call + +``` +PAYLOAD='{ "query": + "query MFWActivity { + viewer { + accounts(filter: { accountTag: $accountTag }) { + magicFirewallSamplesAdaptiveGroups( + filter: $filter + limit: 10 + orderBy: [datetimeFiveMinute_DESC] + ) { + sum { + bits + packets + } + dimensions { + datetimeFiveMinute + ruleId + } + } + } + } + }", + "variables": { + "accountTag": "$CLOUDFLARE_ACCOUNT_ID", + "filter": { + "datetime_geq": "2021-04-24T11:00:00Z", + "datetime_leq": "2021-04-24T12:00:00Z" + } + } + }' + +curl \ + -X POST \ + -H "Content-Type: application/json" \ + -H "X-Auth-Email: CLOUDFLARE_EMAIL" \ + -H "X-Auth-key: CLOUDFLARE_API_KEY" \ + --data "$(echo $PAYLOAD)" \ + https://api.cloudflare.com/client/v4/graphql/ +``` + +The returned values represent the total number of packets and bits received during the five minute interval for a particular rule. The result will be in JSON (as requested), so piping the output to `jq` will make it easier to read, e.g.,: +``` +curl \ + -X POST \ + -H "Content-Type: application/json" \ + -H "X-Auth-Email: CLOUDFLARE_EMAIL" \ + -H "X-Auth-key: CLOUDFLARE_API_KEY" \ + --data "$(echo $PAYLOAD)" \ + https://api.cloudflare.com/client/v4/graphql/ | jq . +{ + "data": { + "viewer": { + "accounts": [ + { + "magicFirewallSamplesAdaptiveGroups": [ + { + sum: { bits: 327680, packets: 16384 }, + dimensions: { + datetimeFiveMinute: '2021-05-12T22:00-00:00', + ruleId: 'bdfa8f8f0ae142b4a70ef15f6160e532' + } + }, + { + sum: { bits: 360448, packets: 8192 }, + dimensions: { + datetimeFiveMinute: '2021-05-12T22:05-00:00', + ruleId: 'bdfa8f8f0ae142b4a70ef15f6160e532' + } + }, + { + sum: { bits: 327680, packets: 8192 }, + dimensions: { + datetimeFiveMinute: '2021-05-12T22:05-00:00', + ruleId: 'bdfa8f8f0ae142b4a70ef15f6160e532' + } + }, + { + sum: { bits: 360448, packets: 8192 }, + dimensions: { + datetimeFiveMinute: '2021-05-12T22:20-00:00', + ruleId: 'bdfa8f8f0ae142b4a70ef15f6160e532' + } + }, + { + sum: { bits: 327680, packets: 8192 }, + dimensions: { + datetimeFiveMinute: '2021-05-12T22:20-00:00', + ruleId: 'bdfa8f8f0ae142b4a70ef15f6160e532' + } + } + ] + } + ] + } + }, + "errors": null +} +``` diff --git a/products/analytics/src/content/graphql-api/tutorials/querying-magic-transit-tunnel-healthcheck-results/index.md b/products/analytics/src/content/graphql-api/tutorials/querying-magic-transit-tunnel-healthcheck-results/index.md index 89d8ed439b5..beddba5baff 100644 --- a/products/analytics/src/content/graphql-api/tutorials/querying-magic-transit-tunnel-healthcheck-results/index.md +++ b/products/analytics/src/content/graphql-api/tutorials/querying-magic-transit-tunnel-healthcheck-results/index.md @@ -1,5 +1,5 @@ --- -title: Querying Magic Transit Tunnel Health Check Results with GraphQL +pcx-content-type: interim --- # Querying Magic Transit Tunnel Health Check Results with GraphQL diff --git a/products/analytics/src/content/graphql-api/tutorials/querying-workers-metrics/index.md b/products/analytics/src/content/graphql-api/tutorials/querying-workers-metrics/index.md index 7ae5ee25655..30f310c0fb2 100644 --- a/products/analytics/src/content/graphql-api/tutorials/querying-workers-metrics/index.md +++ b/products/analytics/src/content/graphql-api/tutorials/querying-workers-metrics/index.md @@ -1,5 +1,6 @@ --- title: Querying Workers Metrics with GraphQL +pcx-content-type: interim --- # Querying Workers Metrics with GraphQL @@ -32,7 +33,7 @@ PAYLOAD='{ "query": cpuTimeP99 } dimensions{ - datetimeMinute + datetime scriptName status } diff --git a/products/analytics/src/content/graphql-api/tutorials/use-graphql-create-widgets/index.md b/products/analytics/src/content/graphql-api/tutorials/use-graphql-create-widgets/index.md index 138225cf3fd..071379be173 100644 --- a/products/analytics/src/content/graphql-api/tutorials/use-graphql-create-widgets/index.md +++ b/products/analytics/src/content/graphql-api/tutorials/use-graphql-create-widgets/index.md @@ -1,18 +1,20 @@ --- -title: Use GraphQL to create widgets order: 45 +pcx-content-type: interim --- # Use GraphQL to create widgets This article presents examples of queries you can use to populate your own dashboard. -* [Timeseries graph](#timeseries-graph) -* [Activity log](#activity-log) -* [Top N cards - source](#top-n-cards---source) -* [Top N cards - destination](#top-n-cards---destination) -* [TCP flags](#tcp-flags) -* [Executive summary](#executive-summary) +- [Use GraphQL to create widgets](#use-graphql-to-create-widgets) + - [Parameters and filters](#parameters-and-filters) + - [Timeseries graph](#timeseries-graph) + - [Activity log](#activity-log) + - [Top N cards - source](#top-n-cards---source) + - [Top N cards - destination](#top-n-cards---destination) + - [TCP Flags](#tcp-flags) + - [Executive summary](#executive-summary) Use this workflow to build and test queries: diff --git a/products/analytics/src/content/index.md b/products/analytics/src/content/index.md index 2b0243d1e8c..bd320ecec14 100644 --- a/products/analytics/src/content/index.md +++ b/products/analytics/src/content/index.md @@ -1,15 +1,17 @@ --- -title: Welcome order: 0 +pcx-content-type: landing-page --- # Overview +Cloudflare visualizes the metadata collected by our products in the Cloudflare dashboard. Refer to [Accessing the data Cloudflare collects](https://developers.cloudflare.com/fundamentals/data-products/accessing-cf-data) for more information about the various types of analytics and where they exist in the dashboard. + ## Cloudflare Web Analytics -Cloudflare Web Analytics provides free, privacy-first analytics for your website without changing your DNS or using Cloudflare’s proxy. +[Cloudflare Web Analytics](/web-analytics) provides free, privacy-first analytics for your website without changing your DNS or using Cloudflare’s proxy. ## GraphQL Analytics API -With the GraphQL Analytics API, all of your performance, security, and reliability data is available from one endpoint. -And you can select exactly what you need, from one metric for a domain to multiple metrics aggregated for your account. \ No newline at end of file +With the [GraphQL Analytics API](/graphql-api), all of your performance, security, and reliability data is available from one endpoint. +And you can select exactly what you need, from one metric for a domain to multiple metrics aggregated for your account. diff --git a/products/analytics/src/content/web-analytics/about/index.md b/products/analytics/src/content/web-analytics/about/index.md new file mode 100644 index 00000000000..496f14d2332 --- /dev/null +++ b/products/analytics/src/content/web-analytics/about/index.md @@ -0,0 +1,16 @@ +--- +order: 20 +pcx-content-type: concept +--- + +# About Web Analytics + +Cloudflare Web Analytics helps you understand the performance of your web pages as experienced by your site visitors. + +To enable Web Analytics, Cloudflare writes and injects a piece of JavaScript code (also known as a beacon) that collects certain pieces of information into your web pages. More specifically, this beacon collects metrics using the Performance API, which is available in all major web browsers. + +Web Analytics supports Adaptive Bit Rate (ABR). Cloudflare's servers will select the best resolution for each chart or table depending on the size of the data, the date range, your network connection, and other factors. For more information, refer to [Explaining Cloudflare's ABR Analytics](https://blog.cloudflare.com/explaining-cloudflares-abr-analytics/). + +The data displayed in Web Analytics is real user monitoring (RUM). For more information, refer to [Real User Monitoring](https://en.wikipedia.org/wiki/Real_user_monitoring). + +Note: Web Analytics now includes the functionality formerly enabled through Browser Insights. \ No newline at end of file diff --git a/products/analytics/src/content/web-analytics/change-log/index.md b/products/analytics/src/content/web-analytics/change-log/index.md new file mode 100644 index 00000000000..29e9ea78a47 --- /dev/null +++ b/products/analytics/src/content/web-analytics/change-log/index.md @@ -0,0 +1,28 @@ +--- +title: Change log +order: 40 +pcx-content-type: reference +--- + +# Change log for beacon.min.js + +Cloudflare occasionally updates the `beacon.min.js` file to improve Web Analytics functionality. The table below includes a log of what changed in the `beacon.min.js` file and when. + + + + + + + + + + + + + + + + + + +
Date of changeDescription
2021-05-28startsWith function replaced with indexOf function, which prevents rendering if multiple beacon scripts are loaded.
2021-05-12Reporting endpoint changed from /cdn-cgi/beacon/performance to /cdn-cgi/rum (for Browser Insights only).
\ No newline at end of file diff --git a/products/analytics/src/content/web-analytics/configuring-web-analytics/filters/index.md b/products/analytics/src/content/web-analytics/configuring-web-analytics/filters/index.md index 31b4fa6e4e2..93fc682d42a 100644 --- a/products/analytics/src/content/web-analytics/configuring-web-analytics/filters/index.md +++ b/products/analytics/src/content/web-analytics/configuring-web-analytics/filters/index.md @@ -1,6 +1,6 @@ --- -title: Filters order: 40 +pcx-content-type: how-to --- # Filters diff --git a/products/analytics/src/content/web-analytics/configuring-web-analytics/index.md b/products/analytics/src/content/web-analytics/configuring-web-analytics/index.md index 0c5e4dad995..434ee7b64aa 100644 --- a/products/analytics/src/content/web-analytics/configuring-web-analytics/index.md +++ b/products/analytics/src/content/web-analytics/configuring-web-analytics/index.md @@ -1,8 +1,10 @@ --- -title: Configuring Cloudflare Web Analytics order: 30 +pcx-content-type: navigation --- # Configuring Cloudflare Web Analytics Customize your Web Analytics views by using filters. + + \ No newline at end of file diff --git a/products/analytics/src/content/web-analytics/configuring-web-analytics/rules/index.md b/products/analytics/src/content/web-analytics/configuring-web-analytics/rules/index.md new file mode 100644 index 00000000000..5cd129486ec --- /dev/null +++ b/products/analytics/src/content/web-analytics/configuring-web-analytics/rules/index.md @@ -0,0 +1,16 @@ +--- +order: 41 +pcx-content-type: how-to +--- + +# Rules + +Use **Rules** to configure whether to track Web Analytics for specific websites or paths. If you do not configure any rules, Web Analytics injects the JavaScript (JS) snippet for all sites. + +Rules are only available for sites proxied through Cloudflare. For more information, refer to [Limits](/web-analytics/understanding-web-analytics/limits/). + +1. From **Quick Actions**, click **View Web Analytics sites**. +2. Find the site you want to configure and click **Manage site**. +3. Click **Advanced options** > **Add rule**. +4. Select the **Action** and fill in the Host name and Path(s) you want to add a rule for. +5. Enable the rule to deploy it on your site. diff --git a/products/analytics/src/content/web-analytics/getting-started/index.md b/products/analytics/src/content/web-analytics/getting-started/index.md index 65f29567b5f..0be42e28a76 100644 --- a/products/analytics/src/content/web-analytics/getting-started/index.md +++ b/products/analytics/src/content/web-analytics/getting-started/index.md @@ -1,22 +1,39 @@ --- -title: Getting started +title: Get started order: 10 +pcx-content-type: how-to --- # Enabling Cloudflare Web Analytics +## Sites not proxied through Cloudflare -If you already have a Cloudflare account, go to Web Analytics from your Account Home page and skip to step 4. - -1. Visit [Get started with Web Analytics](https://dash.cloudflare.com/sign-up/web-analytics). -1. Enter your Email address and password. +1. Go to [Get started with Web Analytics](https://dash.cloudflare.com/sign-up/web-analytics). +1. Enter an Email address and password. 1. Click **Create Account**. -1. Enter your website’s hostname and click **Next**. -1. Copy the JS Snippet and add it to any of your website’s HTML pages before the ending body tag. -1. Click **Next**. +1. Enter your website’s hostname. +1. Copy the JS snippet. +1. Add the JS snippet to any of your website’s HTML pages before the ending body tag. +1. Click **Done**. 1. Wait for the redirect to the Web Analytics page or click **View Analytics**. It may take a few minutes for Web Analytics data to appear. -Repeat steps 4-7 for all of the websites you want to track with Web Analytics. Cloudflare enforces a soft limit of 10 sites per account, but that can be adjusted by contacting Cloudflare support. +Repeat steps 4-8 for all of the websites you want to track with Web Analytics by going to **Quick Actions** > **Add a site** from the Web Analytics Sites page. Adjust Web Analytics for your site at any time by clicking **Manage site**. + +For more information on how many sites you can track, refer to [Limits](../understanding-web-analytics/limits/). + +## Sites proxied through Cloudflare + +1. Go to [Web Analytics Sites](dash.cloudflare.com/?to=/:account/web-analytics) from your account home page. +2. Under **Quick Actions**, click **Add a site**. +3. Select a hostname from the drop-down menu. Automatic setup is enabled by default. To set up Web Analytics manually: + 1. Expand **Advanced options**. + 2. Select **Disable automatic setup**. + 3. Copy the JS snippet. + 4. Add the JS snippet to any of your website’s HTML pages before the ending body tag. +4. Click **Done**. + +Repeat steps 3-4 for all of the websites you want to track with Web Analytics. Web Analytics are enabled by default for sites proxied through Cloudflare that previously used Browser Insights. Adjust Web Analytics for your site at any time by clicking **Manage site** from the Web Analytics Sites page. -Once enabled, find and copy the JS Snippet on the left menu of the Web Analytics page anytime. +For more information on how many sites you can track, refer to [Limits](../understanding-web-analytics/limits/). +For more information on how to configure which sites or pages you track with Web Analytics, refer to [Rules](../understanding-web-analytics/rules/). \ No newline at end of file diff --git a/products/analytics/src/content/web-analytics/getting-started/web-analytics-spa/index.md b/products/analytics/src/content/web-analytics/getting-started/web-analytics-spa/index.md index 571ace5d7d6..f6c5dd23cd0 100644 --- a/products/analytics/src/content/web-analytics/getting-started/web-analytics-spa/index.md +++ b/products/analytics/src/content/web-analytics/getting-started/web-analytics-spa/index.md @@ -1,6 +1,7 @@ --- title: Web Analytics for SPAs order: 12 +pcx-content-type: reference --- # Web Analytics for Single Page Applications (SPAs) diff --git a/products/analytics/src/content/web-analytics/index.md b/products/analytics/src/content/web-analytics/index.md index b86a3925ade..d4b489bd21a 100644 --- a/products/analytics/src/content/web-analytics/index.md +++ b/products/analytics/src/content/web-analytics/index.md @@ -1,6 +1,7 @@ --- title: Cloudflare Web Analytics order: 1 +pcx-content-type: reference --- # Overview @@ -9,5 +10,4 @@ Cloudflare Web Analytics provides free, privacy-first analytics for your website Cloudflare Web Analytics does not collect or use your visitors’ personal data. -To view similar analytics for domains using Cloudflares proxy (orange-clouded), navigate to the Analytics app and select Web Traffic Analytics. Web Traffic Analytics are available for Pro, Business, and Enterprise plans. - +To view similar analytics for domains using Cloudflare's proxy (orange-clouded), navigate to the Analytics app and select Web Traffic Analytics. Web Traffic Analytics are available for Pro, Business, and Enterprise plans. \ No newline at end of file diff --git a/products/analytics/src/content/web-analytics/understanding-web-analytics/core-web-vitals/index.md b/products/analytics/src/content/web-analytics/understanding-web-analytics/core-web-vitals/index.md index e0a672b4bef..0676507e033 100644 --- a/products/analytics/src/content/web-analytics/understanding-web-analytics/core-web-vitals/index.md +++ b/products/analytics/src/content/web-analytics/understanding-web-analytics/core-web-vitals/index.md @@ -1,6 +1,6 @@ --- -title: Core Web Vitals order: 40 +pcx-content-type: concept --- # Core Web Vitals diff --git a/products/analytics/src/content/web-analytics/understanding-web-analytics/data-origin-and-collection/index.md b/products/analytics/src/content/web-analytics/understanding-web-analytics/data-origin-and-collection/index.md new file mode 100644 index 00000000000..6c0d603b261 --- /dev/null +++ b/products/analytics/src/content/web-analytics/understanding-web-analytics/data-origin-and-collection/index.md @@ -0,0 +1,17 @@ +--- +order: 38 +pcx-content-type: concept +--- + +# Data origin and collection + +Web Analytics relies on the `performance.getEntriesByType('navigation')` object to collect metrics about page load performance. If Navigation Timing Level 2 is not supported, then [performance.timing (Level 1)](https://developer.mozilla.org/en-US/docs/Web/API/Performance/timing) is used. + +Refer to the [W3C Processing Model](https://www.w3.org/TR/navigation-timing-2/#processing-model) for a visual depiction of the sequence of timing events for web page loads. + +## Data collection and reporting +Web Analytics collects the minimum amount of information - timing metrics - to show customers how their websites perform. Cloudflare does not track individual end users across our customers’ Internet properties. + +The Web Analytics performance beacon loads from [https://static.cloudflareinsights.com/beacon.min.js](https://static.cloudflareinsights.com/beacon.min.js) and uses a third-party domain so that the script is cached across website loads. You may need to update your [Content Security Policy (CSP)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) settings to load this script. + +Beacon data is sent to `https:///cdn-cgi/rum` for sites proxied through Cloudflare or `https://cloudflareinsights.com/cdn-cgi/rum` for sites not proxied through Cloudflare. Core Web Vital metrics are reported when the `visibilityState` is hidden for the first time after the page load event is triggered. \ No newline at end of file diff --git a/products/analytics/src/content/web-analytics/understanding-web-analytics/dimensions/index.md b/products/analytics/src/content/web-analytics/understanding-web-analytics/dimensions/index.md index ed43ebff23b..4eb2ede8686 100644 --- a/products/analytics/src/content/web-analytics/understanding-web-analytics/dimensions/index.md +++ b/products/analytics/src/content/web-analytics/understanding-web-analytics/dimensions/index.md @@ -1,6 +1,6 @@ --- -title: Dimensions order: 41 +pcx-content-type: reference --- # Dimensions diff --git a/products/analytics/src/content/web-analytics/understanding-web-analytics/high-level-metrics/index.md b/products/analytics/src/content/web-analytics/understanding-web-analytics/high-level-metrics/index.md new file mode 100644 index 00000000000..e2e680d6adb --- /dev/null +++ b/products/analytics/src/content/web-analytics/understanding-web-analytics/high-level-metrics/index.md @@ -0,0 +1,13 @@ +--- +order: 39 +pcx-content-type: reference +--- + +# High-level metrics + +* Visits - A page view that originated from a different website or direct link. Cloudflare checks where the HTTP referer does not match the hostname. One visit can consist of multiple page views. +* Page views - A successful HTTP response with a content-type of HTML. +* Page load time - The total amount of time required to load the page. +* Core Web Vitals - Higher-level metrics designed by Google to capture the user experience more completely. + +![Web Analytics overview](../../../static/images/dash-web_analytics-overview.png) \ No newline at end of file diff --git a/products/analytics/src/content/web-analytics/understanding-web-analytics/index.md b/products/analytics/src/content/web-analytics/understanding-web-analytics/index.md index ee79a94e436..7d9fb09652b 100644 --- a/products/analytics/src/content/web-analytics/understanding-web-analytics/index.md +++ b/products/analytics/src/content/web-analytics/understanding-web-analytics/index.md @@ -1,17 +1,8 @@ --- -title: Understanding Cloudflare Web Analytics -order: 30 +order: 20 +pcx-content-type: navigation --- # Understanding Cloudflare Web Analytics -View your website’s page views, visits, [page load time](/web-analytics/understanding-web-analytics/page-load-time-summary/), and [Core Web Vitals](/web-analytics/understanding-web-analytics/core-web-vitals/) by switching between views on the graph. You can also filter data by various [dimensions](/web-analytics/understanding-web-analytics/dimensions/). - -## High-Level Metrics - -* Visits - A page view that originated from a different website or direct link. Cloudflare checks where the HTTP referer does not match the hostname. One visit can consist of multiple page views. -* Page views - A successful HTTP response with a content-type of HTML. -* Page load time - The total amount of time required to load the page. -* Core Web Vitals - Higher-level metrics designed by Google to capture the user experience more completely. - -![Web Analytics dash overview](../../static/images/dash-web_analytics-overview.png) \ No newline at end of file + \ No newline at end of file diff --git a/products/analytics/src/content/web-analytics/understanding-web-analytics/limits/index.md b/products/analytics/src/content/web-analytics/understanding-web-analytics/limits/index.md new file mode 100644 index 00000000000..c8c803e594a --- /dev/null +++ b/products/analytics/src/content/web-analytics/understanding-web-analytics/limits/index.md @@ -0,0 +1,38 @@ +--- +order: 43 +pcx-content-type: reference +--- + +# Limits + +Cloudflare limits the number of sites for which you can track web analytics as well as the number of rules allowed for each plan type. Refer to the following tables for more information. + +## Site Limits + +Cloudflare limits the number of sites for which you can track web analytics. Limits depend on whether a site uses Cloudflare's proxy. + + + +| Site type | Limit | +| ---------------------------------------------- | ------------------ | +| Not proxied through Cloudflare | 10 | +| Proxied through Cloudflare | No limit | + + + +## Rules Limits + +Cloudflare limits the number of Web Analytics rules you can have by plan type. For plans with a limit of zero, Web Analytics injects the JS snippet on all subdomains. + +Rules are only available for sites proxied through Cloudflare. + + + +| Plan type | Rules limit | +| -------------- | ------------ | +| Free | 0 | +| Pro | 5 | +| Business | 20 | +| Enterprise | 100 | + + \ No newline at end of file diff --git a/products/analytics/src/content/web-analytics/understanding-web-analytics/page-load-time-summary/index.md b/products/analytics/src/content/web-analytics/understanding-web-analytics/page-load-time-summary/index.md index e8aa99614ca..a60d56bdf8b 100644 --- a/products/analytics/src/content/web-analytics/understanding-web-analytics/page-load-time-summary/index.md +++ b/products/analytics/src/content/web-analytics/understanding-web-analytics/page-load-time-summary/index.md @@ -1,6 +1,6 @@ --- -title: Page load time summary order: 42 +pcx-content-type: reference --- # Page load time summary diff --git a/products/api-security/README.md b/products/api-security/README.md new file mode 100644 index 00000000000..56aaa41482d --- /dev/null +++ b/products/api-security/README.md @@ -0,0 +1,5 @@ +# Cloudflare API Security docs + +[View docs →](https://developers.cloudflare.com/api-security) + +[Read contributor guidelines →](https://github.com/cloudflare/cloudflare-docs/blob/10189c62728443109c98c82cff9d6900ceb185dc/CONTRIBUTING.md) \ No newline at end of file diff --git a/products/api-security/docs-config.js b/products/api-security/docs-config.js new file mode 100644 index 00000000000..3318d173eb5 --- /dev/null +++ b/products/api-security/docs-config.js @@ -0,0 +1,25 @@ +module.exports = { + product: "API Security", + pathPrefix: "/api-security", + productIconKey: "page-shield", + contentRepo: "cloudflare/cloudflare-docs", + contentRepoFolder: "products/api-security", + externalLinks: [ + { + title: "Cloudflare homepage", + url: "https://cloudflare.com" + } + ], + search: { + indexName: "developers-cloudflare", + apiKey: "b23088ab4d346409f9d3ece6606344c3", + algoliaOptions: { 'facetFilters': '["project:api-security"]'} + }, + siteMetadata: { + title: "Cloudflare API Security docs", + description: "Protect your APIs from simple and sophisticated attacks using Cloudflare API Security products.", + author: "@cloudflare", + url: "https://developers.cloudflare.com/api-security", + image: "https://www.cloudflare.com/img/cf-twitter-card.png" + } +} \ No newline at end of file diff --git a/products/argo-tunnel/package.json b/products/api-security/package.json similarity index 100% rename from products/argo-tunnel/package.json rename to products/api-security/package.json diff --git a/products/api-security/src/content/_partials/_availability.md b/products/api-security/src/content/_partials/_availability.md new file mode 100644 index 00000000000..548bfe241d9 --- /dev/null +++ b/products/api-security/src/content/_partials/_availability.md @@ -0,0 +1,3 @@ + diff --git a/products/api-security/src/content/_partials/_blog-post.md b/products/api-security/src/content/_partials/_blog-post.md new file mode 100644 index 00000000000..cf96f0dcdb1 --- /dev/null +++ b/products/api-security/src/content/_partials/_blog-post.md @@ -0,0 +1 @@ +For more technical details, see our [blog post](https://blog.cloudflare.com/api-abuse-detection/). \ No newline at end of file diff --git a/products/api-security/src/content/index.md b/products/api-security/src/content/index.md new file mode 100644 index 00000000000..aca1618cb01 --- /dev/null +++ b/products/api-security/src/content/index.md @@ -0,0 +1,32 @@ +--- +title: Overview +order: 0 +pcx-content-type: landing-page +type: overview +--- + +# Cloudflare API Security + +Cloudflare offers a range of products to help identify and address API vulnerabilities. + +## Why care about API security? + +APIs have become the [backbone of popular web services](https://blog.postman.com/intro-to-apis-history-of-apis/), helping the Internet become more accessible and useful. + +As APIs have become more prevalent, however, so have their problems: +- Many companies have [thousands of APIs](products/api-discovery), including ones they do not even know about. +- To support a large base of users, many APIs are protected by a [negative security model](products/api-shield) that makes them vulnerable to credential-stuffing attacks and automated scanning tools. +- With so many endpoints and users, it’s difficult to recognize brute-force attacks against [specific endpoints](products/volumetric-abuse-detection). +- Sophisticated attacks are even harder to recognize, often because even development teams are unaware of common and uncommon [usage patterns](products/sequential-abuse-detection). + +## Features + +Cloudflare offers the following features to help learn about and secure your APIs: + + +For additional details, see our [blog post](https://blog.cloudflare.com/api-abuse-detection/). + +## Availability +Cloudflare API Security products are available to Enterprise customers only. + +Additionally, API Discovery, Volumetric Abuse Detection, and Sequential Abuse Detection are currently enabled by request. If you are interested in using these products, contact your account team. diff --git a/products/api-security/src/content/products/api-discovery.md b/products/api-security/src/content/products/api-discovery.md new file mode 100644 index 00000000000..63dba89e57a --- /dev/null +++ b/products/api-security/src/content/products/api-discovery.md @@ -0,0 +1,42 @@ +--- +order: 0 +pcx-content-type: concept +type: overview +--- + +import Availability from "../_partials/_availability.md" +import BlogBlurb from "../_partials/_blog-post.md" + +# API Discovery + + + +Most development teams struggle to keep track of their APIs. Cloudflare API Discovery helps you map out and understand your attack surface area. + +## Process + +Cloudflare produces a simple, trustworthy map of API endpoints through a process of path normalization. + +For example, you might have thousands of APIs, but a lot of the calls look similar, such as: +- `api.example.com/login/238` +- `api.example.com/login/392` + +Both paths serve a similar purpose — allowing users to log into their accounts — but they are not identical. To simplify your endpoints, these examples might both map to `api.example.com/login/*`. + +API Discovery runs this process across all your authenticated endpoints, eventually generating a simple map of endpoints that might look like: + +- `login/{customer_identifier}` +- `auth` +- `account/{customer_identifier}` +- `password_reset` +- `logout` + +This process currently requires a session identifier, like an authorization token available as a request header. Once you have finished API Discovery, your APIs are ready for protection from [volumetric](../volumetric-abuse-detection) and [sequential](../sequential-abuse-detection) attacks. + + + +## API requests + +To better understand your API traffic, you can also see [API requests](https://dash.cloudflare.com/?to=/:account/:zone/analytics/traffic/api-requests) in your application dashboard. + +This view adds a lightweight filter to application requests so you can better identify API traffic. If you want a more sophisticated understanding of API traffic, check out [Bot Tags](https://developers.cloudflare.com/bots/about/cloudflare-bot-tags). diff --git a/products/api-security/src/content/products/api-shield.md b/products/api-security/src/content/products/api-shield.md new file mode 100644 index 00000000000..3c85450e3d7 --- /dev/null +++ b/products/api-security/src/content/products/api-shield.md @@ -0,0 +1,13 @@ +--- +pcx-content-type: concept +order: 4 +--- + +# API Shield™ + +Cloudflare API Shield allows you to secure your APIs using the following security solutions: + +- **Mutual TLS (mTLS)** — Blocks traffic from devices that do not have a valid client SSL/TLS certificate with an API Shield rule. +- **Schema Validation** — Protects your origin from invalid API requests or a malicious payload by matching each request with the provided schema. + +For more details, see the full [API Shield documentation](https://developers.cloudflare.com/firewall/cf-firewall-rules/api-shield). \ No newline at end of file diff --git a/products/api-security/src/content/products/index.md b/products/api-security/src/content/products/index.md new file mode 100644 index 00000000000..2c8304307fb --- /dev/null +++ b/products/api-security/src/content/products/index.md @@ -0,0 +1,12 @@ +--- +order: 1 +pcx-content-type: navigation +type: overview +--- + +# Products + +Cloudflare offers the following features to help learn about and secure your APIs: + + +For additional details, see our [blog post](https://blog.cloudflare.com/api-abuse-detection/). \ No newline at end of file diff --git a/products/api-security/src/content/products/sequential-abuse-detection.md b/products/api-security/src/content/products/sequential-abuse-detection.md new file mode 100644 index 00000000000..a6b315a7e34 --- /dev/null +++ b/products/api-security/src/content/products/sequential-abuse-detection.md @@ -0,0 +1,25 @@ +--- +order: 3 +pcx-content-type: concept +type: overview +--- + +import Availability from "../_partials/_availability.md" +import BlogBlurb from "../_partials/_blog-post.md" + +# Sequential Abuse Detection + + + +Sequential Abuse Detection uncovers endpoint abuse by looking for irregular traffic across multiple endpoints. + +## Process + +Requests tend to come to endpoints in predictable patterns. For example, a login process might consist of the following: +1. A request is sent to `/login/*/enter`. +1. It is redirected to `/login/*/verify`. +1. It is finally redirected to `/login-successful`. + +When requests go straight to `/login-successful`, they are not following the typical pattern and might be malicious. Sequential Abuse Detection identifies these common patterns in your API traffic and flags traffic that does not match these patterns. + + \ No newline at end of file diff --git a/products/api-security/src/content/products/volumetric-abuse-detection.md b/products/api-security/src/content/products/volumetric-abuse-detection.md new file mode 100644 index 00000000000..e36be25ef84 --- /dev/null +++ b/products/api-security/src/content/products/volumetric-abuse-detection.md @@ -0,0 +1,26 @@ +--- +order: 2 +pcx-content-type: concept +type: overview +--- + +import Availability from "../_partials/_availability.md" +import BlogBlurb from "../_partials/_blog-post.md" + +# Volumetric Abuse Detection + + + +Cloudflare Volumetric Abuse Detection helps you set up a system of adaptive rate limiting. + +## Process + +After [API Discovery](../api-discovery), Cloudflare looks for endpoint abuse based on common user traffic. + +For example, your API might see different levels of traffic to a `/reset-password` endpoint than a `/login` endpoint. Additionally, your `/login` endpoint might see higher than average traffic after a successful marketing campaign. + +These two scenarios speak to the limitations of traditional rate limiting. Not only does traffic vary between endpoints, but it also can vary over time for the same endpoint. Volumetric Abuse Detection solves these problems with unsupervised learning to develop separate baselines for each API and better adjust to changes in user behavior. + +This process currently requires a session identifier, like an authorization token available as a request header. + + \ No newline at end of file diff --git a/products/api-security/wrangler.toml b/products/api-security/wrangler.toml new file mode 100644 index 00000000000..0bb2ee0667e --- /dev/null +++ b/products/api-security/wrangler.toml @@ -0,0 +1,14 @@ +name = "api-security" +type = "webpack" +account_id = "b54f07a6c269ecca2fa60f1ae4920c99" # cloudflare-docs.workers.dev +workers_dev = true + +[env.production] +workers_dev = false +account_id = "b54f07a6c269ecca2fa60f1ae4920c99" +zone_id = "351cf9fc660523187714fa772ad5ca49" +route = "https://developers.cloudflare.com/api-security*" + +[site] +bucket = ".docs/public/" +entry-point = ".docs/workers-site" \ No newline at end of file diff --git a/products/api/docs-config.js b/products/api/docs-config.js index 0c731ae66db..256a7fbcdee 100644 --- a/products/api/docs-config.js +++ b/products/api/docs-config.js @@ -15,15 +15,15 @@ module.exports = { } ], search: { - indexName: "", - apiKey: "", - algoliaOptions: { 'facetFilters': ''} + indexName: "developers-cloudflare", + apiKey: "b23088ab4d346409f9d3ece6606344c3", + algoliaOptions: { 'facetFilters': '["project:api"]'} }, siteMetadata: { title: "Cloudflare API docs", description: "Cloudflare’s API tokens allow you to make calls to our API to alter different settings.", author: "@cloudflare", url: "https://developers.cloudflare.com/api", - image: "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" + image: "https://www.cloudflare.com/img/cf-twitter-card.png" } } diff --git a/products/api/src/content/index.md b/products/api/src/content/index.md index 70cc9b38585..7ae440dc62e 100644 --- a/products/api/src/content/index.md +++ b/products/api/src/content/index.md @@ -27,4 +27,4 @@ For specific guidance on making API calls, see the following: * The specific [Developer Docs section](https://developers.cloudflare.com) for a service for how to guides. * [API schema docs](https://api.cloudflare.com) for request and response payloads for each endpoint. -* If you are using [golang](https://github.com/cloudflare/cloudflare-go) or [Hashicorp's Terraform](https://github.com/terraform-providers/terraform-provider-cloudflare) you can leverage our 1st party libraries to integrate with Cloudflare's API. +* If you are using [golang](https://github.com/cloudflare/cloudflare-go) or [Hashicorp's Terraform](https://github.com/cloudflare/terraform-provider-cloudflare) you can leverage our 1st party libraries to integrate with Cloudflare's API. diff --git a/products/api/src/content/tokens/advanced/api.md b/products/api/src/content/tokens/advanced/api.md index b42be1c4efc..bcfb8bd41fc 100644 --- a/products/api/src/content/tokens/advanced/api.md +++ b/products/api/src/content/tokens/advanced/api.md @@ -9,7 +9,7 @@ With API Tokens it is possible to be able to generate new tokens on the fly via ## Generating the initial token -Before you can create Tokens via the API you need to generate the intial Token which will have the ability to do so via the Cloudflare Dashboard. From the [API Tokens management screen](https://dash.cloudflare.com/profile/api-tokens), select `Create Token` and select the `Create Additional Tokens` Template. This template will contain the user permission for creating API Tokens. This allows you to mimic the exact behavior presented in the UI from the API. +Before you can create Tokens via the API you need to generate the initial Token which will have the ability to do so via the Cloudflare Dashboard. From the [API Tokens management screen](https://dash.cloudflare.com/profile/api-tokens), select `Create Token` and select the `Create Additional Tokens` Template. This template will contain the user permission for creating API Tokens. This allows you to mimic the exact behavior presented in the UI from the API. -Argo Tunnel deletes DNS records after 24-48 hours of a Tunnel being unregistered. Argo Tunnel does not delete TLS certificates on your behalf once the Tunnel is shut down. If you want to clean up a Tunnel you’ve shut down, you can delete DNS records [in the DNS editor](https://dash.cloudflare.com/?zone=dns) and revoke TLS certificates in the Origin Certificates section of the [SSL/TLS tab of the Cloudflare dashboard](https://dash.cloudflare.com?to=/:account/:zone/ssl-tls/origin). +Cloudflare Tunnel deletes DNS records after 24-48 hours of a Tunnel being unregistered. Cloudflare Tunnel does not delete TLS certificates on your behalf once the Tunnel is shut down. If you want to clean up a Tunnel you’ve shut down, you can delete DNS records [in the DNS editor](https://dash.cloudflare.com/?zone=dns) and revoke TLS certificates in the Origin Certificates section of the [SSL/TLS tab of the Cloudflare dashboard](https://dash.cloudflare.com?to=/:account/:zone/ssl-tls/origin). diff --git a/products/cloudflare-one/src/content/connections/connect-apps/hosting-requirements.md b/products/cloudflare-one/src/content/connections/connect-apps/hosting-requirements.md new file mode 100644 index 00000000000..0626dee37de --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-apps/hosting-requirements.md @@ -0,0 +1,11 @@ +--- +order: 7 +--- + +# Tunnel Hosting Requirements + +Running `cloudflared` instances on a server and proxying traffic through it require computing resources such as CPU and memory on the server. The actual amount of resource usage depends on many variables, including the number of requests per second, bandwidth, network latency and hardware environment. + +Although the limit to how much traffic a single `cloudflared` can proxy will be bound to the hardware capabilities of the underlying machine (including network-wise), you may easily scale up the capacity of your Tunnel by running many instances of `cloudflared` [over the same Tunnel multiple times](https://blog.cloudflare.com/highly-available-and-highly-scalable-cloudflare-tunnels/) on different machines or network cards, regardless of the baseline performance of one `cloudflared` instance. + +You may refer to this guide for how to [deploy cloudflared replicas](/connections/connect-apps/run-tunnel/deploy-cloudflared-replicas) to deal with high-load cases. diff --git a/products/cloudflare-one/src/content/connections/connect-apps/index.md b/products/cloudflare-one/src/content/connections/connect-apps/index.md index f8cd26ca523..4db92eba110 100644 --- a/products/cloudflare-one/src/content/connections/connect-apps/index.md +++ b/products/cloudflare-one/src/content/connections/connect-apps/index.md @@ -1,18 +1,19 @@ --- order: 0 +pcx-content-type: how-to --- # Connect applications -You can connect applications, servers, and other resources to Cloudflare's network using [Argo Tunnel](/glossary#argo-tunnel). When connected, Cloudflare can apply [Zero Trust policies](/policies/zero-trust) to determine who can reach the resource. +You can connect applications, servers, and other resources to Cloudflare's network using [Cloudflare Tunnel](/glossary#cloudflare-tunnel). When connected, Cloudflare can apply [Zero Trust policies](/policies/zero-trust) to determine who can reach the resource. ![Tunnel Diagram](../../static/documentation/connections/connect-apps/tun-diagram.png) -Argo Tunnel runs a lightweight [daemon](/glossary#daemon) ([`cloudflared`](/glossary#cloudflared)) in your infrastructure that establishes outbound connections (Tunnels) between your service and the Cloudflare edge. When Cloudflare receives a request for your chosen hostname, it proxies the request through those connections to `cloudflared`. In turn, `cloudflared` proxies the request to your applications. +Cloudflare Tunnel runs a lightweight [daemon](/glossary#daemon) ([`cloudflared`](/glossary#cloudflared)) in your infrastructure that establishes outbound connections (Tunnels) between your service and the Cloudflare edge. When Cloudflare receives a request for your chosen hostname, it proxies the request through those connections to `cloudflared`. In turn, `cloudflared` proxies the request to your applications. This forces any requests to access your applications to go through Cloudflare. This way, you can be sure attack traffic is stopped with Cloudflare’s WAF and Unmetered DDoS mitigation, and authenticated with Access if you’ve enabled those features for your account. -Argo Tunnel can connect HTTP web servers, [SSH servers](/tutorials/ssh), [remote desktops](/tutorials/rdp), and other protocols. Additionally, a single connector, the `cloudflared` daemon, can connect multiple applications of different types. +Cloudflare Tunnel can connect HTTP web servers, [SSH servers](/tutorials/ssh), [remote desktops](/tutorials/rdp), and other protocols. Additionally, a single connector, the `cloudflared` daemon, can connect multiple applications of different types. In order to create and manage Tunnels, you'll first need to: @@ -25,12 +26,12 @@ Once `cloudflared` has been installed and authenticated, the process to get your 2. [Route traffic to your Tunnel](/connections/connect-apps/routing-to-tunnel) 3. [Run your Tunnel](/connections/connect-apps/run-tunnel) -Steps 1-2 are executed once per Tunnel, normally by an administrator, and Step 3 is executed whenever the Tunnel is to be started, normally by the owner of the Tunnel (whom may be different from the administrator). +Steps 1-2 are executed once per Tunnel, normally by an administrator, and Step 3 is executed whenever the Tunnel is to be started, normally by the owner of the Tunnel (whom may be different from the administrator). After running the Tunnel, you may [secure your server](/connections/connect-apps/secure-server) from all ingress traffic. Be sure to check out our [Tutorials](/tutorials), where you can also find best practices for managing Tunnels as an administrator. -## Traffic encryption between Argo Tunnel and HTTPs origin servers +## Traffic encryption between Cloudflare Tunnel and HTTPs origin servers `cloudflared` performs its own SSL termination that is distinct from the origin. diff --git a/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/index.md b/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/index.md index 70dec48f82f..7867571094e 100644 --- a/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/index.md +++ b/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/index.md @@ -1,8 +1,9 @@ --- order: 0 +pcx-content-type: navigation --- -# Setup +# Get started To create and manage Tunnels, you'll first need to install and authenticate [`cloudflared`](/glossary#cloudflared) on your machine. `cloudflared` runs alongside or on your origin servers to connect to Cloudflare's network, as well as client devices for non-HTTP traffic from user endpoints. diff --git a/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/installation.md b/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/installation.md index 69b3582ba90..0ae533e7469 100644 --- a/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/installation.md +++ b/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/installation.md @@ -1,92 +1,37 @@ --- order: 1 +pcx-content-type: reference --- -# Install `cloudflared` +# Download `cloudflared` -Argo Tunnel requires the installation of a lightweight server-side daemon, `cloudflared`, to connect your infrastructure to Cloudflare. `cloudflared` is an [open source project](https://github.com/cloudflare/cloudflared) maintained by Cloudflare. +Cloudflare Tunnel requires the installation of a lightweight server-side daemon, `cloudflared`, to connect your infrastructure to Cloudflare. `cloudflared` is an [open source project](https://github.com/cloudflare/cloudflared) maintained by Cloudflare. Releases can be [found on GitHub](https://github.com/cloudflare/cloudflared/releases). Downloads are available as standalone binaries or packages like Debian and RPM. +Detailed release notes can be found on the [GitHub RELEASE_NOTES file](https://github.com/cloudflare/cloudflared/blob/master/RELEASE_NOTES). + ## Linux -Type | amd64 / x86-64 | x86 (32-bit) | ARMv6 | ARM64 | --------|----------------|--------------|------|------| -Binary | [Download](https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.tgz) | [Download](https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-386.tgz) | [Download](https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz) | [Download from GitHub](https://github.com/cloudflare/cloudflared/releases) | -.deb | [Download](https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb) | [Download](https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-386.deb) | [Download](https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.deb) | - | -.rpm | [Download](https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.rpm) | [Download](https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-386.rpm) | [Download](https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.rpm) | - | +Type | amd64 / x86-64 | x86 (32-bit) | ARM | ARM64 | +-------|----------------|--------------|------|-------| +Binary | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64) | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-386) | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm) | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64) | +.deb | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb) | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-386.deb) | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm.deb) | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb) | +.rpm | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm) | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-386.rpm) | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm.rpm) | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-aarch64.rpm) | -### `.deb` install - -Use the `deb` package manager to install `cloudflared` on compatible machines. `amd64 / x86-64` package in this example. - -```bash -wget -q https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb -dpkg -i cloudflared-stable-linux-amd64.deb -``` - -### `.rpm` install - -Use the `rpm` package manager to install `cloudflared` on compatable machines. `amd64 / x86-64` is used in this example. - -```bash -wget -q https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.rpm -rpm -ivh cloudflared-stable-linux-amd64.rpm -``` - -### Build from source - -You can also build the latest version of `cloudflared` from source with the following steps. - -```sh -$ git clone https://github.com/cloudflare/cloudflared.git -$ cd cloudflared -$ make cloudflared -$ go install github.com/cloudflare/cloudflared/cmd/cloudflared -``` - -Depending on where you installed `cloudflared`, you can move it to a known path as well. - -```bash -mv /root/cloudflared/cloudflared /usr/bin/cloudflared -``` - -## Docker - -A Docker image of `cloudflared` is [available on DockerHub](https://hub.docker.com/r/cloudflare/cloudflared). - ## macOS -You can install `cloudflared` on macOS systems via Homebrew: - -```sh -$ brew install cloudflare/cloudflare/cloudflared -``` - -Alternatively, you can [download the latest Darwin amd64 release directly](https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-darwin-amd64.zip). +You can [download the latest Darwin amd64 release directly](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-darwin-amd64.tgz). ## Windows Type | 32-bit | 64-bit | -------|----------------|-----| -ZIP | [Download](https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-windows-386.zip) | [Download](https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-windows-amd64.zip) | - -Once `cloudflared` is installed: -1. Navigate to the **Downloads** folder. -2. Right-click on the ZIP folder and select `Extract All` to extract the executable. -3. Next, open PowerShell. -4. Navigate to the same Downloads folder. -5. Run the `cloudflared.exe` executable as an administrator to confirm the installation, replacing the path in the example below with the specifics of your directory: - -```bash -PS C:\Users\Administrator\Downloads\cloudflared-stable-windows-amd64> .\cloudflared.exe --version -``` - -The command above should output the version of `cloudflared` if successfully installed. +Executable | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-386.exe) | [Download](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-amd64.exe) | -## Build from source - -You can also build the latest version of `cloudflared` from source with the following steps. - -```sh -$ git clone https://github.com/cloudflare/cloudflared.git -$ cd cloudflared -$ make cloudflared -$ go install github.com/cloudflare/cloudflared/cmd/cloudflared -``` - -Depending on where you installed `cloudflared`, you can move it to a known path as well. +## Docker -```bash -mv /root/cloudflared/cloudflared /usr/bin/cloudflared -``` +A Docker image of `cloudflared` is [available on DockerHub](https://hub.docker.com/r/cloudflare/cloudflared). -## Updating `cloudflared` +## Update `cloudflared` You can update cloudflared by running the following command. @@ -123,9 +55,9 @@ The update will cause `cloudflared` to restart which would impact traffic curren ### Updating with Cloudflare Load Balancer -You can update `cloudflared` without downtime by using Cloudflare's Load Balancer product with your Argo Tunnel deployment. +You can update `cloudflared` without downtime by using Cloudflare's Load Balancer product with your Cloudflare Tunnel deployment. -1. Install a new instance of `cloudflared` and [create](/connections/connect-apps/create-tunnel) a new Argo Tunnel. +1. Install a new instance of `cloudflared` and [create](/connections/connect-apps/create-tunnel) a new Tunnel. 2. Configure the instance to point traffic to the same locally-available service as your current, active instance of `cloudflared`. 3. [Add the address](/connections/connect-apps/routing-to-tunnel/lb) of the new instance of `cloudflared` into your Load Balancer pool as priority 2. 4. Swap the priority such that the new instance is now priority 1 and monitor to confirm traffic is being served. @@ -135,12 +67,11 @@ You can update `cloudflared` without downtime by using Cloudflare's Load Balance If you are not using Cloudflare's Load Balancer, you can use multiple instances of `cloudflared` to update without the risk of downtime. -1. Install a new instance of `cloudflared` and [create](/connections/connect-apps/create-tunnel) a new Argo Tunnel. +1. Install a new instance of `cloudflared` and [create](/connections/connect-apps/create-tunnel) a new Tunnel. 2. Configure the instance to point traffic to the same locally-available service as your current, active instance of `cloudflared`. 3. In the Cloudflare DNS dashboard, [replace](/connections/connect-apps/routing-to-tunnel/dns) the address of the current instance of `cloudflared` with the address of the new instance. Save the record. 4. Remove the now-inactive instance of `cloudflared`. - #### Running multiple instances in Windows Windows systems require services to have a unique name and display name. You can run multiple instances of `cloudflared` by creating `cloudflared` services with unique names. @@ -159,12 +90,9 @@ sc.exe start ## Deprecated versions -Cloudflare currently supports all versions of `cloudflared`. Starting on March 20, 2021, Cloudflare will no longer support versions released prior to 2020.5.1. - -All features available in versions released prior to 2020.5.1 are available in current versions. Breaking changes unrelated to feature availability may be introduced that will impact versions released prior to 2020.5.1. +Cloudflare currently supports versions of `cloudflared` 2020.5.1 and later. Breaking changes unrelated to feature availability may be introduced that will impact versions released prior to 2020.5.1. You can read more about upgrading `cloudflared` in our [developer documentation](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation#updating-cloudflared). | Version(s) | Deprecation status | |---|---| | 2020.5.1 and later | Supported | -| Versions prior to 2020.5.1 | Will no longer be supported starting March 20, 2021 | - +| Versions prior to 2020.5.1 | No longer supported | diff --git a/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/setup.md b/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/setup.md index 15f0053cb96..a2eb2b784a0 100644 --- a/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/setup.md +++ b/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/setup.md @@ -1,5 +1,6 @@ --- order: 2 +pcx-content-type: how-to --- # Authenticate `cloudflared` diff --git a/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/tunnel-guide.md b/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/tunnel-guide.md new file mode 100644 index 00000000000..3a03d50175a --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-apps/install-and-setup/tunnel-guide.md @@ -0,0 +1,187 @@ +--- +order: 3 +title: Tunnel guide +pcx-content-type: how-to +--- + +# Set up your first tunnel + +Follow this step-by-step guide to getting your first tunnel up and running. Before you start, make sure you: +1. [Add a website to Cloudflare](https://support.cloudflare.com/hc/en-us/articles/201720164-Creating-a-Cloudflare-account-and-adding-a-website) +1. [Change your domain nameservers to Cloudflare](https://support.cloudflare.com/hc/en-us/articles/205195708) + +## 1. Download and install `cloudflared` + +
+Windows +
+ +First, download `cloudflared` on your machine. Visit the [downloads](/connections/connect-apps/install-and-setup/installation) page to find the right package for your OS. + +Next, rename the executable to `cloudflared.exe`, and then open PowerShell. Change directory to your Downloads folder and run `.\cloudflared.exe --version`. It should output the version of `cloudflared`. Note that `cloudflared.exe` could be `cloudflared-windows-amd64.exe` or `cloudflared-windows-386.exe` if you haven't renamed it. + +Replace the path in the example with the specifics of your Downloads directory: + +```text +PS C:\Users\Administrator\Downloads\cloudflared-stable-windows-amd64> .\cloudflared.exe --version +``` + +### Build from source + +You can also build the latest version of `cloudflared` from source with the following steps: + +```bash +$ git clone https://github.com/cloudflare/cloudflared.git +$ cd cloudflared +$ make cloudflared +$ go install github.com/cloudflare/cloudflared/cmd/cloudflared +``` + +Depending on where you installed `cloudflared`, you can move it to a known path as well. + +```bash +mv /root/cloudflared/cloudflared /usr/bin/cloudflared +``` + +
+
+ +
+macOS +
+ +The first step to creating a tunnel is to download and install `cloudflared` on your machine. + +```sh +$ brew install cloudflare/cloudflare/cloudflared +``` + +Alternatively, you can [download the latest Darwin amd64 release](/connections/connect-apps/install-and-setup/installation) directly. + +
+
+ +
+Linux +
+ +First, download `cloudflared` on your machine. Visit the [downloads](/connections/connect-apps/install-and-setup/installation) page to find the right package for your OS. + +Next, install `cloudflared`. + +### .deb install +Use the deb package manager to install `cloudflared` on compatible machines. `amd64 / x86-64` is used in this example. + +```sh +wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb dpkg -i cloudflared-linux-amd64.deb +``` + +### ​.rpm install +Use the rpm package manager to install `cloudflared` on compatible machines. `amd64 / x86-64` is used in this example. + +```sh +wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm +``` + +### Build from source + +You can also build the latest version of `cloudflared` from source with the following steps. + +```sh +$ git clone https://github.com/cloudflare/cloudflared.git +$ cd cloudflared +$ make cloudflared +$ go install github.com/cloudflare/cloudflared/cmd/cloudflared +``` + +Depending on where you installed `cloudflared`, you can move it to a known path as well. + +```bash +mv /root/cloudflared/cloudflared /usr/bin/cloudflared +``` + +
+
+ +## 2. Authenticate `cloudflared` + +```bash +$ cloudflared tunnel login +``` + +Running this command will: + +* Open a browser window and prompt you to log into your Cloudflare account. After logging into your account, select your hostname. +* Generate a [cert.pem file](/connections/connect-apps/tunnel-useful-terms#cert-pem). The `cert.pem` file contains account-wide credentials. + +## 3. Create a tunnel and give it a name + +```bash +$ cloudflared tunnel create +``` + +Running this command will: +* Create a tunnel by establishing a persistent relationship between the [name you provide](/connections/connect-apps/tunnel-useful-terms#tunnel-name) and a [UUID](/connections/connect-apps/tunnel-useful-terms#tunnel-uuid) for your tunnel. At this point, no connection is active within the tunnel yet. +* Generate a [credentials file](/connections/connect-apps/tunnel-useful-terms#credentials-file). +* Create a subdomain of `.cfargotunnel.com`. + +From the output of the command, take note of the tunnel’s UUID and the path to your tunnel’s credentials file. + +## 4. Create a configuration file + +Create a [configuration file](/connections/connect-apps/tunnel-useful-terms#configuration-file) in your `.cloudflared` directory using any text editor. This file will configure the tunnel to route traffic from a given origin to the hostname of your choice. + +Add the following fields to the file: + +**If you’re connecting an application** + +```txt +url: http://localhost:8000 +tunnel: +credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json +``` + +**If you’re connecting a network** + +```txt +tunnel: +credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json +``` + +## 5. Start routing traffic + +Now assign a CNAME record that points traffic to your tunnel subdomain. This record will be easier to remember and share. + +```bash +$ cloudflared tunnel route dns +``` + +You can confirm that the route has been successfully established by running: + +```bash +$ cloudflared tunnel route ip show +``` + +## 6. Run the tunnel + +Run the tunnel to proxy incoming traffic from the Tunnel to any number of services running locally on your origin. + +```bash +$ cloudflared tunnel --config path/config.yaml run +``` + +You can also run the tunnel without a configuration file. To do that, run it by adding the necessary [flags](/connections/connect-apps/configuration/config#arguments) after the `run` command and before the name or UUID. For example, running your tunnel with this command way will route all traffic to the given URL: + +```bash +$ cloudflared tunnel run --url localhost:3000 +``` + +Cloudflare Tunnel can install itself as a system service on Linux and Windows and as a launch agent on macOS. For more information, refer to [Run as a service](/connections/connect-apps/run-tunnel/run-as-service). + +## 7. Check the tunnel + +Your tunnel configuration is complete! Navigate to **Access** > **Tunnels** on the Teams Dashboard to see your tunnel listed as active. If you want to see a list of active tunnels directly from your CLI, you can run: + +```bash +$ cloudflared tunnel list +``` \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-apps/license/copyrights.md b/products/cloudflare-one/src/content/connections/connect-apps/license/copyrights.md index fa84a7fc3d1..1fe21e08e54 100644 --- a/products/cloudflare-one/src/content/connections/connect-apps/license/copyrights.md +++ b/products/cloudflare-one/src/content/connections/connect-apps/license/copyrights.md @@ -1,5 +1,6 @@ --- order: 101 +pcx-content-type: reference --- # Copyrights diff --git a/products/cloudflare-one/src/content/connections/connect-apps/license/index.md b/products/cloudflare-one/src/content/connections/connect-apps/license/index.md index 2d15446b8f5..f0238aef3b9 100644 --- a/products/cloudflare-one/src/content/connections/connect-apps/license/index.md +++ b/products/cloudflare-one/src/content/connections/connect-apps/license/index.md @@ -1,5 +1,6 @@ --- order: 50 +pcx-content-type: reference --- # License diff --git a/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/dns.md b/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/dns.md index 8b1072ff983..c8242d47b18 100644 --- a/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/dns.md +++ b/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/dns.md @@ -1,17 +1,18 @@ --- order: 50 +pcx-content-type: how-to --- # DNS record | Before you start | |---| -| 1. [Create an Argo Tunnel](/connections/connect-apps/create-tunnel) | +| 1. [Create a Tunnel](/connections/connect-apps/create-tunnel) | | 2. [Configure the Tunnel](/connections/connect-apps/configuration) | ## Route traffic from the Cloudflare dashboard -When you create an Argo Tunnel, Cloudflare generates a subdomain of `cfargotunnel.com` with the UUID of the created Tunnel. You can treat that subdomain as if it were an origin target in the Cloudflare dashboard. +When you create a Tunnel, Cloudflare generates a subdomain of `cfargotunnel.com` with the UUID of the created Tunnel. You can treat that subdomain as if it were an origin target in the Cloudflare dashboard. Unlike publicly routable IP addresses, the subdomain will only proxy traffic for a DNS record in the same Cloudflare account. If someone discovers your subdomain UUID, they will not be able to create a DNS record in another account or system to proxy traffic to the address. @@ -41,4 +42,4 @@ Note: this command requires the `cert.pem` file. ## Optional: Configure additional Cloudflare settings -The application will default to the Cloudflare settings of the hostname in your account that includes the Argo Tunnel DNS record, including [cache rules](https://support.cloudflare.com/hc/en-us/articles/202775670-Customizing-Cloudflare-s-cache) and [firewall policies](https://developers.cloudflare.com/firewall/). You can changes these settings for your hostname in Cloudflare's dashboard. \ No newline at end of file +The application will default to the Cloudflare settings of the hostname in your account that includes the Cloudflare Tunnel DNS record, including [cache rules](https://support.cloudflare.com/hc/en-us/articles/202775670-Customizing-Cloudflare-s-cache) and [firewall policies](https://developers.cloudflare.com/firewall/). You can changes these settings for your hostname in Cloudflare's dashboard. \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/index.md b/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/index.md index c0ead263bb3..e83fd8e18bf 100644 --- a/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/index.md +++ b/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/index.md @@ -1,11 +1,12 @@ --- order: 4 +pcx-content-type: concept --- # Route to a Tunnel -Cloudflare can route traffic to your Argo Tunnel connection using a [DNS record](/connections/connect-apps/routing-to-tunnel/dns) or Cloudflare’s [Load Balancer](/connections/connect-apps/routing-to-tunnel/lb) product. +Cloudflare can route traffic to your Cloudflare Tunnel connection using a [DNS record](/connections/connect-apps/routing-to-tunnel/dns) or Cloudflare’s [Load Balancer](/connections/connect-apps/routing-to-tunnel/lb) product. -You can configure either option from the Cloudflare dashboard by pointing a DNS CNAME record or a Load Balancer pool to the Argo Tunnel subdomain for your connection. You can also associate these records with your Tunnel from `cloudflared` directly. +You can configure either option from the Cloudflare dashboard by pointing a DNS CNAME record or a Load Balancer pool to the Cloudflare Tunnel subdomain for your connection. You can also associate these records with your Tunnel from `cloudflared` directly. -Argo Tunnel can also [be configured](/connections/connect-apps/configuration/ingress) to route traffic to multiple hostnames to multiple services in your environment. \ No newline at end of file +Cloudflare Tunnel can also [be configured](/connections/connect-apps/configuration/ingress) to route traffic to multiple hostnames to multiple services in your environment. \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/kubernetes.md b/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/kubernetes.md index 3c2c5f12e18..dff67452749 100644 --- a/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/kubernetes.md +++ b/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/kubernetes.md @@ -1,10 +1,11 @@ --- order: 40 +pcx-content-type: how-to --- # Kubernetes -You can deploy Argo Tunnel to route traffic to Kubernetes clusters. Cloudflare no longer maintains an ingress controller, but we recommend two options for connecting Kubernetes clusters to Cloudflare without introducing downtime caused by application restarts or `cloudflared` updates. +You can deploy Cloudflare Tunnel to route traffic to Kubernetes clusters. Cloudflare no longer maintains an ingress controller, but we recommend two options for connecting Kubernetes clusters to Cloudflare without introducing downtime caused by application restarts or `cloudflared` updates. Both options rely on Cloudflare's Load Balancer to send traffic for a single hostname to two or more instances of `cloudflared`, allowing you to update or modify `cloudflared` without downtime. Those instances of `cloudflared` should point to a service or ingress controller that runs in front of your Kubernetes cluster. @@ -23,7 +24,7 @@ Both options rely on Cloudflare's Load Balancer to send traffic for a single hos 4. Create two deployments with one replica each using `cloudflared`. Configure `cloudflared` to point to the service IP of the upstream service. Mount the secrets created in Step 1 and point `cloudflared` to the right path. -5. In the Cloudflare dashboard, create a Load Balancer pool and [point the pool](/connections/connect-apps/routing-to-tunnel/lb) to the two or more Argo Tunnel connections. +5. In the Cloudflare dashboard, create a Load Balancer pool and [point the pool](/connections/connect-apps/routing-to-tunnel/lb) to the two or more Cloudflare Tunnel connections. Once configured, you can update `cloudflared` by updating one deployment and then proceeding to the next one once you've verified the newly updated cloudflared pod is running and connected. @@ -35,4 +36,4 @@ Once configured, you can update `cloudflared` by updating one deployment and the 3. Create two deployments with one replica each using `cloudflared`. Configure `cloudflared` to point to an ingress controller. Mount the secrets created in Step 1 and point `cloudflared` to the right path. -4. In the Cloudflare dashboard, create a Load Balancer pool and [point the pool](/connections/connect-apps/routing-to-tunnel/lb) to the two or more Argo Tunnel connections. +4. In the Cloudflare dashboard, create a Load Balancer pool and [point the pool](/connections/connect-apps/routing-to-tunnel/lb) to the two or more Cloudflare Tunnel connections. diff --git a/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/lb.md b/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/lb.md index 5fd11b8021f..271c225cc2b 100644 --- a/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/lb.md +++ b/products/cloudflare-one/src/content/connections/connect-apps/routing-to-tunnel/lb.md @@ -1,30 +1,31 @@ --- order: 50 +pcx-content-type: how-to --- # Load balancers | Before you start | |---| -| 1. [Create an Argo Tunnel](/connections/connect-apps/create-tunnel) | +| 1. [Create a Tunnel](/connections/connect-apps/create-tunnel) | | 2. [Configure the Tunnel](/connections/connect-apps/configuration) | | 3. [Create a Load Balancer pool in Cloudflare](https://developers.cloudflare.com/load-balancing/create-load-balancer-ui) | ## Route traffic from the dashboard -When you create an Argo Tunnel, Cloudflare generates a subdomain of `cfargotunnel.com` with the UUID of the created Tunnel. You can treat that subdomain as if it were an origin target in the Cloudflare dashboard. +When you create a Tunnel, Cloudflare generates a subdomain of `cfargotunnel.com` with the UUID of the created Tunnel. You can treat that subdomain as if it were an origin target in the Cloudflare dashboard. Unlike publicly routable IP addresses, the subdomain will only proxy traffic for a DNS record or a Load Balancer pool in the same Cloudflare account. If someone discovers your subdomain UUID, they will not be able to create a DNS record in another account or system to proxy traffic to the address. -To add an Argo Tunnel connection to a Cloudflare Load Balancer pool: +To add a Cloudflare Tunnel connection to a Cloudflare Load Balancer pool: 1. Navigate to the Load Balancer page in the Cloudflare dashboard. -2. Create or edit an existing Origin Pool. Add the Argo Tunnel subdomain as an Origin Address. +2. Create or edit an existing Origin Pool. Add the Tunnel subdomain as an Origin Address. 3. Click **Save**. ## Route traffic from the command line -You can add Argo Tunnel to an existing load Balancer pool directly from `cloudflared`. The result is the same as creation from the dashboard above. +You can add Cloudflare Tunnel to an existing load Balancer pool directly from `cloudflared`. The result is the same as creation from the dashboard above. To do so, run the following command: @@ -36,4 +37,4 @@ $ cloudflared tunnel route lb -The above arguments are required for pre-configured Argo Tunnel deployments. If you are using legacy Argo Tunnel, without names, you can append the `--legacy` flag when running cloudflared tunnel install command. +The above arguments are required for pre-configured Cloudflare Tunnel deployments. If you are using legacy Tunnels, without names, you can append the `--legacy` flag when running `cloudflared` tunnel install command. +Then, start the system service with the following command: +```sh +$ sudo systemctl start cloudflared +``` + +Or start on boot with: +```sh +$ sudo systemctl enable cloudflared +``` + ## macOS ### Run at login @@ -52,7 +63,7 @@ Open a Terminal and run the following command: $ cloudflared service install ``` -Argo Tunnel will be installed as a launch agent, and start whenever you log in, using your local user configuration found in `~/.cloudflared/`. +Cloudflare Tunnel will be installed as a launch agent, and start whenever you log in, using your local user configuration found in `~/.cloudflared/`. #### Manually start the service @@ -72,7 +83,7 @@ Run the following command: $ sudo cloudflared service install ``` -Argo Tunnel will be installed as a launch daemon, and start whenever your system boots, using your configuration found in `/etc/cloudflared`. +Cloudflare Tunnel will be installed as a launch daemon, and start whenever your system boots, using your configuration found in `/etc/cloudflared`. #### Manually start the service @@ -111,7 +122,7 @@ C:\Cloudflared\bin\cloudflared.exe C:\Cloudflared\bin\cloudflared.exe service install ``` -Assuming Windows is installed to `C:\`, when running as a service, Argo Tunnel expects the configuration to be available at the following path: +Assuming Windows is installed to `C:\`, when running as a service, Cloudflare Tunnel expects the configuration to be available at the following path: `C:\Windows\system32\config\systemprofile\.cloudflared\config.yml` . @@ -151,7 +162,7 @@ copy C:\Users\%USERNAME%\.cloudflared\cert.pem C:\Windows\System32\config\system ### Create, route, and configure the Tunnel -You can now [create](/connections/connect-apps/create-tunnel) an Argo Tunnel and edit the configuration file to [configure](/connections/connect-apps/configuration) `cloudflared`. We recommend setting the [routing](/connections/connect-apps/routing-to-tunnel) before running the service in the next step. +You can now [create](/connections/connect-apps/create-tunnel) an Cloudflare Tunnel and edit the configuration file to [configure](/connections/connect-apps/configuration) `cloudflared`. We recommend setting the [routing](/connections/connect-apps/routing-to-tunnel) before running the service in the next step. -Alternatively, you can run the following commands to start Argo Tunnel as a service: +Alternatively, you can run the following commands to start Cloudflare Tunnel as a service: ``` C:\> sc start cloudflared tunnel run diff --git a/products/cloudflare-one/src/content/connections/connect-apps/secure-server.md b/products/cloudflare-one/src/content/connections/connect-apps/secure-server.md new file mode 100644 index 00000000000..2217429c6ea --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-apps/secure-server.md @@ -0,0 +1,62 @@ +--- +order: 6 +--- + +# Secure the Server + +| Before you start | +|---| +| 1. [Create a Tunnel](/connections/connect-apps/create-tunnel) | +| 2. [Configure the Tunnel](/connections/connect-apps/configuration) | +| 3. [Configure routing to the Tunnel](/connections/connect-apps/routing-to-tunnel) | +| 4. [Run the Tunnel](/connections/connect-apps/run-tunnel) | + +Once you can successfully run a Tunnel to proxy incoming traffic to any number of services running locally on your origin, you can lock down your origin to block out potentially malicious incoming traffic. By disallowing all ingress traffic and allowing only egress traffic, you can avoid “poking holes” on your server's firewall while exposing only the services you specified in the Tunnel's `config.yml` to the outside world. + +## Cloud VM instance-level firewall +If you host your services on a Virtual Machine (VM) instance by a Cloud provider such as Google Cloud Platform (GCP), you may set up instance-level firewall rules to disallow all ingress traffic and allow only egress traffic. For example, on GCP, you may delete all ingress rules, leaving only the relevant egress rules. This is because GCP's firewall defaults to “Block” unless a rule explicitly allows certain traffic. + +![GCP firewall](../../static/documentation/connections/gcp-firewall.png) + +## OS-level firewall +Alternatively, you may also use operating system (OS)-level firewall rules to disallow all ingress traffic and allow only egress traffic. For example, if your server runs on Linux, you may use `iptables` to set up firewall rules. Most Linux distributions are pre-installed with `iptables`. Note that in the example below, not all ingress traffic is blocked, just in case that the server is hosted on the Cloud and there would be no way to SSH back into the system again if the settings were configured wrongly. + +1. Check your current firewall rules. +```sh +$ sudo iptables -L +``` + +2. Allow `localhost` to communicate with itself. +```sh +$ sudo iptables -A INPUT -i lo -j ACCEPT +``` + +3. Allow already established connection and related traffic. +```sh +$ sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +``` + +4. Allow new SSH connections. +```sh +$ sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT +``` + +5. Drop all other ingress traffic. + + + +```sh +$ sudo iptables -A INPUT -j DROP +``` + +6. After setting the firewall rules, use this command to check the current `iptables` settings: +```sh +$ sudo iptables -L +``` + +Run your Tunnel and check that all the services specified in `config.yml` should still be accessible to the outside world via the Tunnel, but not via the external IP address of the server. + +You can also: +* [Secure your application with Cloudflare Access](/applications/configure-apps/self-hosted-apps) diff --git a/products/cloudflare-one/src/content/connections/connect-apps/trycloudflare.md b/products/cloudflare-one/src/content/connections/connect-apps/trycloudflare.md index 99461f7dc05..97e24d6afce 100644 --- a/products/cloudflare-one/src/content/connections/connect-apps/trycloudflare.md +++ b/products/cloudflare-one/src/content/connections/connect-apps/trycloudflare.md @@ -1,10 +1,11 @@ --- order: 100 +pcx-content-type: how-to --- # TryCloudflare -Developers can use the TryCloudflare tool to experiment with Argo Tunnel without adding a site to Cloudflare's DNS. TryCloudflare will launch a process that generates a random subdomain on `trycloudflare.com`. Requests to that subdomain will be proxied through the Cloudflare network to your web server running on localhost. +Developers can use the TryCloudflare tool to experiment with Cloudflare Tunnel without adding a site to Cloudflare's DNS. TryCloudflare will launch a process that generates a random subdomain on `trycloudflare.com`. Requests to that subdomain will be proxied through the Cloudflare network to your web server running on localhost. ### Using TryCloudflare 1. Follow [these instructions](/connections/connect-apps/install-and-setup/installation) to install `cloudflared`. If you have an older copy, update to 2019.4.0 or later. @@ -27,13 +28,13 @@ $ cloudflared tunnel --url http://localhost:7000 #### What are some example use cases for TryCloudflare? * Create a web server for a project on your laptop that you want to share with others on different networks -* Test browser compatibility for a new site by creating a free Argo Tunnel and testing the link in different browsers +* Test browser compatibility for a new site by creating a free Tunnel and testing the link in different browsers * Run speed tests from different regions by using a tool like Pingdom or WebPageTest to connect to the randomly-generated subdomain created by TryCloudflare #### Why does Cloudflare provide this service for free? -* We want more users to experience the speed and security improvements of Argo Tunnel (and Argo Smart Routing). We hope you test it with TryCloudflare and decide to add it to your production sites. +* We want more users to experience the speed and security improvements of Cloudflare Tunnel (and Argo Smart Routing). We hope you test it with TryCloudflare and decide to add it to your production sites. * Cloudflare’s features historically require you to own a domain, set that domain’s DNS to Cloudflare’s nameservers, and configure its DNS records before you can begin to use any services. We hope to make more and more of our products available to trial without that burden. -* We don’t guarantee any SLA or uptime of TryCloudflare - we plan to test new Argo Tunnel features and improvements on these free tunnels. This provides us with a group of connections to test before we deploy to production customers. Free tunnels are meant to be used for testing and development, not for deploying a production website. +* We don’t guarantee any SLA or uptime of TryCloudflare - we plan to test new Cloudflare Tunnel features and improvements on these free tunnels. This provides us with a group of connections to test before we deploy to production customers. Free tunnels are meant to be used for testing and development, not for deploying a production website. #### Legal -Your installation of cloudflared software constitutes a symbol of your signature indicating that you accept the terms of the [Cloudflare License](https://developers.cloudflare.com/argo-tunnel/license/), [Terms](https://www.cloudflare.com/terms/) and [Privacy Policy](https://www.cloudflare.com/privacypolicy/). +Your installation of cloudflared software constitutes a symbol of your signature indicating that you accept the terms of the [Cloudflare License](/connections/connect-apps/license), [Terms](https://www.cloudflare.com/terms/) and [Privacy Policy](https://www.cloudflare.com/privacypolicy/). diff --git a/products/cloudflare-one/src/content/connections/connect-apps/tunnel-useful-terms.md b/products/cloudflare-one/src/content/connections/connect-apps/tunnel-useful-terms.md new file mode 100644 index 00000000000..0023efa18c4 --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-apps/tunnel-useful-terms.md @@ -0,0 +1,30 @@ +--- +order: 2 +pcx-content-type: reference +--- + +# Useful terms + +## Tunnel +A tunnel is a secure, outbound-only pathway you can establish between your origin and the Cloudflare edge. Each tunnel you create will be assigned a [name](#tunnel-name) and a [UUID](#tunnel-uuid). + +## Tunnel UUID +A tunnel UUID is an alpha-numeric, unique ID assigned to a tunnel. The tunnel UUID can be used in [configuration files](#configuration-file), and in general, whenever you need to reference a specific tunnel. + +## Tunnel name +The `cloudflared tunnel create ` command creates a tunnel and assigns it a name. Once named, a tunnel is a persistent pathway within which you can stop and start as many [connectors](#connector) as needed, adding stability and ease of use to your tunnel experience. Tunnel names do not need to be hostnames; for example, you can assign your tunnel a name that represents your application/network, a particular server, or the cloud environment where it runs. A human-readable identifier lets you easily reference a tunnel whenever you need. + +## Connector +Users can create and configure a tunnel once and run it as multiple different `cloudflared` processes. These processes are known as connectors, or replicas. DNS records and Cloudflare Load Balancers can still point to the tunnel and its UUID, while that tunnel sends traffic to the multiple instances of cloudflared that run through it. Using multiple connectors provides tunnels with high availability, scalability, and elasticity. + +## Configuration file +This is a `.yaml` file that functions as the operating manual for `cloudflared`. By creating a configuration file, you can have fine-grained control over how their instance of cloudflared will operate. This includes operations like what you want `cloudflared` to do with traffic (for example, proxy websockets to port `xxxx`, or ssh to port `yyyy`), where `cloudflared` should search for authorization (credentials file, tunnel token), and what mode it should run in (for example, [`warp-routing`](/connections/connect-networks/private-net/create-tunnel#configure-the-tunnel)). In the absence of a configuration file, cloudflared will proxy outbound traffic through port `8080`. + +## Cert.pem +This is the certificate file issued by Cloudflare when you run `cloudflared tunnel login`. This file is required when you create new tunnels, delete existing tunnels, change DNS records, or configure tunnel routing from cloudflared. This file is not required to perform actions such as running an existing tunnel or managing tunnel routing from the Cloudflare dashboard. The cert.pem origin certificate is valid for at least 10 years, and the service token it contains is valid until revoked. + +## Credentials file +This file is created when you run `cloudflared tunnel create `. It stores your tunnel’s credentials in a `.json` format, and is unique to each tunnel. This file functions as a token authenticating the tunnel it is associated with. + +## Ingress rule +Ingress rules let users specify which local services traffic should be proxied to. If a rule doesn't specify a path, all paths will be matched. Ingress rules can be listed in your [configuration file](#configuration-file) or when running `cloudflared tunnel ingress`. \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-browsers/configuration.md b/products/cloudflare-one/src/content/connections/connect-browsers/configuration.md index 885764e0e17..c7cd1148e33 100644 --- a/products/cloudflare-one/src/content/connections/connect-browsers/configuration.md +++ b/products/cloudflare-one/src/content/connections/connect-browsers/configuration.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content-type: how-to --- # Setup @@ -10,7 +11,7 @@ Browser Isolation is enabled through Secure Web Gateway HTTP policies. By defaul 1. Download the latest version of the [WARP client](/connections/connect-devices/warp/download-warp). -1. Create a [Device enrollment policy](/connections/connect-devices/warp/device-enrollment). +1. Create a [Device enrollment rule](/connections/connect-devices/warp/warp-settings#device-enrollment-permissions). 1. Set up an [Isolation policy](/policies/filtering/http-policies/#isolate). diff --git a/products/cloudflare-one/src/content/connections/connect-browsers/extensions.md b/products/cloudflare-one/src/content/connections/connect-browsers/extensions.md new file mode 100644 index 00000000000..60b72511e4f --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-browsers/extensions.md @@ -0,0 +1,36 @@ +--- +order: 4 +pcx-content-type: reference +--- + +# Extensions + +Browser Isolation supports running native Chromium Web Extensions in the remote browser. + +This capability allows extending tools that require DOM access (such as password managers and ad-blockers) to isolated pages. + +## Install an extension inside the remote browser + +### Prerequisite: Isolate Chrome Web Store + +Installing extensions requires that the Chrome Web Store is isolated, first create an [HTTP policy](/policies/filtering/http-policies) that isolates the Chrome Webstore (chrome.google.com). + +### Install an extension + +- Navigate to https://chrome.google.com/webstore while isolated. +- Find and select your desired extension. +- Select "Add to Chrome". +- Approve the extension installation by selecting "Add extension". + +Remote browser extensions are automatically reinstalled across isolated sessions. + +## Removing extensions from the remote browser + +Extensions may be uninstalled within the remote browser from any isolated page. + +- Navigate to any isolated webpage. +- Right click to open the context menu and select "Show isolation toolbar" +- Within the isolation toolbar on the bottom of the page, select the Jigsaw icon to open the extension manager. +- Select the hamburger icon for the desired extension to open the extension controls. +- Choose "Remove from Chromium..." +- Select "Remove" to confirm extension uninstallation. \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-browsers/index.md b/products/cloudflare-one/src/content/connections/connect-browsers/index.md index 7b7e437d628..b1d9596d55c 100644 --- a/products/cloudflare-one/src/content/connections/connect-browsers/index.md +++ b/products/cloudflare-one/src/content/connections/connect-browsers/index.md @@ -1,5 +1,6 @@ --- order: 4 +pcx-content-type: concept --- # Connect browsers @@ -14,7 +15,7 @@ Cloudflare Browser Isolation works by intercepting normal browsing traffic and s Remote browsing is invisible to the user who continues to use their browser normally without changing their preferred browser and habits. Every open tab and window is automatically isolated. -![Diagram of how Browser Isolation integrates with WARP and Gateway](../../static/documentation/rbi/cloudflare-one-browser-diagram.png) +![Diagram of how Browser Isolation integrates with WARP and Gateway](../../static/documentation/rbi/cloudflare-one-browser-diagram-background.png) Browser Isolation is integrated into Cloudflare for Teams [HTTP Policies](/policies/filtering/http-policies). diff --git a/products/cloudflare-one/src/content/connections/connect-browsers/known-limitations.md b/products/cloudflare-one/src/content/connections/connect-browsers/known-limitations.md index 94767e1736a..54d220f4579 100644 --- a/products/cloudflare-one/src/content/connections/connect-browsers/known-limitations.md +++ b/products/cloudflare-one/src/content/connections/connect-browsers/known-limitations.md @@ -1,6 +1,6 @@ --- -title: Known limitations order: 3 +pcx-content-type: reference --- # Known limitations @@ -12,17 +12,9 @@ Our Network Vector Rendering (NVR) technology allows us to deliver a secure remo - Webcam / Microphone support is unavailable. - Websites that use WebGL may not function. - Netflix and Spotify Web Player are unavailable. -- Browser extensions are currently unsupported. If one of these limitations affects you, please let us know by [submitting feedback](#submitting-feedback). -## Browser plugins / extensions - -Browser extensions / plugins are not compatible with isolated pages at this time however we do plan to support them in future. Let us know what plugins you would like supported by [submitting feedback](#submitting-feedback). - -### Ad blockers -Advertisement blocking extensions installed in your local browser such as AdBlock or uBlock Origin may negatively interfere with the web-based remoting client. While using isolated browsing it is recommended to disable ad blocking extensions. - ## Device / Browser support - Modern Chromium, Google Chrome, Mozilla Firefox, Safari, Edge (Chromium) and Opera are supported. @@ -39,7 +31,7 @@ We are still defining our minimum requirements but expect Browser Isolation to w ### Safari -Safari's default configuration is susceptible to "[Maximum Sessions Reached](/faq/browser-isolation#why-do-i-see-a-maximum-sessions-reached)" alerts. To workaround this behaviour open Safari → Preferences → Privacy and uncheck **Prevent cross-site tracking**. +Safari's default configuration is susceptible to "[Maximum Sessions Reached](/faq/teams-troubleshooting#i-see-a-maximum-sessions-reached-alert)" alerts. To workaround this behaviour open Safari → Preferences → Privacy and uncheck **Prevent cross-site tracking**. ## Submitting feedback diff --git a/products/cloudflare-one/src/content/connections/connect-browsers/third-party-cookies.md b/products/cloudflare-one/src/content/connections/connect-browsers/third-party-cookies.md new file mode 100644 index 00000000000..f3942f02289 --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-browsers/third-party-cookies.md @@ -0,0 +1,46 @@ +--- +order: 3 +pcx-content-type: how-to +hidden: true +--- + +# Enable third-party cookies + +Browser Isolation currently depends on third-party cookies to maintain a short-lived session between your local browser and the remote isolated browser. + +Each web browser treats third-party cookies differently, and some browsers (for example, Chrome and Firefox) may only present this error while incognito / private browsing mode is active. Depending on how your browser is configured, you may need to enable third-party cookies to access isolated websites. + +Follow these instructions to enable third-party cookies in your browser: + +## Chrome (Incognito mode) + +1. Open Chrome. +1. At the top right, click the three-dot menu and go to **Settings**. +1. Scroll down to **Privacy and security**, click **Cookies and other site data**. +1. Click **See all cookies and site data** > **Remove all**. +1. Confirm by clicking **Clear all**. + +## Firefox (Private Browsing mode) + +1. Open Firefox. +1. Click **Tools** > **Options**. +1. Click **Privacy** in the top panel. +1. Select the checkbox labeled *Accept cookies from sites*. +1. Select the checkbox labeled *Accept third-party cookies*. +1. Click **OK**. + +## Safari + +1. Open Safari. +1. Go to **Preferences** > **Privacy**. +1. Under the **Cookies and website data** section, un-select both: + * Prevent cross-site tracking + * Block all cookies +1. Close the Preferences window. + +## Brave + +1. Open Brave. +1. Click the menu and go to **Settings**. +1. Go to **Additional settings** > **Privacy and Security** > **Cookies and other site data**. +1. Click **Allow all cookies**. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/agentless/dns-over-https.md b/products/cloudflare-one/src/content/connections/connect-devices/agentless/dns-over-https.md index d44b4699ae2..83e5bb951a2 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/agentless/dns-over-https.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/agentless/dns-over-https.md @@ -1,11 +1,14 @@ --- order: 1 +pcx-content-type: how-to --- # DNS over HTTPS ## Browser +Browsers can be configured to use any DoH endpoint. If you choose to configure DoH directly in your browser, you must choose a Gateway location as your DoH endpoint, otherwise Gateway DNS filtering will not occur in that browser. + ### Firefox diff --git a/products/cloudflare-one/src/content/connections/connect-devices/agentless/dns-over-tls.md b/products/cloudflare-one/src/content/connections/connect-devices/agentless/dns-over-tls.md index a4bb1c3f7ff..9ab0ccc444a 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/agentless/dns-over-tls.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/agentless/dns-over-tls.md @@ -1,5 +1,6 @@ --- order: 2 +pcx-content-type: how-to --- # DNS over TLS diff --git a/products/cloudflare-one/src/content/connections/connect-devices/agentless/index.md b/products/cloudflare-one/src/content/connections/connect-devices/agentless/index.md index 5ad6ba9e53e..1fe64576616 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/agentless/index.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/agentless/index.md @@ -1,7 +1,14 @@ --- order: 2 +pcx-content-type: navigation --- # Agentless options + + \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-devices/agentless/linux.md b/products/cloudflare-one/src/content/connections/connect-devices/agentless/linux.md deleted file mode 100644 index bf0f9399594..00000000000 --- a/products/cloudflare-one/src/content/connections/connect-devices/agentless/linux.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -order: 2 -hidden: true ---- - -# Linux - -## Ubuntu - -### IPv4 -1. Click **System** > **Preferences** > **Network Connections**. -2. Click on the **Wireless** tab, then choose the Wi-Fi network you are currently connected to. -3. Click **Edit**. -4. Click **IPv4**. -Remove any IP addresses that may already be listed. -6. Add the following IP addresses: - * **172.64.36.1** - * **172.64.36.2** -7. Click **Apply**. - -### IPv6 -1. Click **System** > **Preferences** > **Network Connections**. -2. Click on the **Wireless** tab, then choose the Wi-Fi network you are currently connected to. -3. Click **IPv6**. -4. Add the IPv6 address from that we listed based on your location configuration -5. Click **Apply**. - -## Debian - -### IPv4 -1. In the command line, type: `sudo vim /etc/resolv.conf` -2. Press the **i** key on your keyboard to edit the document -3. Replace the nameserver lines with: - * **172.64.36.1** - * **172.64.36.2** -4. Press the **ESC** key on your keyboard to save and exit vim. -5. Type `:wq`. - -### IPv6 -1. In the command line, type: `sudo vim /etc/resolv.conf` -2. Add the IPv6 address from that we listed based on your location configuration. -3. Press the **ESC** key on your keyboard to save and exit vim. -4. Type `:wq`. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/agentless/mac.md b/products/cloudflare-one/src/content/connections/connect-devices/agentless/mac.md deleted file mode 100644 index 6f491e48b38..00000000000 --- a/products/cloudflare-one/src/content/connections/connect-devices/agentless/mac.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -order: 1 -hidden: true ---- - -# Mac - -## IPv4 -1. Go to **System Preferences** > **Network**. -2. Click **Advanced**. -3. Select the **DNS** tab, and remove any IP addresses that may be already listed. -4. Add the following IP addresses: - * **172.64.36.1** - * **172.64.36.2** -5. Click **OK**. -6. Click **Apply**. - -## IPv6 - -1. On the [Teams dashboard](https://dash.teams.cloudflare.com), navigate to the **Locations** tab. -2. Expand your location by clicking on it. -3. Note the **IPv6 address**. -4. On your computer, go to **System Preferences** > **Network**. -5. Click **Advanced**. -6. Select the **DNS** tab, and remove any IP addresses that may already be listed. -7. Add the **IPv6 address** you got from your location card. -8. Click **OK**. -9. Click **Apply**. \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-devices/agentless/native-os.md b/products/cloudflare-one/src/content/connections/connect-devices/agentless/native-os.md index fa63ade5f28..f1e9d6cbe17 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/agentless/native-os.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/agentless/native-os.md @@ -1,9 +1,21 @@ --- order: 3 +pcx-content-type: how-to --- # Native OS + + ## Linux ### Ubuntu @@ -92,4 +104,4 @@ Remove any IP addresses that may already be listed. 7. Click **Properties**. 8. Click **Use The Following DNS Server Addresses**. 9. Add the IPv6 address that we listed based on your location configuration -10. Click **OK**. \ No newline at end of file +10. Click **OK**. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/agentless/router.md b/products/cloudflare-one/src/content/connections/connect-devices/agentless/router.md index 8fb0a890160..5529c979bd8 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/agentless/router.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/agentless/router.md @@ -1,5 +1,6 @@ --- order: 4 +pcx-content-type: how-to --- # Router setup diff --git a/products/cloudflare-one/src/content/connections/connect-devices/agentless/windows.md b/products/cloudflare-one/src/content/connections/connect-devices/agentless/windows.md deleted file mode 100644 index 49909e1fd65..00000000000 --- a/products/cloudflare-one/src/content/connections/connect-devices/agentless/windows.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -order: 0 -hidden: true ---- - -# Windows - -## IPv4 -1. Click on **Start** menu, then click on Control Panel. -2. Click on **Network and Internet**. -3. Click on **Change Adapter Settings**. -4. Right click on the Wi-Fi network you are connected to. -5. Click **Properties**. -6. Select **Internet Protocol Version 4**. -7. Click **Properties**. -8. Remove any IP addresses that may be already listed and add the following IP addresses in their place: - * **172.64.36.1** - * **172.64.36.2** -9. Click **OK**. - -## IPv6 -1. Click on **Start** > **Control Panel**. -2. Click on **Network and Internet**. -3. Click on **Change Adapter Settings**. -4. Right click on the Wi-Fi network you are connected to. -5. Click **Properties**. -6. Select **Internet Protocol Version 6**. -7. Click **Properties**. -8. Click **Use The Following DNS Server Addresses**. -9. Add the IPv6 address that we listed based on your location configuration -10. Click **OK**. \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-devices/index.md b/products/cloudflare-one/src/content/connections/connect-devices/index.md index cfb30adc5ac..27b36056a6d 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/index.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/index.md @@ -1,5 +1,6 @@ --- order: 3 +pcx-content-type: navigation --- # Connect devices diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/control-proxy.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/control-proxy.md deleted file mode 100644 index 8cf72fc5b6e..00000000000 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/control-proxy.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -order: 0 ---- - -# Control proxy settings - -You can use the Cloudflare for Teams dashboard to control the proxy settings of your deployment. - -## Enable the proxy - -Once devices have enrolled in your account, via user action or administrator deployment, you must enable the proxy to begin inspecting HTTP traffic. - - - -Navigate to the **Settings** tab of the `Policies` page in the Gateway section of the Cloudflare for Teams dashboard. Toggle the `Proxy Settings` value to be "Enabled". - -![Enable Proxy](../../../static/documentation/connections/enable-proxy.png) \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/Windows-Teams.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/Windows-Teams.md deleted file mode 100644 index 24150177e30..00000000000 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/Windows-Teams.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -order: 2 ---- - -# Windows - - - -## Automated configuration (Intune, Command Prompt) - -The WARP Client for Windows allows for an automated install via tools like Intune, AD, or any script or management tool that can execute a `.msi` file. - -* Example command line to **install** the client: - - ``` - Cloudflare_WARP_Release-x64.msi /quiet ORGANIZATION="exampleorg" SERVICE_MODE="warp" ENABLE="true" GATEWAY_UNIQUE_ID="fmxk762nrj" SUPPORT_URL="http://support.example.com" - ``` - See the [deployment parameters](/connections/connect-devices/warp/deployment/parameters) for a description of each argument. - -* Example command line to **uninstall** the client: - - ``` - msiexec /x Cloudflare_WARP_Release-x64.msi /quiet - ``` - -### Example configuration with Microsoft Intune -Below are the minimum required steps to deploy Cloudflare WARP with Intune: - -1. Login to your Microsoft Intune account. -1. Navigate to **Apps** > **All Apps**. -1. Click **+Add**. -1. As **App type**, select *Line-of-business app* from the drop-down menu. -1. Click **Select**. -1. Click **Select app package file** and upload the ```Cloudflare_WARP_Release-x64.msi``` installer you downloaded previously. -1. Click **OK**. -1. In the **Name** field, we recommend entering the version number of the package being uploaded. -1. In the **Publisher** field, we recommend entering `Cloudflare, Inc`. -1. In the **Command-line arguments** field enter a valid set of command line arguments as describe above - - Example: `/quiet ORGANIZATION="exampleorg" SERVICE_MODE="warp" ENABLE="true" GATEWAY_UNIQUE_ID="fmxk762nrj" SUPPORT_URL="http://support.example.com"` -1. You don't need to fill other optional fields. Once you've entered all the necessary values, click **Next**. -1. Add the users or groups who require Cloudflare WARP. -1. Click **Next**. -1. Review your configuration. -1. Click **Create**. - -Intune is now configured to deploy the Cloudflare WARP Client. - -## Manual configuration - -If you plan to direct your users to manually download and configure the Cloudflare WARP Client application, they can do so in two ways, depending on your organization's Teams configuration: - -* If your organization uses Gateway DNS filtering, users will need to configure a [DoH subdomain](/glossary#doh-subdomain). -* If your organization uses [Zero Trust policies](/policies/zero-trust) to control device registration, or Gateway L7 Filtering, users will need to [configure a Cloudflare for Teams device registration](#manually-configure-a-cloudflare-for-teams-device-registration). - -### Manually configure a Gateway DoH subdomain -If your organization uses Gateway DNS filtering, you will need to instruct your users to configure the Gateway [DoH subdomain](/glossary#doh-subdomain) field. - -Then ask your users to complete the following steps: - -1. Click on the Cloudflare Logo in the System Tray. -1. Select the gear icon. -1. Next, click **Preferences**. -1. Select the **Connection** tab. -1. Enter a value for *Gateway DoH subdomain* (example: `fmxk762nrj`). -1. Click **Save**. - -![Preferences UI in the connection tab with the Change button circled](../../../../static/documentation/connections/windows_GatewayButton.png) - -### Manually configure a Cloudflare for Teams device registration -If your organization uses [Zero Trust policies](/policies/zero-trust) to control device registration, or is using the Gateway L7 Filtering and user or device-specific [Secure Web Gateway policies](/policies/filtering), your users will need to login to Cloudflare for Teams by following these instructions: - -1. Click on the Cloudflare Logo in the System Tray. -1. Select the gear icon. -1. Next, click **Preferences**. -1. Select the **Account** tab. -1. Click **Login with Cloudflare for Teams**. -1. Enter your [team name](/glossary#team-name). -1. Complete the authentication steps required by your organization. - -![Preferences UI in the Account tab with the Login to Teams button circled](../../../../static/documentation/connections/windows_TeamsButton.png) diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/android-Teams.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/android-Teams.md deleted file mode 100644 index 1bdf5ef925a..00000000000 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/android-Teams.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -order: 5 ---- - -# Android - - - -## Automated configuration - -The Cloudflare WARP Android client (known in the Google Play store as [1.1.1.1: Faster & Safer Internet](https://play.google.com/store/apps/details?id=com.cloudflare.onedotonedotonedotone&hl=en&gl=US)) allows for an automated install via tools like Intune, Google Endpoint Manager, and others. - -Accepted configuration values are as follows: - -```xml -organization -yourorganization -enable - -gateway_unique_id -your_gateway_doh_subdomain -service_mode -warp -support_url -https://support.example.com -``` -See the [deployment parameters](/connections/connect-devices/warp/deployment/parameters) for a description of each value. - -Cloudflare WARP (known in the Google Play store as [1.1.1.1: Faster & Safer Internet](https://play.google.com/store/apps/details?id=com.cloudflare.onedotonedotonedotone&hl=en&gl=US)) is deployed - -## Manual configuration - -If you plan to direct your users to manually download and configure the Cloudflare WARP Client application, they can do so in two ways, depending on your organization's Teams configuration: -* If your organization uses Gateway DNS filtering, users will need to manually configure a [DoH subdomain](/glossary#doh-subdomain). -* If your organization uses [Zero Trust policies](/policies/zero-trust) to control device registration, or Gateway L7 Filtering, users will need to [configure a Cloudflare for Teams device registration](#manually-configure-a-cloudflare-for-teams-device-registration). - -### Manually configure a Gateway DoH subdomain -If your organization uses Gateway DNS filtering, you will need to instruct your users to configure the Gateway [DoH subdomain](/glossary#doh-subdomain) field. - -Then ask your users to complete the following steps: - -1. Fine the **1.1.1.1** application and tap to launch. -1. Tap the **menu bar icon** (3 lines) in the upper right. -1. Tap **Advanced**. -1. Tap **Connection options**. -1. Tap **DNS settings**. -1. Enter a DoH Sub Domain and tap **Back** until you are back at the home screen. - -### Manually configure a Cloudflare for Teams device registration -If your organization uses [Zero Trust policies](/policies/zero-trust) to control device registration, or is using the Gateway L7 Filtering and user or device specific Gateway policies, your users will need to login to Cloudflare for Teams by following these instructions: - -1. Fine the **1.1.1.1** application and tap to launch. -1. Tap the **menu bar icon** (3 lines) in the upper right. -1. Tap **Account**. -1. Tap **Login with Cloudflare for Teams**. -1. Enter your [team name](/glossary#team-name). -1. Complete authentication steps required by your organization. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/firewall.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/firewall.md index 464f6380c0d..bd2f9cf71c2 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/firewall.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/firewall.md @@ -1,24 +1,19 @@ --- order: 10 +pcx-content-type: reference --- + # WARP with Firewall + If your organization uses a firewall or other policies to restrict Internet traffic, you may need to make a few changes to allow WARP to connect. ## WARP Ingress IP These are the IP addresses that the WARP client will connect to. All traffic from your device to the Cloudflare edge will go through these IP addresses. -- IPv4 Range: 162.159.192.0/24 -- IPv6 Range: 2606:4700:d0::/48 - - - +- IPv4 Range: 162.159.193.0/24 +- IPv6 Range: 2606:4700:100::/48 ## UDP Ports -WARP utilizes UDP for all of its communications. UDP Port required for WARP: UDP 2408. +WARP utilizes UDP for all of its communications. By default, the UDP Port required for WARP is: UDP 2408. WARP can fallback to: UDP 500, UDP 1701, or UDP 4500. ## Creating firewall rules If your organization does not currently allow Inbound/Outbound communication over the IP addresses and ports described above you must manually add an exception. The rule at a minimum needs to be scoped to the following process based on your platform: diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/iOS-Teams.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/iOS-Teams.md deleted file mode 100644 index be0533b376d..00000000000 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/iOS-Teams.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -order: 4 ---- - -# iOS - - - -## Automated configuration - -The Cloudflare WARP iOS client, known in the App Store as [1.1.1.1: Faster Internet](https://apps.apple.com/us/app/1-1-1-1-faster-internet/id1423538627), allows for an automated install via tools like Jamf, Intune, or SimpleMDM. - -To proceed with the installation, here is an example of the XML code you will need, with the accepted arguments: - -```xml - - organization - yourorganization - auto_connect - 1 - switch_locked - - service_mode - warp - support_url - https://support.example.com - -``` -For a description of each argument and what it means, see [deployment parameters](/connections/connect-devices/warp/deployment/parameters). - -### Example Configuration in Jamf -Follow these steps to deploy the WARP Client via Jamf: - -#### Upload the package -1. Login to your `jamfcloud.com` account. -1. Navigate to **Devices**. -1. Click the **Mobile Device Apps**. -1. Click **+ New**. -1. Select *App store app or apps purchased in volume*. -1. Click **Next**. -1. In the search box, enter: *1.1.1.1: Faster Internet*. -1. Click **Next**. -1. Click **Add** in the row for *1.1.1.1: Faster Internet by Cloudflare Inc.*. To verify it's the correct application, click on this [link](https://apps.apple.com/us/app/id1423538627). -1. Navigate to **Scope**. -1. Specify the devices in your organization that should receive the application. -1. Navigate to **App Configuration** and copypaste the XML from above. -1. Make sure you modify the default XML values to match your Cloudflare for Teams deployment. -1. Click **Save**. - -Jamf is now configured to deploy the Cloudflare WARP Client. - -## Manual Configuration - -If you plan to direct your users to manually download and configure the Cloudflare WARP Client application, they can do so in two ways, depending on your organization's Teams configuration: -* If your organization uses Gateway DNS filtering, users will need to configure a [DoH subdomain](/glossary#doh-subdomain). -* If your organization uses [Zero Trust policies](/policies/zero-trust) to control device registration, or Gateway L7 Filtering, users will need to [configure a Cloudflare for Teams device registration](#manually-configure-a-cloudflare-for-teams-device-registration). - -### Manually configure a Gateway DoH subdomain -If your organization uses Gateway DNS filtering, you will need to instruct your users to configure the Gateway [DoH subdomain](/glossary#doh-subdomain) field. - -Then ask your users to complete the following steps: - -1. Find the **1.1.1.1** application and tap to launch. -1. Tap the **menu bar icon** (3 lines) in the upper right corner. -1. Tap **Advanced**. -1. Tap **Connection options**. -1. Tap **DNS settings**. -1. Enter the DoH Sub Domain and tap **Back** until you are back at the home screen. - -### Manually configure a Cloudflare for Teams device registration -If your organization uses [Zero Trust policies](/policies/zero-trust) to control device registration, or is using the Gateway L7 Filtering and user or device specific [Secure Web Gateway policies](/policies/filtering), your users will need to login to Cloudflare for Teams by following these instructions: - -1. Find the **1.1.1.1** application and tap to launch. -1. Tap the **menu bar icon** (3 lines) in the upper right. -1. Tap **Account**. -1. Tap **Login with Cloudflare for Teams**. -1. Enter your [team name](/glossary#team-name). -1. Complete the authentication steps required by your organization. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/index.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/index.md index 5c5c1c53f44..51f38442dbb 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/index.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/index.md @@ -1,23 +1,15 @@ --- -order: 1 +order: 2 +pcx-content-type: how-to +title: Deploy WARP --- -# Deployment +# Deploy WARP to your organization -The Cloudflare WARP client can be deployed via a device management platform like JAMF or InTune or through end user self-enrollment. +Depending on how your organization is structured, you can deploy WARP in one of two ways: -To get started, you'll first need to create a **device enrollment policy** in your Teams dashboard. The device enrollment policy will determine who can enroll a device into your organization. To do so: +* [Manual deployment](/connections/connect-devices/warp/deployment/manual-deployment). If you are a small organization, asking your users to download the client themselves and type in the required settings is the ideal way to get started with WARP. -1. Make sure you've set up a [team domain](/glossary#team-domain). You can find your team domain under **Configuration > Authentication > Team domain**. +* [Managed deployment](/connections/connect-devices/warp/deployment/mdm-deployment). Bigger organizations with MDM tools like Intune or JAMF can deploy WARP to their entire fleet of devices from a single operation. -1. On your [Teams dashboard](https://dash.teams.cloudflare.com/), navigate to **My Team** > **Devices**. -1. Under **Device enrollment**, create a [device enrollment policy](/connections/connect-devices/warp/device-enrollment) to define who can connect a device to your organization. - -1. Once your device enrollment policy is set up, configure [Secure Web Gateway policies](/policies/filtering) for your organization. If you are configuring [HTTP policies](/policies/filtering/http-policies), make sure to deploy the [root certificate](/connections/connect-devices/warp/install-cloudflare-cert) to your devices. - -1. As a last step, verify your devices meet the WARP [system requirements](../download-warp) for installation. - -You're now ready to follow the deployment instructions for your devices. - - \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/macOS-Teams.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/macOS-Teams.md deleted file mode 100644 index f497064f6cb..00000000000 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/macOS-Teams.md +++ /dev/null @@ -1,203 +0,0 @@ ---- -order: 3 ---- - -# macOS - - - -## Automated configuration (Jamf, Intune, Script) - -The Cloudflare WARP macOS client allows for an automated install via tools like Jamf, Intune, Kandji, or JumpCloud or any script or management tool that can place a `com.cloudflare.warp.plist` file in `/Library/Managed Preferences` on a supported macOS device. Additionally this plist can be wrapped in a `.mobileconfig`. - -Here is an example plist file with the accepted arguments: - -```xml - - - - - organization - yourorganization - auto_connect - 1 - switch_locked - - service_mode - warp - support_url - https://support.example.com - - -``` - -Here is an example `.mobileconfig` file with the accepted arguments: -```xml - - - - -PayloadContent - -PayloadDisplayName -Cloudflare WARP -PayloadIdentifier -cloudflare_warp -PayloadOrganization -Cloudflare, Ltd. -PayloadRemovalDisallowed - -PayloadType -Configuration -PayloadUUID -F5046847-2B1C-4DA0-A872-F6E040B1B20E -PayloadVersion -1 - PayloadContent - - - PayloadDisplayName - Custom - PayloadIdentifier - com.cloudflare.warp - PayloadOrganization - Cloudflare Ltd. - PayloadType - com.apple.ManagedClient.preferences - PayloadUUID - C2575334-358E-4925-8B29-30B4348D31E3 - PayloadVersion - 1 - PayloadEnabled - - PayloadContent - - com.cloudflare.warp - - Forced - - - mcx_preference_settings - - organization - yourorganization - auto_connect - 1 - switch_locked - - service_mode - warp - support_url - https://support.example.com - - - - - - - - - - -``` - -For a description of each argument and what it means, see [deployment parameters](/connections/connect-devices/warp/deployment/parameters). - -[Click here](../../../../static/documentation/connections/com.cloudflare.warp.plist) to download this example plist. If you manually plan to download the plist file and place it in `/Library/Managed Preferences`, convert the plist into into binary format first. To do that: -1. Open a Terminal window. -2. Run the following command: - - ``` - % plutil -convert binary1 com.cloudflare.warp.plist - ``` - -[Click here](../../../../static/documentation/connections/CloudflareWARP.mobileconfig) to download this example `.mobileconfig`. Before doing so, you may need to run `uuidgen` from your macOS terminal. This will generate a value for `PayloadUUID`, which you can use to replace the default value used for `PayloadUUID` in the example above. - -### Example configuration in Jamf - -With Jamf, the WARP Client deployment is performed in three distinct steps: -1. Upload the WARP Client `pkg` file. -1. Create a policy that deploys the WARP Client `pkg` file. -1. Create a configuration profile with the settings you want pushed down. - -The following sections will walk you through each of these steps. - -#### Upload the package -1. Login to your `jamfcloud.com` account. -1. Navigate to **Computer**. -1. Click the **All Settings** (gear) in the upper right corner. -1. Click **Computer Management**. -1. Click **Packages**. -1. Select **New**. -1. Upload the `Cloudflare_WARP.pkg` file. - For *Display name*, we recommend entering the version number of the package being uploaded. -1. Click **Save** to complete the upload. - -#### Create the policy -1. Select **Computers** > **Policies** on the menu to your left. -1. Click **+ New**. -1. Enter a Display name such as "Cloudflare WARP Client". - For *Triggers*, our recommendation is to select *Startup*, *Login*, *Enrollment Complete* and *Recurring Check-in*, but you can select the value that works best for your organization. -1. Navigate to **Packages**. -1. Click **Configure**. -1. Click **Add** next to the package you previously uploaded. -1. Click **Save**. - -#### Add Configuration Profile -1. Navigate to **Configuration Profiles**. -1. Click **New**. -1. Enter a name for your new profile, such as *Cloudflare for Teams*. -1. Scroll down the options list and click on **Application & Custom Settings**. -1. Click **Configure**. -1. In *Preference Domain*, enter `com.cloudflare.warp`. -1. Upload a valid plist file. You can start with our example above and modify for your organization. -1. Click **Save**. -1. Navigate to **Scope** to configure which devices in your organization should receive this profile. -1. Click **Save**. - -Jamf is now configured to deploy the Cloudflare WARP Client. - -## Manual configuration - -If you plan to direct your users to manually download and configure the Cloudflare WARP Client application, they can do so in two ways, depending on your organization's Teams configuration: -* If your organization uses Gateway DNS filtering, users will need to configure a [DoH subdomain](/glossary#doh-subdomain)). -* If your organization uses [Zero Trust policies](/policies/zero-trust) to control device registration, or Gateway L7 Filtering, users will need to [configure a Cloudflare for Teams device registration](#manually-configure-a-cloudflare-for-teams-device-registration). - -### Manually configure a Gateway DoH subdomain -If your organization uses Gateway DNS filtering, you will need to instruct your users to configure the Gateway [DoH subdomain](/glossary#doh-subdomain) field. - -Then ask your users to complete the following steps: - -1. Click on the Cloudflare Logo in the Menu Bar. -1. Select the gear icon. -1. Navigate to **Preferences**. -1. Select the **Connect** tab. -1. Click **Change** next to *Gateway DoH Subdomain*, and enter your DoH Subdomain. - -![Preferences UI in the connection tab with the Change button circled](../../../../static/documentation/connections/macOS_GatewayButton.png) - -### Manually configure a Cloudflare for Teams device registration -If your organization uses [Zero Trust policies](/policies/zero-trust) to control device registration, or is using the Gateway L7 Filtering and user or device-specific [Secure Web Gateway policies](/policies/filtering), your users will need to login to Cloudflare for Teams by following these instructions: - -1. Click on the Cloudflare Logo in the Menu Bar. -2. Select the gear icon. -3. Navigate to **Preferences**. -4. Select the **Account** tab. -5. Click **Login with Cloudflare for Teams**. - - ![Preferences UI in the Account tab with the Login to Teams button circled](../../../../static/documentation/connections/macOS_TeamsButton.png) - -6. Enter your [team name](/glossary#team-name). -7. Complete the authentication steps required by your organization. - - diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/manual-deployment.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/manual-deployment.md new file mode 100644 index 00000000000..4adfb379beb --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/manual-deployment.md @@ -0,0 +1,30 @@ +--- +order: 0 +pcx-content-type: how-to +--- + +# Manual deployment + +If you plan to direct your users to manually download and configure the WARP client, users will need to connect the client to your organization's Cloudflare for Teams instance. + +## On desktop + +End users will need to log in to Cloudflare for Teams by following these instructions: + +1. Click on the Cloudflare logo in the menu bar. +1. Click the gear icon. +1. Navigate to **Preferences** > **Account**. +1. Click **Login with Cloudflare for Teams**. +1. Enter your [team name](/glossary#team-name). +1. Complete the authentication steps required by your organization. + +## On mobile devices + +End users will need to log in to Cloudflare for Teams by following these instructions: + +1. Find the 1.1.1.1 application and tap to launch it. +1. Tap the menu bar icon. +1. Tap **Account**. +1. Tap **Login with Cloudflare for Teams**. +1. Enter your [team name](/glossary#team-name). +1. Complete the authentication steps required by your organization. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/Windows-Teams.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/Windows-Teams.md new file mode 100644 index 00000000000..1cbda0ee618 --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/Windows-Teams.md @@ -0,0 +1,54 @@ +--- +order: 2 +pcx-content-type: how-to +--- + +# Windows + + + +The WARP Client for Windows allows for an automated install via tools like Intune, AD, or any script or management tool that can execute a `.msi` file. + +* Example command line to **install** the client: + + ``` + Cloudflare_WARP_Release-x64.msi /quiet ORGANIZATION="exampleorg" SERVICE_MODE="warp" GATEWAY_UNIQUE_ID="fmxk762nrj" SUPPORT_URL="http://support.example.com" + ``` + See the [deployment parameters](/connections/connect-devices/warp/deployment/mdm-deployment/parameters) for a description of each argument. + +* Example command line to **uninstall** the client: + + ``` + msiexec /x Cloudflare_WARP_Release-x64.msi /quiet + ``` + +### Example configuration with Microsoft Intune + +Below are the minimum required steps to deploy Cloudflare WARP with Intune: + +1. Login to your Microsoft Intune account. +1. Navigate to **Apps** > **All Apps**. +1. Click **+Add**. +1. As **App type**, select *Line-of-business app* from the drop-down menu. +1. Click **Select**. +1. Click **Select app package file** and upload the ```Cloudflare_WARP_Release-x64.msi``` installer you downloaded previously. +1. Click **OK**. +1. In the **Name** field, we recommend entering the version number of the package being uploaded. +1. In the **Publisher** field, we recommend entering `Cloudflare, Inc`. +1. In the **Command-line arguments** field enter a valid set of command line arguments as describe above + - Example: `/quiet ORGANIZATION="exampleorg" SERVICE_MODE="warp" GATEWAY_UNIQUE_ID="fmxk762nrj" SUPPORT_URL="http://support.example.com"` +1. You don't need to fill other optional fields. Once you've entered all the necessary values, click **Next**. +1. Add the users or groups who require Cloudflare WARP. +1. Click **Next**. +1. Review your configuration. +1. Click **Create**. + +Intune is now configured to deploy the Cloudflare WARP Client \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/android-Teams.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/android-Teams.md new file mode 100644 index 00000000000..c0fb9f58074 --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/android-Teams.md @@ -0,0 +1,34 @@ +--- +order: 5 +pcx-content-type: how-to +--- + +# Android + + + +The Cloudflare WARP Android client (known in the Google Play store as [1.1.1.1: Faster & Safer Internet](https://play.google.com/store/apps/details?id=com.cloudflare.onedotonedotonedotone&hl=en&gl=US)) allows for an automated install via tools like Intune, Google Endpoint Manager, and others. + +Accepted configuration values are as follows: + +```xml +organization +yourorganization +enable + +gateway_unique_id +your_gateway_doh_subdomain +service_mode +warp +support_url +https://support.example.com +``` +See the [deployment parameters](/connections/connect-devices/warp/deployment/mdm-deployment/parameters) for a description of each value. \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/iOS-Teams.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/iOS-Teams.md new file mode 100644 index 00000000000..70ab5f92049 --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/iOS-Teams.md @@ -0,0 +1,57 @@ +--- +order: 4 +pcx-content-type: how-to +--- + +# iOS + + + +The Cloudflare WARP iOS client, known in the App Store as [1.1.1.1: Faster Internet](https://apps.apple.com/us/app/1-1-1-1-faster-internet/id1423538627), allows for an automated install via tools like Jamf, Intune, or SimpleMDM. + +To proceed with the installation, here is an example of the XML code you will need, with the accepted arguments: + +```xml + + organization + yourorganization + auto_connect + 1 + switch_locked + + service_mode + warp + support_url + https://support.example.com + +``` +For a description of each argument and what it means, see [deployment parameters](/connections/connect-devices/warp/deployment/mdm-deployment/parameters). + +### Example Configuration in Jamf +Follow these steps to deploy the WARP Client via Jamf: + +#### Upload the package +1. Login to your `jamfcloud.com` account. +1. Navigate to **Devices**. +1. Click the **Mobile Device Apps**. +1. Click **+ New**. +1. Select *App store app or apps purchased in volume*. +1. Click **Next**. +1. In the search box, enter: *1.1.1.1: Faster Internet*. +1. Click **Next**. +1. Click **Add** in the row for *1.1.1.1: Faster Internet by Cloudflare Inc.*. To verify it's the correct application, click on this [link](https://apps.apple.com/us/app/id1423538627). +1. Navigate to **Scope**. +1. Specify the devices in your organization that should receive the application. +1. Navigate to **App Configuration** and copypaste the XML from above. +1. Make sure you modify the default XML values to match your Cloudflare for Teams deployment. +1. Click **Save**. + +Jamf is now configured to deploy the Cloudflare WARP client. \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/index.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/index.md new file mode 100644 index 00000000000..a97493aaa22 --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/index.md @@ -0,0 +1,28 @@ +--- +order: 1 +pcx-content-type: how-to +--- + +# Managed deployment + +Bigger organizations with MDM tools like Intune or JAMF can deploy WARP to their entire fleet of devices from a single operation. + +--- + +## Scripted deployment + +The WARP client for Windows allows for an automated install via any management tool that can execute an `.msi` file. + +* Example command line to **install** the client: + + ```txt + Cloudflare_WARP_Release-x64.msi /quiet ORGANIZATION="exampleorg" SERVICE_MODE="warp" GATEWAY_UNIQUE_ID="fmxk762nrj" SUPPORT_URL="http://support.example.com" + ``` + + Refer to the [deployment parameters](/connections/connect-devices/warp/deployment/mdm-deployment/parameters) for a description of each argument. + +* Example command line to **uninstall** the client: + + ```txt + msiexec /x Cloudflare_WARP_Release-x64.msi /quiet + ``` diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/intune.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/intune.md new file mode 100644 index 00000000000..080fe440d98 --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/intune.md @@ -0,0 +1,178 @@ +--- +order: 1 +hidden: true +--- + +# Intune + +## Windows + +1. Log in to your Microsoft Intune account. +1. Navigate to **Apps** > **All Apps**. +1. Click **+Add**. +1. In **App type**, select *Line-of-business app* from the drop-down menu. +1. Click **Select**. +1. Click **Select app package file** and upload the `Cloudflare_WARP_Release-x64.msi` installer you downloaded previously. +1. Click **OK**. +1. In the **Name** field, we recommend entering the version number of the package being uploaded. +1. In the **Publisher** field, we recommend entering `Cloudflare, Inc`. +1. In the **Command-line arguments** field, enter a valid set of command-line arguments as described above. + - Example: `/quiet ORGANIZATION="exampleorg" SERVICE_MODE="warp" GATEWAY_UNIQUE_ID="fmxk762nrj" SUPPORT_URL="http://support.example.com"` +1. You do not need to fill other optional fields. Once you have entered all the necessary values, click **Next**. +1. Add the users or groups who require Cloudflare WARP. +1. Click **Next**. +1. Review your configuration. +1. Click **Create**. + +Intune is now configured to deploy the WARP client. + +## iOS + +The WARP client, known in the App Store as [1.1.1.1: Faster Internet](https://apps.apple.com/us/app/1-1-1-1-faster-internet/id1423538627), allows for an automated install via Intune. + +To proceed with the installation, here is an example of the XML code you will need, with the accepted arguments: + +```xml + + organization + yourorganization + auto_connect + 1 + switch_locked + + service_mode + warp + support_url + https://support.example.com + +``` + +For a description of each argument and what it means, refer to the [deployment parameters](/connections/connect-devices/warp/deployment/mdm-deployment/parameters). + +## Android + +The WARP client, known in the Google Play store as [1.1.1.1: Faster & Safer Internet](https://play.google.com/store/apps/details?id=com.cloudflare.onedotonedotonedotone&hl=en&gl=US), allows for an automated install via Intune. + +To proceed with the installation, here is an example of the XML code you will need, with the accepted arguments: + +```xml +organization +yourorganization +enable + +gateway_unique_id +your_gateway_doh_subdomain +service_mode +warp +support_url +https://support.example.com +``` + +Refer to the [deployment parameters](/connections/connect-devices/warp/deployment/mdm-deployment/parameters) for a description of each value. + +## MacOS + +The Cloudflare WARP client allows for an automated install via tools like Jamf, Intune, Kandji, or JumpCloud or any script or management tool that can place a `com.cloudflare.warp.plist` file in `/Library/Managed Preferences` on a supported macOS device. Additionally, this `plist` can be wrapped in a `.mobileconfig`. + +Here is an example `plist` file with the accepted arguments: + +```xml + + + + + organization + yourorganization + auto_connect + 1 + switch_locked + + service_mode + warp + support_url + https://support.example.com + + +``` + +Here is an example `.mobileconfig` file with the accepted arguments: + +```xml + + + + + PayloadContent + + PayloadDisplayName + Cloudflare WARP + PayloadIdentifier + cloudflare_warp + PayloadOrganization + Cloudflare, Ltd. + PayloadRemovalDisallowed + + PayloadType + Configuration + PayloadUUID + F5046847-2B1C-4DA0-A872-F6E040B1B20E + PayloadVersion + 1 + PayloadContent + + + PayloadDisplayName + Custom + PayloadIdentifier + com.cloudflare.warp + PayloadOrganization + Cloudflare Ltd. + PayloadType + com.apple.ManagedClient.preferences + PayloadUUID + C2575334-358E-4925-8B29-30B4348D31E3 + PayloadVersion + 1 + PayloadEnabled + + PayloadContent + + com.cloudflare.warp + + Forced + + + mcx_preference_settings + + organization + yourorganization + auto_connect + 1 + switch_locked + + service_mode + warp + support_url + https://support.example.com + + + + + + + + + +``` + +For a description of each argument and what it means, see [deployment parameters](/connections/connect-devices/warp/deployment/mdm-deployment/parameters). + +[Click here to download](../../../../../static/documentation/connections/com.cloudflare.warp.plist) this example `plist`. If you plan to download the `plist` file and manually place it in `/Library/Managed Preferences`, convert the `plist` into binary format first. To do that: +1. Open a Terminal window. +2. Run the following command: + + ``` + % plutil -convert binary1 com.cloudflare.warp.plist + ``` + +[Click here to download](../../../../../static/documentation/connections/CloudflareWARP.mobileconfig) this example `.mobileconfig`. Before doing so, you may need to run `uuidgen` from your macOS terminal. This will generate a value for `PayloadUUID`, which you can use to replace the default value used for `PayloadUUID` in the example above. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/jamf.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/jamf.md new file mode 100644 index 00000000000..5a1b8c65fd1 --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/jamf.md @@ -0,0 +1,191 @@ +--- +order: 1 +hidden: true +--- + +# Jamf + +## MacOS + +The Cloudflare WARP client allows for an automated install via tools like Jamf, Intune, Kandji, or JumpCloud or any script or management tool that can place a `com.cloudflare.warp.plist` file in `/Library/Managed Preferences` on a supported macOS device. Additionally, this plist can be wrapped in a `.mobileconfig`. + +Here is an example plist file with the accepted arguments: + +```xml + + + + + organization + yourorganization + auto_connect + 1 + switch_locked + + service_mode + warp + support_url + https://support.example.com + + +``` + +Here is an example `.mobileconfig` file with the accepted arguments: + +```xml + + + + + PayloadContent + + PayloadDisplayName + Cloudflare WARP + PayloadIdentifier + cloudflare_warp + PayloadOrganization + Cloudflare, Ltd. + PayloadRemovalDisallowed + + PayloadType + Configuration + PayloadUUID + F5046847-2B1C-4DA0-A872-F6E040B1B20E + PayloadVersion + 1 + PayloadContent + + + PayloadDisplayName + Custom + PayloadIdentifier + com.cloudflare.warp + PayloadOrganization + Cloudflare Ltd. + PayloadType + com.apple.ManagedClient.preferences + PayloadUUID + C2575334-358E-4925-8B29-30B4348D31E3 + PayloadVersion + 1 + PayloadEnabled + + PayloadContent + + com.cloudflare.warp + + Forced + + + mcx_preference_settings + + organization + yourorganization + auto_connect + 1 + switch_locked + + service_mode + warp + support_url + https://support.example.com + + + + + + + + + + +``` + +For a description of each argument and what it means, see [deployment parameters](/connections/connect-devices/warp/deployment/mdm-deployment/parameters). + +[Click here to download](../../../../../static/documentation/connections/com.cloudflare.warp.plist) this example `plist`. If you manually plan to download the plist file and place it in `/Library/Managed Preferences`, convert the plist into into binary format first. To do that: +1. Open a Terminal window. +1. Run the following command: + + ```bash + % plutil -convert binary1 com.cloudflare.warp.plist + ``` + +[Click here to download](../../../../../static/documentation/connections/CloudflareWARP.mobileconfig) this example `.mobileconfig`. Before doing so, you may need to run `uuidgen` from your macOS terminal. This will generate a value for `PayloadUUID`, which you can use to replace the default value used for `PayloadUUID` in the example above. + +### Upload the package + +1. Log in to your `jamfcloud.com` account. +1. Navigate to **Computer**. +1. Click **All Settings** (gear) in the upper right corner. +1. Click **Computer Management**. +1. Click **Packages**. +1. Select **New**. +1. Upload the `Cloudflare_WARP.pkg` file. + For *Display name*, we recommend entering the version number of the package being uploaded. +1. Click **Save** to complete the upload. + +### Create the policy + +1. Select **Computers** > **Policies** on the menu on the left side. +1. Click **+ New**. +1. Enter a Display name such as `Cloudflare WARP Client`. + For *Triggers*, our recommendation is to select *Startup*, *Login*, *Enrollment Complete* and *Recurring Check-in*, but you can select the value that works best for your organization. +1. Navigate to **Packages**. +1. Click **Configure**. +1. Click **Add** next to the package you previously uploaded. +1. Click **Save**. + +### Add a Configuration Profile + +1. Navigate to **Configuration Profiles**. +1. Click **New**. +1. Enter a name for your new profile, such as *Cloudflare for Teams*. +1. Scroll through the options list and click on **Application & Custom Settings**. +1. Click **Configure**. +1. In *Preference Domain*, enter `com.cloudflare.warp`. +1. Upload a valid plist file. You can start with our example above and modify it for your organization. +1. Click **Save**. +1. Navigate to **Scope** to configure which devices in your organization will receive this profile. +1. Click **Save**. + +Jamf is now configured to deploy the Cloudflare WARP client. + +## iOS + +The WARP client, known in the App Store as [1.1.1.1: Faster Internet](https://apps.apple.com/us/app/1-1-1-1-faster-internet/id1423538627), allows for an automated install via Jamf. + +To proceed with the installation, here is an example of the XML code you will need, with the accepted arguments: + +```xml + + organization + yourorganization + auto_connect + 1 + switch_locked + + service_mode + warp + support_url + https://support.example.com + +``` +For a description of each argument and what it means, see [deployment parameters](/connections/connect-devices/warp/deployment/mdm-deployment/parameters). + +1. Log in to your `jamfcloud.com` account. +1. Navigate to **Devices**. +1. Click **Mobile Device Apps**. +1. Click **+ New**. +1. Select *App store app or apps purchased in volume*. +1. Click **Next**. +1. In the search box, enter: `1.1.1.1: Faster Internet`. +1. Click **Next**. +1. Click **Add** in the row for *1.1.1.1: Faster Internet by Cloudflare Inc.*. To verify that it is the correct application, [click on this App Store link](https://apps.apple.com/us/app/id1423538627). +1. Navigate to **Scope**. +1. Specify the devices in your organization that will receive the application. +1. Navigate to **App Configuration** and copy/paste the XML from above. +1. Make sure you modify the default XML values to match your Cloudflare for Teams deployment. +1. Click **Save**. + +Jamf is now configured to deploy the WARP client. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/jumpcloud.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/jumpcloud.md new file mode 100644 index 00000000000..1f14bb3da5a --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/jumpcloud.md @@ -0,0 +1,65 @@ +--- +order: 1 +hidden: true +--- + +# JumpCloud + +## Windows + +1. Log in to the [JumpCloud Admin Portal](https://console.jumpcloud.com). +1. Navigate to **Device Management** > **Software Management**. +1. Select the *Windows* tab, then click (+). + + ![JumpCloud Software Management for Windows](../../../../../static/documentation/connections/jumpcloud.png) + +1. Enter a unique display name in the *Software Name* field. +1. Enter `warp` into the *Package ID* field. +1. Select **Install this software**. +1. (Optional) Select *Keep software package up to date* to automatically update this app as updates become available. +1. (Optional) Select *Allow end users to delay updates for up to one week* to avoid updates during a busy time. +1. Click **save**. + +### Deploy the client to a single MDM-managed device + +1. Log in to the [JumpCloud Admin Portal](https://console.jumpcloud.com). +1. Navigate to **Device Management** > **Software Management**. +1. Select the *Windows* tab and select the app you want to deploy. +1. Select the *Devices* tab. +1. Select the devices where you want to deploy the app. +1. Click **save**. +1. Click **save** again. + +### Deploy the client to an MDM-managed device group + +1. Log in to the [JumpCloud Admin Portal](https://console.jumpcloud.com). +1. Navigate to **Device Management** > **Software Management**. +1. Select the *Windows* tab and select the app you want to deploy. +1. Select the *Device Groups* tab. +1. Select the groups that you want to deploy the app to. +1. Click **save**. +1. Click **save** again. + +## Mac + +1. Log in to the [JumpCloud Admin Portal](https://console.jumpcloud.com). +1. Navigate to **Device Management** > **Software Management**. +1. Select the *Apple* tab, then click (+). + + ![JumpCloud Software Management for Mac](../../../../../static/documentation/connections/jumpcloud.png) + +1. On the *Details* tab, enter a unique display name in **Software Description**. +1. Add the app's URL location to **Software Package URL**. + +### Deploy the client to a single MDM-managed device + +1. Select the *Devices* tab. +1. Select the devices where this app will be deployed. To select all devices, select the checkbox next to **Type**. +1. Click **save** to install the client. +Verify that Cloudflare was installed by selecting the app and selecting the Status tab. + +### Deploy the client to an MDM-managed device group + +1. Select the *Device Groups* tab. +1. Select the groups where this app will be deployed. To select all device groups, select the checkbox next to **Type**. +1. Click **save** to install the client. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/macOS-Teams.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/macOS-Teams.md new file mode 100644 index 00000000000..e5dad2fc4a3 --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/macOS-Teams.md @@ -0,0 +1,167 @@ +--- +order: 3 +pcx-content-type: how-to +--- + +# macOS + + + +The Cloudflare WARP macOS client allows for an automated install via tools like Jamf, Intune, Kandji, or JumpCloud or any script or management tool that can place a `com.cloudflare.warp.plist` file in `/Library/Managed Preferences` on a supported macOS device. Additionally this plist can be wrapped in a `.mobileconfig`. + +Here is an example plist file with the accepted arguments: + +```xml + + + + + organization + yourorganization + auto_connect + 1 + switch_locked + + service_mode + warp + support_url + https://support.example.com + + +``` + +Here is an example `.mobileconfig` file with the accepted arguments: +```xml + + + + +PayloadContent + +PayloadDisplayName +Cloudflare WARP +PayloadIdentifier +cloudflare_warp +PayloadOrganization +Cloudflare, Ltd. +PayloadRemovalDisallowed + +PayloadType +Configuration +PayloadUUID +F5046847-2B1C-4DA0-A872-F6E040B1B20E +PayloadVersion +1 + PayloadContent + + + PayloadDisplayName + Custom + PayloadIdentifier + com.cloudflare.warp + PayloadOrganization + Cloudflare Ltd. + PayloadType + com.apple.ManagedClient.preferences + PayloadUUID + C2575334-358E-4925-8B29-30B4348D31E3 + PayloadVersion + 1 + PayloadEnabled + + PayloadContent + + com.cloudflare.warp + + Forced + + + mcx_preference_settings + + organization + yourorganization + auto_connect + 1 + switch_locked + + service_mode + warp + support_url + https://support.example.com + + + + + + + + + + +``` + +For a description of each argument and what it means, see [deployment parameters](/connections/connect-devices/warp/deployment/mdm-deployment/parameters). + +[Click here to download](../../../../../static/documentation/connections/com.cloudflare.warp.plist) this example `plist`. If you plan to download the `plist` file and place it manually in `/Library/Managed Preferences`, convert the `plist` into into binary format first. To do that: + +1. Open a Terminal window. +2. Run the following command: + + ``` + % plutil -convert binary1 com.cloudflare.warp.plist + ``` + +[Click here to download](../../../../../static/documentation/connections/CloudflareWARP.mobileconfig) this example `.mobileconfig`. Before doing so, you may need to run `uuidgen` from your macOS Terminal. This will generate a value for `PayloadUUID`, which you can use to replace the default value used for `PayloadUUID` in the example above. + +### Example configuration in Jamf + +With Jamf, the WARP Client deployment is performed in three distinct steps: +1. Upload the WARP Client `pkg` file. +1. Create a policy that deploys the WARP Client `pkg` file. +1. Create a configuration profile with the settings you want pushed down. + +The following sections will walk you through each of these steps. + +#### Upload the package +1. Login to your `jamfcloud.com` account. +1. Navigate to **Computer**. +1. Click the **All Settings** (gear) in the upper right corner. +1. Click **Computer Management**. +1. Click **Packages**. +1. Select **New**. +1. Upload the `Cloudflare_WARP.pkg` file. + For *Display name*, we recommend entering the version number of the package being uploaded. +1. Click **Save** to complete the upload. + +#### Create the policy +1. Select **Computers** > **Policies** on the menu to your left. +1. Click **+ New**. +1. Enter a Display name such as "Cloudflare WARP Client". + For *Triggers*, our recommendation is to select *Startup*, *Login*, *Enrollment Complete* and *Recurring Check-in*, but you can select the value that works best for your organization. +1. Navigate to **Packages**. +1. Click **Configure**. +1. Click **Add** next to the package you previously uploaded. +1. Click **Save**. + +#### Add Configuration Profile +1. Navigate to **Configuration Profiles**. +1. Click **New**. +1. Enter a name for your new profile, such as *Cloudflare for Teams*. +1. Scroll down the options list and click on **Application & Custom Settings**. +1. Click **Configure**. +1. In *Preference Domain*, enter `com.cloudflare.warp`. +1. Upload a valid plist file. You can start with our example above and modify for your organization. +1. Click **Save**. +1. Navigate to **Scope** to configure which devices in your organization should receive this profile. +1. Click **Save**. + +Jamf is now configured to deploy the Cloudflare WARP client. + diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/parameters.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/parameters.md new file mode 100644 index 00000000000..69a29fcee8f --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/mdm-deployment/parameters.md @@ -0,0 +1,148 @@ +--- +order: 0 +pcx-content-type: reference +--- + +# Parameters + +Each client supports the following set of parameters as part of their deployment, regardless of the deployment mechanism. + +## Required for full Cloudflare One features + +For the vast majority of Cloudflare for Teams features to work, you need to specify a team name. Examples of Teams features depending on the team name are [HTTP policies](/policies/filtering/http-policies), [Browser Isolation](/connections/connect-browsers), and [device posture](/identity/devices). + +### `organization` + +| Field | Value Type | +| ----- | -------- | +| `organization` | string | + +**Description.** Instructs the client to register device with your organization. Registration requires authentication via an [IDP](/identity/idp-integration) or [Service Auth](/identity/service-auth). + +**Value:** Your [team name](/glossary#team-name). + +## Required field for DNS only policy enforcemet +This field is only required to enforce DNS policies when deploying the client in DoH-only mode. + +### `gateway_unique_id` + +| Field | Value Type | +| ----- | -------- | +| `gateway_unique_id` | string | + +**Description.** Instructs the client to direct all DNS queries to a specific policy location. This value is only necessary if deploying without a team name *or* in an organization with multiple policy locations. + +**Value:** Your [DoH subdomain](/glossary#doh-subdomain). + +## Optional fields + +### `service_mode` + +| Field | Value Type | +| ----- | -------- | +| `service_mode` | string | + +**Description.** Allows you to choose the opertional mode of the client. + +**Value:** +- `1dot1` Gateway enforcement of DNS policies only through [DoH](/glossary#doh). All other traffic is handled by your devices default mechanisms +- `warp` [default value] All traffic sent through [Cloudflare Gateway](/glossary#cloudflare-gateway) via our encrypted tunnel. This mode is required for features such as HTTP policies, Browser Isolation, identity-based rules, or device posture. + +### `onboarding` + +| Field | Value Type | +| ----- | -------- | +| `onboarding` | boolean | + +**Description.** Controls the visibility of the onboarding screens that ask the user to review the privacy policy during an application's first launch. + +**Value:** +- `false` Screens hidden. +- `true` [default value] Screen visible. + +### `switch_locked` + +| Field | Value Type | +| ----- | -------- | +| `switch_locked` | boolean | + +**Description.** Allows the user to control the connected state of the application (main toggle switch). + +**Value:** +- `false` [default value] The user is able to turn switch on/off at their discretion. When the switch is off, the user will not have the ability to reach sites protected by Access that leverage certain device posture checks. +- `true` The user is prevented from turning off the switch. + +On new deployments, you must also include the `auto_connect` parameter with at least a value of 0. This will prevent clients from being deployed in the off state without a way for users to manually enable them. + + + + +### `auto_connect` + +| Field | Value Type | +| ----- | -------- | +| `auto_connect` | integer | + +**Description.** If switch has been turned off by user the client will automatically turn itself back on after the specified number of minutes. We recommend keeping this set to a very low value, usually just enough time for a user to login to hotel or airport wifi. + +**Value:** +- `0` Allow the switch to stay in the off position indefinitely until the user turns it back on. +- `1-1440` Turn switch back on automatically after the specified number of minutes. + + + +### `support_url` + +| Field | Value Type | +| ----- | -------- | +| `support_url` | string | + +**Description.** When the WARP client is deployed via MDM, the in-app Send Feedback button is disabled by default. This parameter allows you to re-enable the button and direct it towards your organization. + +**Value:** +- `https://support.example.com` Use an https:// link to open your companies internal help site. +- `mailto:yoursupport@example.com` Use a mailto: link to open your default mail client. + +## Authentication with service tokens + + + +Instead of requiring users to authenticate with their credentials, you can deploy the WARP client with a pre-generated [Service Token](/identity/service-auth/service-tokens). + +Both a `auth_client_id` and `auth_client_secret` are required when using this authentication method. + + +### `auth_client_id` + +| Field | Value Type | +| ----- | -------- | +| `auth_client_id` | string | + +**Description.** The automatically genereated ID when you created your [Service Token](/identity/service-auth/service-tokens). + +**Value:** `Client ID` from your service token. + +### `auth_client_secret` + +| Field | Value Type | +| ----- | -------- | +| `auth_client_secret` | string | + +**Description.** The automatically genereated secret when you created your [Service Token](/identity/service-auth/service-tokens). + +**Value:** `Client Secret` from your service token. + +## Frequently Asked Questions + +* **What happens if I don't supply a Gateway DoH subdomain?** +If you specify an `organization` we will automatically use the default location specified in Gateway. + +* **How do I obtain logs in the event of an issue with client?** +The macOS and Windows clients installations each contain an application in their installed folders called warp-diag that can be used to obtain logs. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/parameters.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/parameters.md deleted file mode 100644 index 01ef284eb34..00000000000 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/deployment/parameters.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -order: 1 ---- - -# Parameters - -Each client supports the following set of parameters as part of their deployment, regardless of the deployment mechanism. - -## Required for full Cloudflare One features -For the vast majority of Cloudflare for Teams features to work, you need to specify a team name. Examples of Teams features depending on the team name are [HTTP policies](/policies/filtering/http-policies), [Browser Isolation](/connections/connect-browsers), and [device posture](/identity/devices). - -### `organization` - -| Field | Value Type | -| ----- | -------- | -| `organization` | string | - -**Description.** Instructs the client to register device with your organization. Registration requires authentication via an [IDP](/identity/idp-integration) or [Service Auth](/identity/service-auth). - -**Value:** Your [team name](/glossary#team-name). - -## Required field for DNS only policy enforcemet -This field is only required to enforce DNS policies when deploying the client in DoH-only mode. - -### `gateway_unique_id` - -| Field | Value Type | -| ----- | -------- | -| `gateway_unique_id` | string | - -**Description.** Instructs the client to direct all DNS queries to a specific policy location. This value is only necessary if deploying without a team name *or* in an organization with multiple policy locations. - -**Value:** Your [DoH subdomain](/glossary#doh-subdomain). - -## Optional fields - -### `service_mode` - -| Field | Value Type | -| ----- | -------- | -| `service_mode` | string | - -**Description.** Allows you to choose the opertional mode of the client. - -**Value:** -- `1dot1` Gateway enforcement of DNS policies only through [DoH](/glossary#doh). All other traffic is handled by your devices default mechanisms -- `warp` [default value] All traffic sent through [Cloudflare Gateway](/glossary#cloudflare-gateway) via our encrypted tunnel. This mode is required for features such as HTTP policies, Browser Isolation, identity-based rules, or device posture. - -### `onboarding` - -| Field | Value Type | -| ----- | -------- | -| `onboarding` | boolean | - -**Description.** Controls the visibility of the onboarding screens that ask the user to review the privacy policy during an application's first launch. - -**Value:** -- `false` Screens hidden. -- `true` [default value] Screen visible. - -### `switch_locked` - -| Field | Value Type | -| ----- | -------- | -| `switch_locked` | boolean | - -**Description.** Allows the user to control the connected state of the application (main toggle switch). - -**Value:** -- `false` [default value] The user is able to turn switch on/off at their discretion. When the switch is off, the user will not have the ability to reach sites protected by Access that leverage certain device posture checks. -- `true` The user is prevented from turning off the switch. - -**Warning** - - - - - -### `auto_connect` - -| Field | Value Type | -| ----- | -------- | -| `auto_connect` | integer | - -**Description.** If switch has been turned off by user the client will automatically turn itself back on after the specified number of minutes. We recommend keeping this set to a very low value, usually just enough time for a user to login to hotel or airport wifi. - -**Value:** -- `0` Allow the switch to stay in the off position indefinitly until the user turns it back on. -- `1-1440` Turn switch back on automatically after the specified number of minutes. - - - -### `support_url` - -| Field | Value Type | -| ----- | -------- | -| `support_url` | string | - -**Description.** When the WARP client is deployed via MDM, the in-app Send Feedback button is disabled by default. This parameter allows you to re-enable the button and direct it towards your organization. - -**Value:** -- `https://support.example.com` Use an https:// link to open your companies internal help site. -- `mailto://yoursupport@example.com` Use a mailto:// link to open your default mail client. - -## Frequently Asked Questions - -* **What happens if I don't supply a Gateway DoH subdomain?** -If you specify an `organization` we will automatically use the default location specified in Gateway. - -* **How do I obtain logs in the event of an issue with client?** -The macOS and Windows clients installations each contain an application in their installed folders called warp-diag that can be used to obtain logs. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/device-enrollment.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/device-enrollment.md deleted file mode 100644 index 6a7bc1f57c9..00000000000 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/device-enrollment.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -order: 3 ---- - -# Device enrollment - -## Build an enrollment policy - - - -Cloudflare for Teams allows you to establish which users in your organization can enroll new devices or revoke access to connected devices. To do that, you can create a **device enrollment rule** on the Teams dashboard. - -1. On the [Teams dashboard](https://dash.teams.cloudflare.com), navigate to **My Team > Devices**. - -2. Click **Device enrollment** on the top-right corner. - -3. In the rule builder, configure a rule to define who can enroll or revoke devices. - - In this example, only users with `cloudflare.com` email addresses who successfully authenticate during device enrollment through the WARP client will be able to enroll in the organization. This rule prevents outsider users from sending traffic through your account and will give your organization the ability to capture user profile logs and apply profile-specific rules. - -![Enroll Rule](../../../static/secure-web-gateway/secure-dns-devices/enroll-rule.png) - -4. Click **Save**. - -## Enroll devices - -End users can now download WARP (or have it made available via MDM) and enroll their device. - -Once installed, click the gear icon. - -![WARP](../../../static/secure-web-gateway/secure-dns-devices/warp.png) - -Under the **Account** tab, click **Login with Cloudflare for Teams**. - -![Account View](../../../static/secure-web-gateway/secure-dns-devices/account-view.png) - -The user must input your Cloudflare for Teams org name. You can find your team's name under the **Authentication** tab in the **Access** section of the sidebar. - -![Org Name](../../../static/secure-web-gateway/secure-dns-devices/org-name.png) - -The user will be prompted to login with the identity provider configured in Cloudflare Access. Once authenticated, the client will update to *Teams mode*. You can click the gear to toggle between DNS filtering or full proxy. - -![Confirm WARP](../../../static/secure-web-gateway/block-uploads/with-warp.png) \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/download-warp.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/download-warp.md index ffaedb908ac..7bec8e9f1fc 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/download-warp.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/download-warp.md @@ -1,9 +1,14 @@ --- -order: 4 +order: 1 +pcx-content-type: reference --- # Download WARP +You can download the WARP client from the Teams Dashboard. To do that, navigate to **Settings** > **Devices** and scroll down to **Download the WARP client**. + +Alternatively, download the client from one of the following links after checking requirements: + ## Windows @@ -30,7 +35,9 @@ order: 4
-__[Download Cloudflare_WARP_Release-x64.msi](https://www.cloudflarewarp.com/Cloudflare_WARP_Release-x64.msi)__ +__[Windows Release Builds](https://install.appcenter.ms/orgs/cloudflare/apps/1.1.1.1-windows-1/distribution_groups/release)__ + +__[Windows Beta Builds](https://install.appcenter.ms/orgs/cloudflare/apps/1.1.1.1-windows/distribution_groups/beta)__ ## macOS @@ -58,7 +65,39 @@ __[Download Cloudflare_WARP_Release-x64.msi](https://www.cloudflarewarp.com/Clou
-__[Download Cloudflare_WARP.zip](https://www.cloudflarewarp.com/Cloudflare_WARP.zip)__ +__[macOS Release Builds](https://install.appcenter.ms/orgs/cloudflare/apps/1.1.1.1-macos-1/distribution_groups/release)__ + +__[macOS Beta Builds](https://install.appcenter.ms/orgs/cloudflare/apps/1.1.1.1-macos/distribution_groups/beta)__ + +## Linux + + + + + + + + + + + + + + + + + + + + + + + +
OS VerCentOS 8, RHEL, Ubuntu, Debian
OS Type64bit only
HD Space75MB
Memory35MB
Network TypesWIFI or LAN
+ +__[Package Download](https://pkg.cloudflareclient.com/packages/cloudflare-warp)__ + +__[APT/YUM Repository Setup](https://pkg.cloudflareclient.com/install)__ ## iOS diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/exclude-traffic/index.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/exclude-traffic/index.md index e0d3f05ddeb..5b418eccc4d 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/exclude-traffic/index.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/exclude-traffic/index.md @@ -1,20 +1,15 @@ --- -order: 4 +order: 14 +pcx-content-type: concept --- # Exclude network traffic from WARP - - -When the WARP Client is deployed, all DNS requests and/or network traffic on the device are processed by Cloudflare Gateway by default. However, under certain circumstances, you may need to exclude DNS requests and/or network traffic from being processed by Gateway. +When the WARP client is deployed, all DNS requests and/or network traffic on the device are processed by Cloudflare Gateway by default. However, under certain circumstances, you may need to exclude DNS requests and/or network traffic from being processed by Gateway. To do that, there are two settings you can use depending on your needs: -* **Use [Local Domain Fallback](/connections/connect-devices/warp/exclude-traffic/local-domains)** to instruct the WARP Client to ignore DNS requests to a given list of domains. These DNS requests will be passed back to other DNS servers configured on existing network interfaces on the device. +* **Use [Local Domain Fallback](/connections/connect-devices/warp/exclude-traffic/local-domains)** to instruct the WARP client to ignore DNS requests to a given list of domains. These DNS requests will be passed back to other DNS servers configured on existing network interfaces on the device. This is useful when you have defined private hostnames that wouldn’t otherwise resolve on the public internet. @@ -25,13 +20,13 @@ DNS requests to domain names entered here will not be encrypted, managed or moni -* **Use the [Split Tunnels](/connections/connect-devices/warp/exclude-traffic/split-tunnels) mode** to instruct the WARP client to ignore traffic to a specified set of IP addresses. Any traffic that is destined to an IP address defined in the split tunnel configuration will be ignored by the WARP client and handled by the local machine. +* **Use the [Split Tunnels](/connections/connect-devices/warp/exclude-traffic/split-tunnels) mode** to instruct the WARP client to ignore traffic to a specified set of IP addresses or hostnames. Any traffic that is destined to an IP address or hostname defined in the split tunnel configuration will be ignored by the WARP client and handled by the local machine. This is useful when you want to run another VPN alongside WARP or when you need traffic to flow over the open Internet. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/exclude-traffic/local-domains.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/exclude-traffic/local-domains.md index b172be0a6c7..89fb5440f05 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/exclude-traffic/local-domains.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/exclude-traffic/local-domains.md @@ -1,43 +1,37 @@ --- order: 5 +pcx-content-type: how-to --- # Local Domain Fallback - - -By default, Cloudflare for Teams excludes common top level domains used for local resolution from being sent to the Cloudflare proxy. Excluded domains are listed on the Teams dashboard under **Gateway** > **Policies** > **Settings** > **Local Domains - WARP**. All domains in that list rely on the local DNS resolver configured for the device. +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---- | +| All systems | WARP with Gateway | All plans | + +
+
+ +By default, Cloudflare for Teams excludes common top level domains used for local resolution from being sent to the Cloudflare proxy. Excluded domains are listed on the Teams dashboard under **Settings** > **Network** > **Local Domain Fallback** . All domains in that list rely on the local DNS resolver configured for the device. You can add or remove domains from the Local Domains list at any time. -1. On the Teams dashboard, navigate to **Policies** > **Settings**. - -![Settings](../../../../static/secure-web-gateway/split-tunnel/settings-page.png) +1. On the Teams dashboard, navigate to **Settings** > **Network**. -1. Click **Manage Local Domains**. - -![Settings End](../../../../static/secure-web-gateway/split-tunnel/settings-end.png) - -1. On this page, you'll find a list of domains Cloudflare for Teams excludes. You can customize this list to add or remove any items from it. - -![Manage local domains](../../../../static/secure-web-gateway/split-tunnel/local-resolution.png) +1. Under **Local Domain Fallback**, click **Manage**. +1. On this page, you will find a list of domains Cloudflare for Teams excludes. You can customize this list to add or remove any items from it. + ## Add a domain -On the Manage Local Domains page, in the **Add Local Domain Record** card, enter the domain and an optional description in the relevant fields. Then, click **Add**. +On the Local Domains page, enter the domain and an optional description in the relevant fields. Then, click **Add domain**. -The domain will appear in the list below. - - ![Add domain](../../../../static/documentation/connections/delete-domains.png) +The domain will appear in the list of Local Domain entries. ## Delete a domain To remove a domain from the list, locate the domain and then click **Delete**. - -If you wish to remove multiple domains at the same time, click the checkbox to the left of each domain to select it, and click **Delete** in the top right corner of the box. - - ![Delete domain](../../../../static/documentation/connections/delete-domains.png) diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/exclude-traffic/split-tunnels.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/exclude-traffic/split-tunnels.md index 969467b1f16..40009a27d1d 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/exclude-traffic/split-tunnels.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/exclude-traffic/split-tunnels.md @@ -1,43 +1,67 @@ --- order: 5 +pcx-content-type: how-to --- # Split Tunnels - - -Split Tunnels mode can be configured to exclude IP addresses commonly used for private routing, including those defined in [RFC 1918](https://tools.ietf.org/html/rfc1918). You can find a list of excluded IP addresses under **Gateway** > **Policies** > **Settings** > **Split Tunnels - WARP**. +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---- | +| All systems | WARP with Gateway | All plans | + +
+
+ +Split Tunnels mode can be configured to exclude IP addresses or domains from going through WARP. This is commonly used for private routing, including those defined in [RFC 1918](https://tools.ietf.org/html/rfc1918). You can find a list of excluded IP addresses under **Settings** > **Network** > **Split Tunnels**. -You can add or remove IP addresses from the Split Tunnels list at any time. +You can add or remove items from the Split Tunnels list at any time. ![Settings End](../../../../static/secure-web-gateway/split-tunnel/settings-end.png) -1. On the Teams dashboard, navigate to **Policies** > **Settings**. - -![Settings](../../../../static/secure-web-gateway/split-tunnel/settings-page.png) +1. On the Teams Dashboard, navigate to **Settings** > **Network**. -1. Click **Manage Split Tunnels**. - -![Settings End](../../../../static/secure-web-gateway/split-tunnel/settings-end.png) +1. Under **Split Tunnels**, click **Manage**. -1. On this page, you'll find a list of the IP addresses Cloudflare for Teams excludes. You can customize this list to add or remove any items from it. + On this page, you will find a list of the networks Cloudflare for Teams excludes. You can customize this list to add or remove any items from it. ### Add an IP address -On the Manage Split Tunnels page, in the **Add Split Tunneling Record** card, enter the IP address or CIDR and an optional description in the relevant fields. Then, click **Add**. - - ![Add IP address](../../../../static/documentation/connections/add-IP-address.png) - -The IP address will appear in the list below. - -### Remove an IP address +On the Split Tunnels page, choose **IP Address** from the list of selectors and enter the IP address or CIDR you want to exclude. Next, add an optional description in the relevant field. Then, click **Save destination**. + +The IP address will appear in the list of Split Tunnel entries. + +### Add a domain -On the Manage Split Tunnels page, locate the IP address in the list and then click **Delete**. +On the Split Tunnels page, choose **Domain** from the list of selectors and enter the domain you want to exclude. Next, add an optional description in the relevant field. Then, click **Save destination**. + +The domain will appear in the list of Split Tunnel entries. + +Valid domains include: +- `example.com` +- `example.example.com` +- `*.example.com` + + + +### Remove an item from Split Tunnels - ![Delete IP address](../../../../static/documentation/connections/delete-IP-address.png) +On the Split Tunnels page, locate the IP address or hostname in the list and then click **Delete**. + + diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/index.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/index.md index 89bcc0c4e16..758c3450b78 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/index.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/index.md @@ -1,38 +1,62 @@ --- order: 0 +pcx-content-type: concept +title: WARP --- -# WARP client +# Connect devices with the WARP client -You can use Cloudflare WARP client to connect devices to Cloudflare for DNS or HTTP filtering. The WARP client can be deployed in the following modes: +The Cloudflare WARP client allows you to protect corporate devices by securely and privately sending traffic from those devices to Cloudflare's edge, where Cloudflare Gateway can apply advanced web filtering. The WARP client also makes it possible to apply advanced Zero Trust policies that check for a device's health before it connects to corporate applications. -|Mode|Description|DNS filtering|HTTP filtering| -|---|---|---|---| -|DNS only|DoH-based filtering|Yes|No| -|DNS with WARP+|DoH-based filtering with encrypted WARP+ traffic|Yes|No| -|HTTP filtering|DoH-based filtering, HTTP filtering, and encrypted WARP+ traffic|Yes|Yes| +Downloading and deploying the WARP client to your devices enhances the protection Cloudflare for Teams can provide to your users and data, wherever they are. -Cloudflare WARP is [available](/connections/connect-devices/warp/download-warp) on iOS, Android, Mac, and Windows. +Here are a few ways in which the WARP client provides in-depth protection for your organization: -## DNS filtering +* **WARP lets you enforce security policies anywhere**. + With the WARP client deployed in the Gateway with WARP mode, Gateway policies are not location-dependent — they can be enforced anywhere. -The Cloudflare WARP client can be configured to send all DNS queries from roaming devices, on any network, to Cloudflare for DNS filtering. Deploying DNS filtering with WARP does not require your team to configure source or destination IPs. To begin, follow the steps below: +* **WARP lets you enforce HTTP filtering and user-based policies**. + Download and install the WARP client to enable Gateway features such as [Anti-Virus scanning](/policies/filtering/http-policies/antivirus-scanning), [HTTP filtering](/policies/filtering/http-policies), [Browser Isolation](/policies/filtering/http-policies#isolate), and [identity-based policies](/policies/filtering/network-policies). -1. Determine which devices can enroll. -2. Create a DNS-over-HTTPS destination. -3. [Deploy](/connections/connect-devices/warp/deployment) Cloudflare WARP to devices. +* **WARP lets you have in-depth, application-specific insights**. + With WARP installed on your corporate devices, you can populate the [Teams Shadow IT Discovery](/analytics/access) page with visibility down to the application and user level. This makes it easy to discover, analyze, and take action on any shadow IT your users may be using every day. -Alternatively, you can deploy Cloudflare DNS filtering on [networks](/connections/connect-networks) or [devices](/connections/connect-devices/agentless) without the WARP client. +* **WARP allows you to build rich device posture rules.** + The WARP client provides advanced Zero Trust protection by making it possible to check for [device posture](/identity/devices). By setting up device posture checks, you can build Zero Trust policies that check for a device's location, disk encryption status, OS version, and more. -## Web proxying +The WARP client can be configured in three modes. -You can proxy all traffic leaving devices through Cloudflare for HTTP inspection and filtering using the Cloudflare WARP client. To begin, follow the steps below: +## WARP client modes -1. [Determine which devices](/connections/connect-devices/warp/device-enrollment) can enroll or deploy the agent [with an MDM provider](/connections/connect-devices/warp/deployment). -2. [Enroll a device](/connections/connect-devices/warp/device-enrollment). -3. [Install](/connections/connect-devices/warp/install-cloudflare-cert) the Cloudflare root certificate on the devices. -4. [Enable web inspection](/connections/connect-devices/warp/control-proxy) in the Cloudflare for Teams dashboard. + + +### Gateway with WARP (default) + +| DNS filtering | HTTP filtering | Features enabled | +| ------------- | -------------- | ---------------- | +| Yes | Yes | DNS policies, HTTP policies, Browser Isolation, identity-based policies, AV scanning, DLP, device posture | + +### Gateway with DoH + +This mode is best suited for organizations that want to use advanced firewall/proxy functionalities and enforce device posture rules. + +| DNS filtering | HTTP filtering | Features enabled | +| ------------- | -------------- | ---------------- | +| Yes | No | DNS policies | + +This mode is best suited for organizations that only want to apply DNS filtering to outbound traffic from their company devices. + +### Proxy mode + +| DNS filtering | HTTP filtering | Features enabled | +| ------------- | -------------- | ---------------- | +| No | Yes | HTTP policies, Browser Isolation, identity-based policies, AV scanning, DLP for traffic sent through localhost proxy| + +This mode is best suited for organizations that want to filter traffic directed to specific applications. + + +Cloudflare WARP is [available](/connections/connect-devices/warp/download-warp) for iOS, Android, ChromeOS, Mac, Linux, and Windows. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/install-cloudflare-cert.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/install-cloudflare-cert.md index fd4630c9131..ba4ddee748f 100644 --- a/products/cloudflare-one/src/content/connections/connect-devices/warp/install-cloudflare-cert.md +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/install-cloudflare-cert.md @@ -1,5 +1,6 @@ --- -order: 0 +order: 3 +pcx-content-type: how-to --- # Install the Cloudflare root certificate @@ -308,6 +309,40 @@ The command to install the certificate with Python on Windows automatically incl The root certificate is now installed and ready to be used. +### ChromeOS + +1. Download the Cloudflare certificate [here](../../../static/documentation/connections/Cloudflare_CA.crt). + +2. Navigate to your **ChromeOS Settings**. + +![Chrome OS Settings cog](../../../static/documentation/connections/chromeOS1_cert.png) + +3. Navigate to **Apps** and then click **Google Play Store**. + +![Click google play store in Apps section](../../../static/documentation/connections/chromeOS2_cert.png) + +4. Click **Manage Android preferences**. + +![Click manage android preferences](../../../static/documentation/connections/chromeOS3_cert.png) + +5. Click **Security & location** then click **Credentials** then click **Install from SD card**. + + + +| | | | +|------|------|------| +| ![Click security & location](../../../static/documentation/connections/chromeOS4_cert.png) | ![click credentials](../../../static/documentation/connections/chromeOS5_cert.png) | ![click install from SD card](../../../static/documentation/connections/chromeOS6_cert.png) | + + + +6. In the file open dialog select the `Cloudflare_CA.crt` file downloaded in step #1 and click **Open**. + +![Choose the Cloudflare_CA.crt file to install](../../../static/documentation/connections/chromeOS7_cert.png) + +7. Enter anything you want for the certificate name and click **OK**. + +![Name the certificate with anything](../../../static/documentation/connections/chromeOS8_cert.png) + \ No newline at end of file + diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/remove-warp.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/remove-warp.md new file mode 100644 index 00000000000..5b3bfae0ccd --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/remove-warp.md @@ -0,0 +1,35 @@ +--- +order: 15 +pcx-content-type: how-to +--- + +# Remove WARP + +## Windows + +1. Navigate to Windows Settings (Windows Key + I). +1. Click **Apps**. +1. Click **App & Features**. +1. Scroll to find the Cloudflare WARP application and click **Uninstall**. + +## macOS + +We include an uninstall script as part of the macOS package that you originally used. Use the following commands to find and run the script: + +```sh +$ cd /Applications/Cloudflare\ WARP.app/Contents/Resources +$ ./uninstall.sh +``` + + + +## iOS and Android + +1. Find the 1.1.1.1 application on the home screen. +1. Touch and hold on the application tile. +1. Tap **Remove App**. +1. Select **Delete App**. \ No newline at end of file diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/set-up-warp.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/set-up-warp.md new file mode 100644 index 00000000000..d2555fc235e --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/set-up-warp.md @@ -0,0 +1,71 @@ +--- +order: 0 +pcx-content-type: how-to +title: First-time setup +--- + +# Set up WARP for your organization + +This is a high-level, step-by-step walkthrough on how to get started with WARP in your organization. From downloading the client to sending the first queries to Cloudflare's edge, here is a guide on how to do it for the first time. + +## Gateway with WARP (default) + +### 1. Create a Cloudflare for Teams account. + +The Cloudflare for Teams Dashboard will be your go-to place to check device connectivity data, as well as create Secure Web Gateway and Zero Trust policies for your organization. + +As you complete the [Teams onboarding](/setup), you will be asked to create a [team name](/glossary#team-name) for your organization. You will need the team name when you deploy the WARP client on your devices; it will allow your users to connect to your organization's Cloudflare for Teams instance. + +### 2. Set up a login method. + +Configure [One-time PIN](/identity/one-time-pin) or connect a [third-party identity provider](/identity/idp-integration) on the Teams Dashboard. This is the login method your users will utilize when authenticating to add a new device to your Teams setup. + +### 3. Next, define [device enrollment permissions](/connections/connect-devices/warp/warp-settings#device-enrollment-permissions). + +Create device enrollment rules to define which users in your organization should be able to connect devices to your organization's Teams setup. As you create your rule, you will be asked to select which login method you would like users to authenticate with. + +### 4. Install the [Cloudflare root certificate](/connections/connect-devices/warp/install-cloudflare-cert) on your devices. + +Advanced security features including HTTP traffic inspection require users to install and trust the Cloudflare root certificate on their machine or device. If you are installing certificates manually on all your devices, these steps will need to be performed on each new device that is to be subject to HTTP filtering. + +### 5. Download and deploy the WARP client to your devices. + +Choose one of the [different ways](/connections/connect-devices/warp/deployment) to deploy the WARP client, depending on what works best for your organization. + +### 6. Enable the Proxy setting in the Teams Dashboard. + +Navigate to **Settings** > **Network** and enable the **Proxy** setting. This will allow you to start routing your HTTP traffic to Gateway. + +### 7. Go through this checklist. + +To begin inspecting DNS and HTTP traffic on your devices, you need to ensure all of the following: + +* Your devices have the WARP client installed and connected. +* The [Cloudflare root certificate](/connections/connect-devices/warp/install-cloudflare-cert) has been installed on your devices. +* The [proxy setting](/connections/connect-devices/warp/warp-settings#enable-proxy) has been enabled on the Cloudflare for Teams Dashboard. + +## Gateway with DoH + +This mode is best suited for organizations that only want to apply DNS filtering to outbound traffic from their company devices. It does not enable advanced HTTP filtering features such as HTTP policies, identity-based policies, device posture checks, or Browser Isolation. + +### 1. Create a Cloudflare for Teams account. + +The Cloudflare for Teams Dashboard will be your go-to place to check device connectivity data, as well as create Secure Web Gateway and Zero Trust policies for your organization. + +As you complete the [Teams onboarding](/setup), you will be asked to create a [team name](/glossary#team-name) for your organization. You will need the team name when you deploy the WARP client on your devices; it will allow your users to connect to your organization's Cloudflare for Teams instance. + +### 2. Set up a login method. + +Configure [One-time PIN](/identity/one-time-pin) or connect a [third-party identity provider](/identity/idp-integration) on the Teams Dashboard. This is the login method your users will utilize when authenticating to add a new device to your Teams setup. + +### 3. Next, define [device enrollment permissions](/connections/connect-devices/warp/warp-settings#device-enrollment-permissions). + +Create device enrollment rules to define which users in your organization should be able to connect devices to your organization's Teams setup. As you create your rule, you will be asked to select which login method you would like users to authenticate with. + +### 4. Add a [location](/connections/connect-networks/locations) to Gateway. + +Add your office as a location on Gateway. Gateway will assign a [DoH subdomain](/glossary#doh-subdomain) to that location — you will then need this value when deploying the WARP client to your devices. + +### 5. Download and deploy the WARP client to your devices. + +Choose one of the [different ways](/connections/connect-devices/warp/deployment) to deploy the WARP client, depending on what works best for your organization. diff --git a/products/cloudflare-one/src/content/connections/connect-devices/warp/warp-settings.md b/products/cloudflare-one/src/content/connections/connect-devices/warp/warp-settings.md new file mode 100644 index 00000000000..44dd6c2216a --- /dev/null +++ b/products/cloudflare-one/src/content/connections/connect-devices/warp/warp-settings.md @@ -0,0 +1,100 @@ +--- +order: 5 +pcx-content-type: reference +--- + +# WARP settings + + + +To manage WARP settings and device connectivity preferences, navigate to **Settings** > **Devices** on the Teams Dashboard. + +## Admin override + +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---- | +| macOS, Windows, Linux | Any mode | All plans | + +
+
+ +When the toggle is enabled, users will be able to make changes to the WARP client configuration if they have a one-time password. When the toggle is disabled, no one-time passwords are generated, and the users will not be able to change the client's configuration. + +## Device enrollment permissions + +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---- | +| All systems | Any mode | All plans | + +
+
+ +Cloudflare for Teams allows you to establish which users in your organization can enroll new devices or revoke access to connected devices. To do that, you can create a device enrollment rule on the Teams Dashboard: + +1. Click **Manage** in the **Device enrollment permissions** card. +1. In the rule builder, configure one or more rules to define who can enroll or revoke devices. +1. Set a session duration. Once the session expires, users will be asked to log in when attempting to connect a device. +1. Click **Save**. + +## Captive portal detection + +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---- | +| macOS, Windows | WARP with Gateway | All plans | + +
+
+ +Captive Portal detection is the ability for the WARP client to detect a third-party onboarding flow before Internet access is obtained. This is most frequent in places such as airports, cafes, and hotels. + +When the toggle is enabled, the WARP client will automatically turn off when it detects a captive portal, and it will automatically turn on after the amount of time you specify in the card. + +## Mode switch + +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---- | +| macOS, Windows, Linux | WARP with Gateway | All plans | + +
+
+ +When the toggle is enabled, users have the option to turn off the [Gateway with WARP](/connections/connect-devices/warp#gateway-with-warp-default) mode and switch to [Gateway with DoH mode](/connections/connect-devices/warp#gateway-with-doh). When the toggle is disabled, end users will not be able to switch between WARP modes. + +--- + +## Enable Proxy + +
+Feature availability +
+ +| Operating Systems | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---- | +| macOS, Windows, Linux | All plans | + +
+
+ +1. Navigate to **Settings** > **Network**. +1. Scroll down to **L7 Firewall**. +1. Set the **Proxy** switch to *Enabled*. diff --git a/products/cloudflare-one/src/content/connections/connect-networks/index.md b/products/cloudflare-one/src/content/connections/connect-networks/index.md index 2a0e13e11aa..8eec545319b 100644 --- a/products/cloudflare-one/src/content/connections/connect-networks/index.md +++ b/products/cloudflare-one/src/content/connections/connect-networks/index.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content-type: navigation --- # Connect networks diff --git a/products/cloudflare-one/src/content/connections/connect-networks/locations/configuring-a-location.md b/products/cloudflare-one/src/content/connections/connect-networks/locations/configuring-a-location.md index d7d4b51e653..0e027f47ff4 100644 --- a/products/cloudflare-one/src/content/connections/connect-networks/locations/configuring-a-location.md +++ b/products/cloudflare-one/src/content/connections/connect-networks/locations/configuring-a-location.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content-type: how-to --- # Add locations @@ -12,7 +13,12 @@ To add a location to Teams: 1. Choose a name for your location. -1. If the location you are sending requests from is only using IPv6 or sending all DNS requests using DNS over HTTPS, click **Delete** on the right side of the IPv4 address field, as the field is not required. +1. You may not need the IPv4 address field if: + * The location you're adding only uses IPv6 + * Users will be sending all DNS requests from this location using DNS over HTTPS via a browser + * You will be deploying the [WARP client](/connections/connect-devices/warp) + + If any of the above apply to your case, click **Delete** to the right of the IPv4 field. diff --git a/products/cloudflare-one/src/content/connections/connect-networks/locations/troubleshooting-locations.md b/products/cloudflare-one/src/content/connections/connect-networks/locations/troubleshooting-locations.md deleted file mode 100644 index 210992b3d0d..00000000000 --- a/products/cloudflare-one/src/content/connections/connect-networks/locations/troubleshooting-locations.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -order: 3 ---- - -# Troubleshoot locations - -## Why am I not seeing Analytics in my Overview page? -![Overview empty](../../../static/documentation/connections/gateway-dash-overview-empty.png) - -If you're seeing this message, there may be different reasons: - -##### 1. You are not sending DNS queries to Gateway -Verify that the destination IP addresses you are sending DNS queries to are correct. You can check the destination IP addresses for your location by going to your locations page and then expanding the location: - -![Location with destinations](../../../static/documentation/connections/expanded-location-with-destinations.png) - -##### 2. You are using other DNS resolvers -If you have other DNS resolvers in your DNS settings, your device could be using IP addresses for those resolvers that are not part of Gateway. Please make sure to remove all other IP addresses from your DNS settings and only include Gateway's DNS resolver IP addresses. - -##### 3. The source IPv4 address for your location is incorrect -If you are using IPv4, check that the source IPv4 address that you entered for the location matches with the network's source IPv4 address. - -##### 4. Analytics is not available yet -It takes some time to generate the analytics for Cloudflare Gateway. If don't see anything even after 5 minutes, please file a support ticket. diff --git a/products/cloudflare-one/src/content/connections/connect-networks/private-net/create-tunnel/index.md b/products/cloudflare-one/src/content/connections/connect-networks/private-net/create-tunnel/index.md index 23decd76d84..0c25a43774b 100644 --- a/products/cloudflare-one/src/content/connections/connect-networks/private-net/create-tunnel/index.md +++ b/products/cloudflare-one/src/content/connections/connect-networks/private-net/create-tunnel/index.md @@ -1,5 +1,6 @@ --- order: 3 +pcx-content-type: how-to --- # Create a Tunnel diff --git a/products/cloudflare-one/src/content/connections/connect-networks/private-net/index.md b/products/cloudflare-one/src/content/connections/connect-networks/private-net/index.md index d72894eca7d..799a7e5797a 100644 --- a/products/cloudflare-one/src/content/connections/connect-networks/private-net/index.md +++ b/products/cloudflare-one/src/content/connections/connect-networks/private-net/index.md @@ -1,21 +1,22 @@ --- order: 0 +pcx-content-type: how-to --- # Private networks -You can connect private networks and the services running in those networks to Cloudflare using [Argo Tunnel](/glossary#argo-tunnel). End users can connect to those resources using the Cloudflare WARP agent by first authenticating into your organization's account. +You can connect private networks and the services running in those networks to Cloudflare using [Cloudflare Tunnel](/glossary#cloudflare-tunnel). End users can connect to those resources using the Cloudflare WARP agent by first authenticating into your organization's account. -Argo Tunnel runs a lightweight [daemon](/glossary#daemon) named ([`cloudflared`](/glossary#cloudflared)) in your infrastructure that establishes outbound connections (Tunnels) between your environment and the Cloudflare edge. Administrators define the IPs available in that environment and associate them with the Tunnel. +Cloudflare Tunnel runs a lightweight [daemon](/glossary#daemon) named ([`cloudflared`](/glossary#cloudflared)) in your infrastructure that establishes outbound connections (Tunnels) between your environment and the Cloudflare edge. Administrators define the IPs available in that environment and associate them with the Tunnel. -When users connect to an IP made available through Argo Tunnel, WARP sends their connection through Cloudflare's network to the corresponding Argo Tunnel. +When users connect to an IP made available through Cloudflare Tunnel, WARP sends their connection through Cloudflare's network to the corresponding Tunnel. In order to connect private networks, you'll first need to: 1. [Download and install `cloudflared`](/connections/connect-apps/install-and-setup/installation) in your private network 2. [Authenticate `cloudflared`](/connections/connect-apps/install-and-setup/setup) -Once `cloudflared` has been installed and authenticated, you will need 3 high-level steps to connect your network to users enrolled in your organization's Cloudflare for Teams account. +Once `cloudflared` has been installed and authenticated, you will need 4 high-level steps to connect your network to users enrolled in your organization's Cloudflare for Teams account. 1. [Create a Tunnel](/connections/connect-networks/private-net/create-tunnel) 2. [Configure IPs in WARP](/connections/connect-devices/warp/exclude-traffic) diff --git a/products/cloudflare-one/src/content/connections/index.md b/products/cloudflare-one/src/content/connections/index.md index 180ffaefa63..2d55a602f7f 100644 --- a/products/cloudflare-one/src/content/connections/index.md +++ b/products/cloudflare-one/src/content/connections/index.md @@ -1,5 +1,6 @@ --- order: 4 +pcx-content-type: navigation --- # Connections diff --git a/products/cloudflare-one/src/content/faq/cloudflare-tunnels-faq.md b/products/cloudflare-one/src/content/faq/cloudflare-tunnels-faq.md index 2694b81c6d3..39a0ba2fd09 100644 --- a/products/cloudflare-one/src/content/faq/cloudflare-tunnels-faq.md +++ b/products/cloudflare-one/src/content/faq/cloudflare-tunnels-faq.md @@ -97,9 +97,9 @@ If your server is correctly locked down, you will see: [ip-address] 443 (https): Connection refused ``` -## What is the difference between Tunnel creating a CNAME or AAAA record in the hostname's DNS setting? +## What records are created for routing to a Named Tunnel's hostname? -Tunnels that use Cloudflare's Load Balancer use CNAME records. Tunnels that do not use the Load Balancer product will create AAAA records. +Named Tunnels can be routed via DNS records, in which case we use CNAME records to point to the `.cfargotunnel.com`; Or as Load Balancer origins, which also point to `.cfargotunnel.com`. ## Does Cloudflare Tunnel send visitor IPs to my origin? @@ -109,4 +109,31 @@ To log external visitor IPs, you will need to [configure an alternative method]( ## Why does the name "warp" appear in some legacy materials? -Cloudflare Tunnel was previously named Warp during the beta phase. As Warp was added to the Argo product family, we changed the name to match. \ No newline at end of file +Cloudflare Tunnel was previously named Warp during the beta phase. As Warp was added to the Argo product family, we changed the name to match. + +## How can I troubleshoot a Tunnel? + +### Run Tunnel with debug logging + +Use the following command to run your Tunnel in the debug mode: +```sh +$ cloudflared tunnel --loglevel debug run +``` + +The `--loglevel` flag indicates the logging level, which can be one of {`debug`, `info`, `warn`, `error`, `fatal`} (default: `info`). At the `debug` level, `cloudflared` will log and display the request URL, method, protocol, content length, as well as all request and response headers. However, please note that this can expose sensitive information in your logs. + +### Check SSL/TLS encryption mode +1. On the Cloudflare dashboard for your zone, navigate to **SSL/TLS** > **Overview**. +1. If your SSL/TLS encryption mode is **Off (not secure)**, make sure that it is set to **Flexible**, **Full** or **Full (strict)**. + +![SSL encryption mode](../static/documentation/connections/ssl-encryption-mode.png) + +When the encryption mode is set to **Off (not secure)**, you may encounter connection issues when running a Tunnel. + +### Check location of credentials file +If you encouter the following error when running a Tunnel, double check your `config.yml` file and ensure that the `credentials-file` points to the correct location. You may need to change `/root/` to your home directory. +```sh +$ cloudflared tunnel run +2021-06-04T06:21:16Z INF Starting tunnel tunnelID=928655cc-7f95-43f2-8539-2aba6cf3592d +Tunnel credentials file '/root/.cloudflared/928655cc-7f95-43f2-8539-2aba6cf3592d.json' doesn't exist or is not a file +``` \ No newline at end of file diff --git a/products/cloudflare-one/src/content/faq/index.md b/products/cloudflare-one/src/content/faq/index.md index 15a0d3cf983..ef080eeb6d1 100644 --- a/products/cloudflare-one/src/content/faq/index.md +++ b/products/cloudflare-one/src/content/faq/index.md @@ -8,10 +8,10 @@ hideChildren: true # FAQ - -Below you'll find answers to commonly asked questions on Cloudflare for Teams, as well as a troubleshooting section to help you navigate common issues and errors you may come across. -If you can't find the answer you're looking for, feel free to head over to our [community page](https://community.cloudflare.com/) and post your question there. +Below you'll find answers to the most commonly asked questions on Cloudflare for Teams, as well as a troubleshooting section to help you navigate common issues and errors you may come across. + +If you can't find the answer you're looking for, feel free to head over to our [community page](https://community.cloudflare.com/) and post your question there. @@ -57,4 +57,4 @@ For questions on connecting applications with Tunnels. Got an unexpected error? See if it's covered in our troubleshooting section. - + \ No newline at end of file diff --git a/products/cloudflare-one/src/content/faq/teams-authentication-faq.md b/products/cloudflare-one/src/content/faq/teams-authentication-faq.md index fde344a4b4a..88eaad76dfd 100644 --- a/products/cloudflare-one/src/content/faq/teams-authentication-faq.md +++ b/products/cloudflare-one/src/content/faq/teams-authentication-faq.md @@ -13,4 +13,20 @@ Yes. Your team can simultaneously use multiple providers, reducing friction when ## What if the identity provider my team uses is not listed? -You can add your preferred identity providers to Cloudflare Access even if you don't see them listed on the Teams dashboard, as long as these providers support SAML 2.0 or [OpenID Connect (OIDC)](/identity/idp-integration/generic-oidc). \ No newline at end of file +You can add your preferred identity providers to Cloudflare Access even if you do not see them listed on the Teams dashboard, as long as these providers support SAML 2.0 or [OpenID Connect (OIDC)](/identity/idp-integration/generic-oidc). + +## How do end users log out of an application protected by Access? + +Access provides a URL that will end a user's current session. To force log out of an Access application, use the following URL: + +``` +[your-application-domain]/cdn-cgi/access/logout +``` + +To log out of an App Launcher session, use the following URL: + +``` +[your-team-name].cloudflareaccess.com/cdn-cgi/access/logout +``` + +You can use these URLs to create custom logout buttons or links directly within applications. diff --git a/products/cloudflare-one/src/content/faq/teams-devices-faq.md b/products/cloudflare-one/src/content/faq/teams-devices-faq.md index 1eace8f289d..9854522f460 100644 --- a/products/cloudflare-one/src/content/faq/teams-devices-faq.md +++ b/products/cloudflare-one/src/content/faq/teams-devices-faq.md @@ -19,4 +19,7 @@ Cloudflare WARP Client in WARP mode was meant to ensure all your traffic is kept Sites inside Cloudflare network are able to see this information. If a site is showing you your IP address, chances are they are in our network. Most sites outside our network (orange clouded sites) however are unable to see this information and instead see the nearest egress colo to their server. We are working to see if in the future we can't find a way to more easily share this information with a limited number of gray clouded sites where it is relevant to both parties. ## ​Why has my throughput dropped while using WARP? -Cloudflare WARP is in part powered by 1.1.1.1. When visiting sites or going to a new location on the Internet, you should see blazing fast DNS lookups. However, WARP is built to trade some throughput for enhanced privacy, because it encryps all traffic both to and from your device. While this isn't noticeable at most mobile speeds, on desktop systems in countries where high speed broadband is available, you may notice a drop. We think the tradeoff is worth it though and continue to work on improving performance all over the system. \ No newline at end of file +Cloudflare WARP is in part powered by 1.1.1.1. When visiting sites or going to a new location on the Internet, you should see blazing fast DNS lookups. However, WARP is built to trade some throughput for enhanced privacy, because it encryps all traffic both to and from your device. While this isn't noticeable at most mobile speeds, on desktop systems in countries where high speed broadband is available, you may notice a drop. We think the tradeoff is worth it though and continue to work on improving performance all over the system. + +## Firefox is showing a network protocol violation when I use the WARP client. +If you see this warning, you may have to disable DNS over HTTPs setting in Firefox. If you need help doing that, see [these instructions](https://support.mozilla.org/en-US/kb/firefox-dns-over-https#w_manually-enabling-and-disabling-dns-over-https). diff --git a/products/cloudflare-one/src/content/faq/teams-policies-faq.md b/products/cloudflare-one/src/content/faq/teams-policies-faq.md index 9a28cbdfe45..3d1286e78a2 100644 --- a/products/cloudflare-one/src/content/faq/teams-policies-faq.md +++ b/products/cloudflare-one/src/content/faq/teams-policies-faq.md @@ -38,4 +38,16 @@ Isolation policies, like all HTTP policies, are evaluated in stages. When a user Isolation policies are applied to requests that include Accept: `text/html*`. This allows Browser Isolation policies to co-exist with API and command line requests. ## Can Access enforce policies on a specific nonstandard port? -No. Cloudflare Access cannot enforce a policy that would contain a port appended to the URL. However, you can use Cloudflare Argo Tunnel to point traffic to non-standard ports. For example, if Jira is available at port `8443` on your origin, you can proxy traffic to that port via Argo Tunnel. \ No newline at end of file +No. Cloudflare Access cannot enforce a policy that would contain a port appended to the URL. However, you can use Cloudflare Tunnel to point traffic to non-standard ports. For example, if Jira is available at port `8443` on your origin, you can proxy traffic to that port via Cloudflare Tunnel. + +## Why can I still reach domains blocked by a DNS policy? + +Here is a list of possible causes: + +* **Your policy is still being updated.** After you edit or create a policy, Cloudflare updates the new setting across all of our data centers around the world. It takes about 60 seconds for the change to propagate. + +* **Your device is using another DNS resolver.** If you have other DNS resolvers in your DNS settings, your device could be using IP addresses for resolvers that are not part of Gateway. As a result, the domain you are trying to block is still accessible from your device. Make sure to remove all other IP addresses from your DNS settings and only include Gateway's DNS resolver IP addresses. + +* **Your policy is not assigned to a location.** If your policy is not assigned to a location and you send a DNS query from that location, Gateway will not apply that policy. Assign a policy to a location to make sure the desired policy is applied when you send a DNS query from that location. + +* **Your DoH endpoint is not a Gateway location**. Browsers can be configured to use any DoH endpoint. If you chose to configure DoH directly in your browser, make sure that the DoH endpoint is a Gateway location. diff --git a/products/cloudflare-one/src/content/faq/teams-troubleshooting.md b/products/cloudflare-one/src/content/faq/teams-troubleshooting.md index dea2593764f..edc3e2cbf97 100644 --- a/products/cloudflare-one/src/content/faq/teams-troubleshooting.md +++ b/products/cloudflare-one/src/content/faq/teams-troubleshooting.md @@ -52,10 +52,6 @@ You may not see analytics on the Overview page for the following reasons: * **The source IPv4 address for your location is incorrect**. If you are using IPv4, check the source IPv4 address that you entered for the location matches with the network's source IPv4 address. * **Analytics is not available yet**. It takes some time to generate the analytics for Cloudflare Gateway. If you are not seeing anything even after 5 minutes, please file a support ticket. -## I see a `websocket: bad handshake` error. - -If your Cloudflare account has Universal SSL enabled and the SSL/TLS encryption mode is set to Off, cloudflared will return a "websocket: bad handshake" error. To resolve, set the SSL/TLS encryption mode to any setting other than Off. - ## ​I see a "No Browsers Available" alert. If you encounter this error please [file feedback](https://developers.cloudflare.com/cloudflare-one/connections/connect-browsers/known-limitations#submitting-feedback) via the WARP client and we will investigate. @@ -66,6 +62,17 @@ A browser isolation session is a connection from your local browser to a remote Safari is more susceptible to presenting this error. See [workaround](/connections/connect-browsers/known-limitations#safari). +## I see `Error 400 admin_policy_enforced` when using GSuite as an identity provider. + +
Google Error 400
+ +This is due to a Google policy change requiring you to flag your applications as trusted in the GSuite Admin console: +1. In the Google Admin console, navigate to **Security > Settings > API Permissions**. +1. Locate the domain you would like to mark as trusted. +1. Click on the three-dots menu to the right. +1. Select **Trust**. + + ## Mobile applications warn of an invalid certificate, even though I installed the Cloudflare certificate on my system. These mobile applications may use [certificate pinning](/glossary#certificate-pinning). Cloudflare Gateway dynamically generates a certificate for all encrypted connections in order to inspect the content of HTTP traffic. This certificate will not match the expected certificate by applications that use certificate pinning. @@ -73,11 +80,11 @@ To allow these applications to function normally, administrators can configure b ## My tunnel fails to authenticate. -To start using Argo Tunnel, a super administrator in the Cloudflare account must first log in through `cloudflared login`. The client will launch a browser window and prompt the user to select a hostname in their Cloudflare account. Once selected, Cloudflare generates a certificate that consists of three components: +To start using Cloudflare Tunnel, a super administrator in the Cloudflare account must first log in through `cloudflared login`. The client will launch a browser window and prompt the user to select a hostname in their Cloudflare account. Once selected, Cloudflare generates a certificate that consists of three components: * The public key of the origin certificate for that hostname * The private key of the origin certificate for that domain -* A token that is unique to Argo Tunnel +* A token that is unique to Cloudflare Tunnel Those three components are bundled into a single PEM file that is downloaded one time during that login flow. The host certificate is valid for the root domain and any subdomain one-level deep. Cloudflare uses that certificate file to authenticate `cloudflared` to create DNS records for your domain in Cloudflare. @@ -85,4 +92,24 @@ The third component, the token, consists of the zone ID (for the selected domain ## Firefox shows network protocol violation when using the WARP client -You may have to disable the DNS over HTTPs setting in Firefox. To do so, navigate to Firefox Preferences, scroll down to **Network Settings**, and uncheck **Enable DNS over HTTPS > OK**. \ No newline at end of file +You may have to disable the DNS over HTTPs setting in Firefox. To do so, navigate to Firefox Preferences, scroll down to **Network Settings**, and uncheck **Enable DNS over HTTPS > OK**. + +## `cloudflared access` shows an error `websocket: bad handshake` + +This means that your `cloudflared access` client is unable to reach your `cloudflared tunnel` origin. +To diagnose this, you should look at the `cloudflared tunnel` logs. A very often root cause is that the `cloudflared tunnel` is unable to proxy to your origin (e.g. because the ingress is mis-configured, or the origin is down, or because the origin HTTPS certificate cannot be validated by `cloudflared tunnel`). +If `cloudflared tunnel` has no logs, it means Cloudflare Edge is not even able to route the websocket traffic to it. + +There are a few different possible root causes behind the `websocket: bad handshake` error: + +* Your `cloudflared tunnel` is either not running or not connected to Cloudflare Edge. +* WebSockets are not enabled. To enable them, navigate to `dash.cloudflare.com` > **Network**. +* Your Cloudflare account has Universal SSL enabled and the SSL/TLS encryption mode is set to *Off*. To resolve, set the SSL/TLS encryption mode to any setting other than *Off*. +* Your requests are blocked by [Super Bot Fight Mode](https://developers.cloudflare.com/bots/get-started/pro). To resolve, make sure you set **Definitely automated** to *Allow* in the bot fight mode settings. + +## I see an error: x509: certificate signed by unknown authority + +This means the origin is using a certificate that `cloudflared` does not trust. For example, you may get this error if you are using SSL inspection in a proxy between your server and Cloudflare. To solve this: +1. Add the certificate to the system certificate pool. +1. Use the `--origin-ca-pool` flag and specify the path to the certificate. +1. Use the `--no-tls-verify` flag to stop `cloudflared` checking the certificate for a trust chain. diff --git a/products/cloudflare-one/src/content/glossary/index.md b/products/cloudflare-one/src/content/glossary/index.md index 36f95db273b..b32d2509bda 100644 --- a/products/cloudflare-one/src/content/glossary/index.md +++ b/products/cloudflare-one/src/content/glossary/index.md @@ -1,5 +1,6 @@ --- order: 10 +pcx-content-type: reference --- # Glossary @@ -13,8 +14,8 @@ Cloudflare Access replaces corporate VPNs with Cloudflare’s network. Instead o ## [Cloudflare Gateway](https://www.cloudflare.com/en-gb/teams/gateway/) Cloudflare Gateway is a modern next generation firewall between your user, device or network and the public Internet. Once you setup Cloudflare Gateway, Gateway's DNS filtering service will inspect all Internet bound DNS queries, log them and apply corresponding policies. -## [Argo Tunnel](https://www.cloudflare.com/en-gb/products/argo-tunnel/) -A secure outbound connection which runs in your infrastructure to connect the applications and machines to Cloudflare. +## [Cloudflare Tunnel](https://www.cloudflare.com/en-gb/products/tunnel/) +Cloudflare Tunnel (formerly *Argo Tunnel*) establishes a secure outbound connection which runs in your infrastructure to connect the applications and machines to Cloudflare. ## WARP client Teams customers can use the Cloudflare WARP application to connect corporate desktops to Cloudflare Gateway for advanced web filtering. The Gateway features rely on the same performance and security benefits of the underlying WARP technology, with security filtering available to the connection. @@ -33,10 +34,7 @@ The resource being protected by Cloudflare for Teams. An application can be a su ## Authenticated Origin Pulls -Authenticated Origin Pulls let origin web servers validate that a web request came from Cloudflare. Cloudflare uses TLS client certificate authentication, a feature supported by most web servers, to present a Cloudflare certificate when establishing a connection between Cloudflare and the origin web server. - -| Related products: | [Cloudflare SSL](https://developers.cloudflare.com/ssl/) | -|---|---| +[Authenticated Origin Pulls](https://developers.cloudflare.com/ssl/origin-configuration/authenticated-origin-pull) let origin web servers validate that a web request came from Cloudflare. Cloudflare uses TLS client certificate authentication, a feature supported by most web servers, to present a Cloudflare certificate when establishing a connection between Cloudflare and the origin web server. ## certificate pinning @@ -44,9 +42,10 @@ Certificate pinning is a security mechanism used to prevent man-in-the-middle (M ## cloudflared -`cloudflared` is the software that powers [Argo Tunnel](#argo-tunnel). `cloudflared` runs alongside origin servers to connect to Cloudflare's network, as well as client devices for non-HTTP traffic from user endpoints. +`cloudflared` is the software that powers [Cloudflare Tunnel](#cloudflare-tunnel). `cloudflared` runs alongside origin servers to connect to Cloudflare's network, as well as client devices for non-HTTP traffic from user endpoints. ## daemon + A program that performs tasks without active management or maintenance. ## DNS filtering @@ -59,7 +58,12 @@ Each device connected to the Internet has a unique IP address which other machin ## DNS over HTTPS -With [DNS over HTTPS](/connections/connect-devices/agentless/dns-over-https) (DoH), DNS queries and responses are encrypted, and they are sent via the HTTP or HTTP/2 protocols. Like [DNS over TLS](#dns-over-tls), DoH ensures that attackers can't forge or alter DNS traffic. DoH traffic looks like other HTTPS traffic – e.g. normal user-driven interactions with websites and web apps – from a network administrator's perspective. +By default, DNS queries and responses are sent from a DNS client to a DNS server using the UDP or TCP protocols — which means they’re sent in plaintext, without encryption. This has a huge impact on security: unencrypted queries can be tracked and spoofed by malicious actors, advertisers, ISPs, and others. + +[DNS over TLS (DoT)](#dns-over-tls) and [DNS over HTTPS (DoH)](/connections/connect-devices/agentless/dns-over-https) are two standards developed for encrypting plaintext DNS traffic to prevent untrustworthy entities from interpreting and manipulating it. The main difference between DoT and DoH is the port they use to encrypt traffic, and the encryption method they use. + +DoH uses port 443, which is the standard HTTPS traffic port, to wrap the DNS request in an HTTPS request. It uses HTTPS and HTTP/2 to encrypt traffic at the application layer. With DoH, DNS queries and responses are camouflaged within other HTTPS traffic, since it all comes and goes from the same port. This means they cannot easily be blocked without blocking all other HTTPS traffic as well, but it also provides users with greater privacy, as network administrators will have no visibility on the DNS queries hidden within the larger flow of HTTPS traffic. + ## DoH subdomain @@ -71,7 +75,11 @@ Each location in Teams has a unique DoH subdomain (previously known as a *unique ## DNS over TLS -[DNS over TLS](/connections/connect-devices/agentless/dns-over-tls) (DoT), is a standard for encrypting DNS queries to keep them secure and private. DoT uses the same security protocol, TLS, that HTTPS websites use to encrypt and authenticate communications (TLS is also known as "SSL"). DoT adds TLS encryption on top of the user datagram protocol (UDP), which is used for DNS queries. Additionally, it ensures that DNS requests and responses are not tampered with or forged via on-path attacks. +By default, DNS queries and responses are sent from a DNS client to a DNS server using the UDP or TCP protocols — which means they’re sent in plaintext, without encryption. This lack of privacy has a huge impact on security: unencrypted queries can be tracked and spoofed by malicious actors, advertisers, ISPs, and others. + +[DNS over TLS (DoT)](/connections/connect-devices/agentless/dns-over-tls) and [DNS over HTTPS (DoH)](#dns-over-https) are two standards developed for encrypting plaintext DNS traffic to prevent untrustworthy entities from interpreting and manipulating it. The main difference between DoT and DoH is the port they use to encrypt traffic, and the encryption method they use. + +DNS over TLS uses its own port, 853, to wrap DNS requests within a TLS connection. With DoT, the encryption happens at the transport layer, where it adds TLS encryption on top of the user datagram protocol (UDP). Because DoT has a dedicated port, anyone with network visibility can see DoT traffic coming and going, even though the requests and responses themselves are encrypted. This gives administrators the ability to monitor and block DNS queries, which is important for identifying and stopping malicious traffic. ## hostname The name given to a server or node on a network. In most cases, the public DNS name of a server. @@ -84,7 +92,7 @@ An identity provider (IdP or IDP) stores and manages users' digital identities. An open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA. -## [location](/policies/filtering/dns-policies/configuring-locations) +## [location](/connections/connect-networks/locations) Locations are physical entities like offices, homes, retail stores, movie theatres or a data center. ## mTLS @@ -104,7 +112,7 @@ A simple identity layer on top of the OAuth 2.0 protocol. It allows Clients to v ## origin certificate -Cloudflare Origin Certificates are free SSL certificates issued by Cloudflare for installation on your origin server to facilitate end-to-end encryption for your visitors using HTTPS. +[Cloudflare Origin Certificates](https://developers.cloudflare.com/ssl/origin-configuration/origin-ca) are free SSL certificates issued by Cloudflare for installation on your origin server to facilitate end-to-end encryption for your visitors using HTTPS. ## [policy](/policies) A set of rules that regulate your network activity, such as who logs into your applications, or which websites your users can reach. @@ -166,7 +174,9 @@ The customizable portion of your [team domain](#team-domain). You can change thi [Terraform](https://www.terraform.io/) is a tool for building, changing, and versioning infrastructure, and provides components and documentation for building Cloudflare resources. ## Tunnel certificate -The Argo Tunnel software, `cloudflared`, generates a certificate when you login with your Cloudflare account. The certificate consists of a [service token](#service-token) and [origin certificate](#origin-certificate). + +The Cloudflare Tunnel software, `cloudflared`, generates a certificate when you login with your Cloudflare account. The certificate consists of a [service token](#service-token) and [origin certificate](#origin-certificate). ## Zero Trust Security + An IT security model that requires strict identity verification for every person and device trying to access resources on a private network, regardless of whether they are sitting within or outside of the network perimeter. No single specific technology is associated with zero trust architecture; it is a holistic approach to network security that incorporates several different principles and technologies. diff --git a/products/cloudflare-one/src/content/identity/devices/application-check.md b/products/cloudflare-one/src/content/identity/devices/application-check.md new file mode 100644 index 00000000000..60c7e4cc4e4 --- /dev/null +++ b/products/cloudflare-one/src/content/identity/devices/application-check.md @@ -0,0 +1,103 @@ +--- +order: 11 +pcx-content-type: how-to +--- + +# Application Check + +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---- | +| macOS, Windows, Linux | WARP with Gateway | All plans | + +
+
+ + + +The Application Check device posture attribute checks that a specific application process is running on a device. + +To enable Application Check: + +1. On the Teams Dashboard, navigate to **My Team** > **Devices** > **Device posture**. +1. Click **+Add**. +1. Select **Application Check**. +1. Enter a descriptive name for the check. +1. Select your operating system. +1. Enter a file path (for example, `c:\my folder\myfile.exe`). +1. Next, you can choose to enter a [**Signing certificate thumbprint**](#determine-the-signing-thumbprint). + + Adding this information will enable the check to ensure that the application was signed by the expected software developer. + +1. You can also opt to enter a [**SHA-256** value](#determine-the-sha-256-value). + + This enables the check to ensure the integrity of the binary file on the device. + +1. Click **Save**. + +Your device posture attribute is now visible on the **Device posture** page. + +## Determine the signing thumbprint + +The process to determine the signing thumbprint of an application varies depending on the operating system. This is how you would look up the signing thumbprint of the Cloudflare WARP application on macOS and Windows. + +### On macOS + +1. Create a directory. + + ```sh + $ ~/Desktop % mkdir tmp + + $ ~/Desktop % cd tmp + ``` + +1. Run the following command to extract certificates for the WARP application: + + ```sh + $ ~/Desktop/tmp % codesign -d --extract-certificates "/Applications/Cloudflare WARP.app/Contents/Resources/CloudflareWARP" Executable=/Applications/Cloudflare WARP.app/Contents/Resources/CloudflareWARP + ``` + +1. Next, run the following commant to extract the SHA1 thumbprint: + + ```sh + $ ~/Desktop/tmp % openssl x509 -inform DER -in codesign0 -fingerprint -sha1 -noout | tr -d : + SHA1 Fingerprint=FE2C359D79D4CEAE6BDF7EFB507326C6B4E2436E + ``` + +### On Windows + +1. Open a PowerShell window. +1. Use the `Get-AuthenticodeSignature` command to find the thumbprint. For example: + +```txt +Get-AuthenticodeSignature -FilePath c:\myfile.exe +``` + +## Determine the SHA-256 value + +The SHA-256 value almost always changes between versions of a file/application. + +### On macOS + +1. Open a Terminal window. +1. Use the `shasum` command to find the SHA256 value of the file. For example: + +```sh +$ shasum -a 256 myfile +``` + +### On Windows + +1. Open a PowerShell window. +1. Use the `get-filehash` command to find the SHA256 value of the file. For example: + +```txt +get-filehash -path "C:\myfile.exe" -Algorithm SHA256 | format-list +``` diff --git a/products/cloudflare-one/src/content/identity/devices/azure-ad.md b/products/cloudflare-one/src/content/identity/devices/azure-ad.md index ef415111f4b..9a5ce3ac87f 100644 --- a/products/cloudflare-one/src/content/identity/devices/azure-ad.md +++ b/products/cloudflare-one/src/content/identity/devices/azure-ad.md @@ -1,9 +1,21 @@ --- order: 3 +pcx-content-type: how-to --- # Azure AD +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---- | +| Windows | WARP with Gateway | All plans | + +
+
+ Cloudflare Access can integrate with Azure AD's Conditional Access feature to require that users connect to certain applications from managed devices. To enable, you must integrate Azure AD with Cloudflare Access as a cloud app that requires managed device connections. You can use Cloudflare Access' [per-app IdP feature](/identity/idp-integration) to segment which Access applications require Azure AD with managed devices and which only require Azure AD. ## Azure AD Configuration @@ -32,4 +44,4 @@ In the Cloudflare for Teams dashboard, you can configure which applications requ 2. Open the **Authentication** tab. -3. Toggle the *Azure AD* integration that requires managed device usage. \ No newline at end of file +3. Toggle the *Azure AD* integration that requires managed device usage. diff --git a/products/cloudflare-one/src/content/identity/devices/carbon-black.md b/products/cloudflare-one/src/content/identity/devices/carbon-black.md index 4ffb34f4dc7..42d65d1af99 100644 --- a/products/cloudflare-one/src/content/identity/devices/carbon-black.md +++ b/products/cloudflare-one/src/content/identity/devices/carbon-black.md @@ -1,19 +1,27 @@ --- order: 3 +pcx-content-type: how-to ---   # Carbon Black -Cloudflare for Teams can check if [Carbon Black](https://www.carbonblack.com/) is running on a device to determine if a request should be allowed to reach a protected resource. +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | Minimum WARP version required | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---------- | ---- | +| macOS, Windows | WARP with Gateway | macOS: 1.4.34, Windows: 1.4.33.0 | All plans | -| Prerequisites | -| ------------- | -| The WARP client installed on a user machine and updated to the latest version (minimum version required - macOS: Version 1.4.34 and Windows: Version 1.4.33.0) | -| Carbon Black installed on a user machine | +
+
+Cloudflare for Teams can check if [Carbon Black](https://www.carbonblack.com/) is running on a device to determine if a request should be allowed to reach a protected resource. ## Configuring the Cloudflare integration +Before you start, make sure Carbon Black installed on your machine. + 1. On the [Teams dashboard](https://dash.teams.cloudflare.com), navigate to **My Team > Devices > Device posture**. 1. Select **+Add**. @@ -26,7 +34,7 @@ Cloudflare for Teams can check if [Carbon Black](https://www.carbonblack.com/) i * **Name:** A unique identifier for this Carbon Black device posture check * **Operating system:** You’ll need to configure one posture check per operating system (macOS and Windows currently supported) * **Application Path:** Enter the full path to the Carbon Black process to be checked (for example, `c:\program files\CarbonBlack\CarbonBlack.exe`) - * **Certificate thumbprint (optional):** The thumbprint of the publishing certificate used to sign the binary. This proves the binary came from Carbon Black and is the recommended way to validated the process + * **Certificate thumbprint (optional):** The thumbprint of the publishing certificate used to sign the binary. This proves the binary came from Carbon Black and is the recommended way to validate the process * **SHA256 checksum (optional):** Used to validate the SHA256 signature of the binary. This verifies the binary exactly matches the one you expect to be there. Note: do not fill out this field unless you strictly control updates to Carbon Black, as this will change between versions 1. Once you have configured your Carbon Black instance, you can then add Carbon Black device posture checks to any application protected by Access. diff --git a/products/cloudflare-one/src/content/identity/devices/corp-device.md b/products/cloudflare-one/src/content/identity/devices/corp-device.md index b5c722cecce..0fa4e36b355 100644 --- a/products/cloudflare-one/src/content/identity/devices/corp-device.md +++ b/products/cloudflare-one/src/content/identity/devices/corp-device.md @@ -1,9 +1,21 @@ --- order: 5 +pcx-content-type: how-to --- # Device serial numbers +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---- | +| macOS, Windows, Linux | WARP with Gateway | All plans | + +
+
+ Cloudflare for Teams allows you to build Zero Trust rules based on device serial numbers. You can create these rules so that access to applications is granted only to users connecting from company devices. To create rules based on device serial numbers you'll need to create a list of numbers using the [Lists](/policies/lists) functionality in the Teams Dashboard. @@ -16,11 +28,9 @@ In order for your users to be able to authenticate, you must [deploy the WARP ag -1. On the [Teams dashboard](https://dash.teams.cloudflare.com), navigate to **Configuration > Lists**. +1. On the [Teams dashboard](https://dash.teams.cloudflare.com), navigate to **My Team > Lists**. -1. Click **Create manual list** or **Upload CSV**. For larger teams, we recommend uploading a CSV or using Cloudflare's API endpoint. - - ![Add List](../../static/zero-trust-security/corp-device/list-start.png) +1. Click **Create manual list** or **Upload CSV**. For larger teams, it is recommended to upload a CSV or use Cloudflare's API endpoint. 1. Give your list a descriptive name, as this name will appear when configuring your Access policies. @@ -36,7 +46,7 @@ In order for your users to be able to authenticate, you must [deploy the WARP ag Once saved, the serial number list will appear in your list view. - ![Saved List](../../static/zero-trust-security/corp-device/list-save-list.png) + ![List](../../static/zero-trust-security/corp-device/list-saved.png) Now you can create or update an existing Access policy to require that any device requesting access belongs to your list of serial numbers. @@ -62,4 +72,3 @@ To do that: Once saved, any device attempting to reach the application will need to connect from a device that uses Cloudflare WARP and presents a serial number in the list created. - diff --git a/products/cloudflare-one/src/content/identity/devices/crowdstrike.md b/products/cloudflare-one/src/content/identity/devices/crowdstrike.md index 14c9356b1e5..d97fdd1b986 100644 --- a/products/cloudflare-one/src/content/identity/devices/crowdstrike.md +++ b/products/cloudflare-one/src/content/identity/devices/crowdstrike.md @@ -1,19 +1,27 @@ --- order: 4 +pcx-content-type: how-to --- # CrowdStrike -Cloudflare for Teams can check if [CrowdStrike](https://www.crowdstrike.com/) is running on a device to determine if a request should be allowed to reach a protected resource. +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | Minimum WARP version required | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---------- | ---- | +| macOS, Windows | WARP with Gateway | macOS: 1.4.27, Windows: 1.4.25.0 | All plans | -| Prerequisites | -| ------------- | -| The WARP client installed on a user machine and updated to the latest version (minimum version required - Windows: 1.4.25.0, macOS: 1.4.27) | -| CrowdStrike installed on a user machine | +
+
+Cloudflare for Teams can check if [CrowdStrike](https://www.crowdstrike.com/) is running on a device to determine if a request should be allowed to reach a protected resource. ## Configuring the Cloudflare integration +Before you start, make sure CrowdStrike installed on your machine. + 1. On the [Teams dashboard](https://dash.teams.cloudflare.com), navigate to **My Team > Devices > Device posture**. 1. Select **+Add**. @@ -26,7 +34,7 @@ Cloudflare for Teams can check if [CrowdStrike](https://www.crowdstrike.com/) is * **Name:** A unique identifier for this CrowdStrike device posture check * **Operating system:** You’ll need to configure one posture check per operating system (macOS and Windows currently supported) * **Application Path:** Enter the full path to the CrowdStrike process to be checked (for example, `c:\program files\CrowdStrike\CrowdStrike.exe`) - * **Certificate thumbprint (optional):** The thumbprint of the publishing certificate used to sign the binary. This proves the binary came from CrowdStrike and is the recommended way to validated the process + * **Certificate thumbprint (optional):** The thumbprint of the publishing certificate used to sign the binary. This proves the binary came from CrowdStrike and is the recommended way to validate the process * **SHA256 checksum (optional):** Used to validate the SHA256 signature of the binary. This verifies the binary exactly matches the one you expect to be there. Note: do not fill out this field unless you strictly control updates to CrowdStrike, as this will change between versions 1. Once you have configured your CrowdStrike instance, you can then add CrowdStrike device posture checks to any application protected by Access. diff --git a/products/cloudflare-one/src/content/identity/devices/disk-encryption.md b/products/cloudflare-one/src/content/identity/devices/disk-encryption.md new file mode 100644 index 00000000000..beccab7bba8 --- /dev/null +++ b/products/cloudflare-one/src/content/identity/devices/disk-encryption.md @@ -0,0 +1,32 @@ +--- +order: 15 +pcx-content-type: how-to +title: Disk Encryption +--- + +# Disk Encryption (beta) + +
+Feature availability +
+ +| Status | Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| --- | ----------------- | --------- | ---- | +| Beta | macOS, Windows, Linux | WARP with Gateway | All plans | + +
+
+ +The Disk Encryption device posture attribute ensures that disks are encrypted on a device. + +To enable the Disk Encryption check: + +1. On the Teams Dashboard, navigate to **My Team** > **Devices** > **Device posture**. +1. Click **+Add**. +1. Select **Disk Encryption**. +1. Enter a descriptive name for the check. +1. Select your operating system. +1. Toggle on the **Enable Disk Encryption** switch. +1. Click **Save**. + +Your device posture attribute is now visible on the **Device posture** page. \ No newline at end of file diff --git a/products/cloudflare-one/src/content/identity/devices/domain-joined.md b/products/cloudflare-one/src/content/identity/devices/domain-joined.md new file mode 100644 index 00000000000..dccf2eaa710 --- /dev/null +++ b/products/cloudflare-one/src/content/identity/devices/domain-joined.md @@ -0,0 +1,31 @@ +--- +order: 14 +pcx-content-type: how-to +title: Domain Joined +--- + +# Domain Joined (beta) + +
+Feature availability +
+ +| Status | Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| --- | ----------------- | --------- | ---- | +| Beta | Windows | WARP with Gateway | All plans | + +
+
+ +The Domain Joined device posture attribute ensures that a user is a member of a specific Windows Active Directory domain. + +To enable the Domain Joined check: + +1. On the Teams Dashboard, navigate to **My Team** > **Devices** > **Device posture**. +1. Click **+Add**. +1. Select **Domain Joined**. +1. Enter a descriptive name for the check. +1. Enter the domain you want Domain Joined to check for. +1. Click **Save**. + +Your device posture attribute is now visible on the **Device posture** page. diff --git a/products/cloudflare-one/src/content/identity/devices/file-check.md b/products/cloudflare-one/src/content/identity/devices/file-check.md new file mode 100644 index 00000000000..c5ce79bfc6d --- /dev/null +++ b/products/cloudflare-one/src/content/identity/devices/file-check.md @@ -0,0 +1,103 @@ +--- +order: 12 +pcx-content-type: how-to +--- + +# File Check + +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---- | +| macOS, Windows, Linux | WARP with Gateway | All plans | + +
+
+ + + +The File Check device posture attribute checks for the presence of a file on a device. + +To enable File Check: + +1. On the Teams Dashboard, navigate to **My Team** > **Devices** > **Device posture**. +1. Click **+Add**. +1. Select **File Check**. +1. Enter a descriptive name for the check. +1. Select your operating system. +1. Enter a file path (for example: `c:\my folder\myfile.exe`). +1. Next, you can choose to enter a [**Signing certificate thumbprint**](#determine-the-signing-thumbprint). + + Adding this information will enable the check to ensure that the file was signed by the expected software developer. + +1. You can also opt to enter a [**SHA-256** value](#determine-the-sha-256-value). + + This enables the check to ensure the integrity of the binary file on the device. + +1. Click **Save**. + +Your device posture attribute is now visible on the **Device posture** page. + +## Determine the signing thumbprint + +The process to determine the signing thumbprint of a file varies depending on the operating system. This is how you would look up the signing thumbprint of the Cloudflare WARP application on macOS and Windows. + +### On macOS + +1. Create a directory. + + ```sh + $ ~/Desktop % mkdir tmp + + $ ~/Desktop % cd tmp + ``` + +1. Run the following command to extract certificates for the WARP application: + + ```sh + $ ~/Desktop/tmp % codesign -d --extract-certificates "/Applications/Cloudflare WARP.app/Contents/Resources/CloudflareWARP" Executable=/Applications/Cloudflare WARP.app/Contents/Resources/CloudflareWARP + ``` + +1. Next, run the following commant to extract the SHA1 thumbprint: + + ```sh + $ ~/Desktop/tmp % openssl x509 -inform DER -in codesign0 -fingerprint -sha1 -noout | tr -d : + SHA1 Fingerprint=FE2C359D79D4CEAE6BDF7EFB507326C6B4E2436E + ``` + +### On Windows + +1. Open a PowerShell window. +1. Use the `Get-AuthenticodeSignature` command to find the thumbprint. For example: + +```txt +Get-AuthenticodeSignature -FilePath c:\myfile.exe +``` + +## Determine the SHA-256 value + +The SHA-256 value almost always changes between versions of a file/application. + +### On macOS + +1. Open a Terminal window. +1. Use the `shasum` command to find the SHA256 value of the file. For example: + +```sh +$ shasum -a 256 myfile +``` + +### On Windows + +1. Open a PowerShell window. +1. Use the `get-filehash` command to find the SHA256 value of the file. For example: + +```txt +get-filehash -path "C:\myfile.exe" -Algorithm SHA256 | format-list +``` diff --git a/products/cloudflare-one/src/content/identity/devices/firewall.md b/products/cloudflare-one/src/content/identity/devices/firewall.md new file mode 100644 index 00000000000..ccea7f43f8d --- /dev/null +++ b/products/cloudflare-one/src/content/identity/devices/firewall.md @@ -0,0 +1,32 @@ +--- +order: 16 +pcx-content-type: how-to +title: Firewall +--- + +# Firewall (beta) + +
+Feature availability +
+ +| Status | Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| --- | ----------------- | --------- | ---- | +| Beta | macOS, Windows | WARP with Gateway | All plans | + +
+
+ +The Firewall device posture attribute ensures that a firewall is running on a device. + +To enable the Firewall check: + +1. On the Teams Dashboard, navigate to **My Team** > **Devices** > **Device posture**. +1. Click **+Add**. +1. Select **Firewall**. +1. Enter a descriptive name for the check. +1. Select your operating system. +1. Toggle on the **Enable firewall check** switch. +1. Click **Save**. + +Your device posture attribute is now visible on the **Device posture** page. \ No newline at end of file diff --git a/products/cloudflare-one/src/content/identity/devices/index.md b/products/cloudflare-one/src/content/identity/devices/index.md index 3baa37ec045..14434daa6d8 100644 --- a/products/cloudflare-one/src/content/identity/devices/index.md +++ b/products/cloudflare-one/src/content/identity/devices/index.md @@ -1,11 +1,35 @@ --- order: 3 +pcx-content-type: how-to +title: Device posture --- -# Device posture +# Device posture attributes -Cloudflare for Teams can integrate with endpoint protection providers to check requests for device posture. This allows you to configure security policies that rely on additional signals from endpoint security providers to allow or deny connections to your applications. +With Teams, you can configure Zero Trust policies that rely on additional signals from endpoint security providers to allow or deny connections to your applications. -When device posture checks are configured, users will only be allowed to connect to a protected application when they are using a managed or healthy device, as determined by the endpoint security provider. +When device posture checks are configured, users can only connect to a protected application if they have a managed or healthy device, as determined by the endpoint security provider associated to the Zero Trust policy regulating access to the protected application. - \ No newline at end of file +To enable one or more device posture attributes, navigate to **My Team** > **Devices** > **Device posture** on the [Teams Dashboard](https://dash.teams.cloudflare.com) and click **+Add**. + + + +## Available device posture attributes + + + +## Verify device posture checks in the WARP client + +On desktop clients, you can always verify which device posture checks are active on your devices. To do that: + +1. Open the WARP client. +1. Go to **Settings** > **Advanced**. +1. Click on **Device posture information**. + +This will show a list of active device posture checks. + + ![Device posture attributes](../../static/documentation/identity/devices/device-posture-client-ui.png) diff --git a/products/cloudflare-one/src/content/identity/devices/mutual-tls-authentication.md b/products/cloudflare-one/src/content/identity/devices/mutual-tls-authentication.md index f444504eb61..9ad9b292ca1 100644 --- a/products/cloudflare-one/src/content/identity/devices/mutual-tls-authentication.md +++ b/products/cloudflare-one/src/content/identity/devices/mutual-tls-authentication.md @@ -1,9 +1,21 @@ --- -order: 2 +order: 4 +pcx-content-type: how-to --- # Mutual TLS +
+Feature availability +
+ +| Operating Systems | [WARP mode required](/connections/connect-devices/warp#warp-client-modes) | [Teams plans](https://www.cloudflare.com/teams-pricing/) | +| ----------------- | --------- | ---- | +| All sytems | WARP not required | Enterprise plans | + +
+
+ diff --git a/products/cloudflare-one/src/content/tutorials/ssh-service-token.md b/products/cloudflare-one/src/content/tutorials/ssh-service-token.md index 3db806eddbc..a114506d993 100644 --- a/products/cloudflare-one/src/content/tutorials/ssh-service-token.md +++ b/products/cloudflare-one/src/content/tutorials/ssh-service-token.md @@ -1,6 +1,7 @@ --- updated: 2021-01-04 category: 🔐 Zero Trust +pcx-content-type: tutorial --- # Service tokens for SSH connections @@ -68,7 +69,5 @@ You can use the `Client ID` and `Client Secret` to connect to the resource over The following `cloudflared` command is structured to use the Service Token generated to connect over SSH to the GitLab instance previously configured. The command relies on the [SSH configuration file being set](/tutorials/gitlab#configuring-ssh) to proxy the connection through `cloudflared`. ```sh - -cloudflared access ssh --hostname gitlab-ssh.widgetcorp.tech --id a61c032ee4510f8b7e2749ea0896cc14.access --secret 85dcb2301975e8b8e40deb6097645995aa4bed35c2badf098028652097c69eeb - +$ cloudflared access ssh --hostname gitlab-ssh.widgetcorp.tech --id a61c032ee4510f8b7e2749ea0896cc14.access --secret 85dcb2301975e8b8e40deb6097645995aa4bed35c2badf098028652097c69eeb ``` \ No newline at end of file diff --git a/products/cloudflare-one/src/content/tutorials/ssh.md b/products/cloudflare-one/src/content/tutorials/ssh.md index ed8dfec37bd..59ae53776e5 100644 --- a/products/cloudflare-one/src/content/tutorials/ssh.md +++ b/products/cloudflare-one/src/content/tutorials/ssh.md @@ -1,6 +1,7 @@ --- updated: 2021-03-23 category: 🔐 Zero Trust +pcx-content-type: tutorial --- # Connect through Cloudflare Access over SSH @@ -33,7 +34,7 @@ Choose **Self-hosted** on the next page. ![Add App](../static/zero-trust-security/ssh/add-app.png) -Input a subdomain where your application will be availble to users. +Input a subdomain that will become the hostname where your application will be available to users. ![Configure](../static/zero-trust-security/ssh/configure-app.png) @@ -45,20 +46,22 @@ Finally, click **Save** to save the policy. You can return to edit the policy to ![Save](../static/zero-trust-security/ssh/save-app.png) -## Install `cloudflared` +## Install `cloudflared` on the server -Cloudflare Argo Tunnel creates a secure, outbound-only, connection between this machine and Cloudflare's network. With an outbound-only model, you can prevent any direct access to this machine and lock down any externally exposed points of ingress. And with that, no open firewall ports. +Cloudflare Tunnel creates a secure, outbound-only, connection between this machine and Cloudflare's network. With an outbound-only model, you can prevent any direct access to this machine and lock down any externally exposed points of ingress. And with that, no open firewall ports. -Argo Tunnel is made possible through a lightweight daemon from Cloudflare called `cloudflared`. Download and then install `cloudflared` with the commands below. You can find releases for other operating systems [here](https://github.com/cloudflare/cloudflared/releases). +Cloudflare Tunnel is made possible through a lightweight daemon from Cloudflare called `cloudflared`. Download and then install `cloudflared` with the commands below. You can find instructions for installing `cloudflared` on other operating systems [here](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation). The release history can be found [here](https://github.com/cloudflare/cloudflared/releases). + +For example, `cloudflared` can be installed on Debian and its derivatives with these commands: ```sh -$ sudo wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb -$ sudo dpkg -i ./cloudflared-stable-linux-amd64.deb +$ sudo wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb +$ sudo dpkg -i ./cloudflared-linux-amd64.deb ``` ## Authenticate `cloudflared` -Run the following command to authenticate cloudflared into your Cloudflare account. +Run the following command on the server to authenticate cloudflared into your Cloudflare account. ```sh $ cloudflared tunnel login @@ -68,15 +71,15 @@ $ cloudflared tunnel login Choose any hostname presented in the list. Cloudflare will issue a certificate scoped to your account. You do not need to pick the specific hostname where you will serve the Tunnel. -## Create an Argo Tunnel +## Create a Tunnel -Next, [create an Argo Tunnel](/connections/connect-apps/create-tunnel) with the command below. +Next, [create a Tunnel](/connections/connect-apps/create-tunnel) on the server with the command below. ```sh $ cloudflared tunnel create ``` -Replacing `` with a name for the Tunnel. This name can be any value. A single Argo Tunnel can also serve traffic for multiple hostnames to multiple services in your environment, including a mix of connection types like SSH and HTTP. +Replacing `` with a name for the Tunnel. This name can be any value. A single Tunnel can also serve traffic for multiple hostnames to multiple services in your environment, including a mix of connection types like SSH and HTTP. The command will output an ID for the Tunnel and generate an associated credentials file. At any time you can list the Tunnels in your account with the following command. @@ -165,8 +168,8 @@ You can now test the SSH flow by running a command to reach the service. When th Cloudflare can render an SSH client in your browser without the need for client software or end user configuration changes. -To enable, navigate to the application page of the Access section in the Cloudflare for Teams dashboard. Click **Edit** and select the Settings tab. In the `cloudflared settings` card, toggle `Enable browser rendering` to on. +To enable, navigate to the application page of the Access section in the Cloudflare for Teams dashboard. Click **Edit** and select the Settings tab. In the **`cloudflared` settings** card, select *SSH* from the **Browser Rendering** drop-down menu. -![Auto Auth](../static/documentation/applications/render-browser.png) +![Auto Auth](../static/documentation/applications/ssh-browser-rendering.png) -Once enabled, when users authenticate and visit the URL of the application, Cloudflare will render a terminal in their browser. \ No newline at end of file +Once enabled, when users authenticate and visit the URL of the application, Cloudflare will render a terminal in their browser. diff --git a/products/cloudflare-one/src/content/tutorials/user-diagnostics.md b/products/cloudflare-one/src/content/tutorials/user-diagnostics.md index a78c7edf628..083b86e2be9 100644 --- a/products/cloudflare-one/src/content/tutorials/user-diagnostics.md +++ b/products/cloudflare-one/src/content/tutorials/user-diagnostics.md @@ -2,16 +2,17 @@ updated: 2020-12-13 category: 🔐 Zero Trust difficulty: Advanced +pcx-content-type: tutorial --- # Troubleshoot user login details -Cloudflare Access provides a user-facing portal, the [Access App Launcher](https://blog.cloudflare.com/announcing-the-cloudflare-access-app-launch/), which displays all applications that a user can reach in a single view. The same portal also can be used by a member of your team to gather diagnostic information about their account for troubleshooting. +Cloudflare Access provides a user-facing portal, the [App Launcher](https://blog.cloudflare.com/announcing-the-cloudflare-access-app-launch/), which displays all applications that a user can reach in a single view. The same portal also can be used by a member of your team to gather diagnostic information about their account for troubleshooting. **🗺️ This tutorial covers how to:** -* Configure the Access App Launcher -* Visit the Access App Launcher as an end user +* Configure the App Launcher +* Visit the App Launcher as an end user * Review login diagnostics as an end user **⏲️Time to complete:** @@ -20,23 +21,23 @@ Cloudflare Access provides a user-facing portal, the [Access App Launcher](https --- -## Configure Cloudflare Access App Launcher +## Configure the App Launcher -To enable the Cloudflare Access App Launch, navigate to the Cloudflare for Teams dashboard. Open the `Authentication` page in the Access section of the sidebar. +1. On the Teams Dashboard, navigate to **Settings > Authentication**. -![Auth Page](../static/zero-trust-security/user-diagnostics/auth-page.png) +1. Under **App Launcher**, click the **Manage**. -Click the **App Launcher** tab. The App Launcher works like other Access policies - you can define who is able to reach the App Launcher. When users visit the App Launcher, Cloudflare Access will display only the applications they have permission to reach. + The App Launcher works like other Access policies - you can define who is able to reach the App Launcher. When users visit the App Launcher, Cloudflare Access will display only the applications they have permission to reach. -![App Launch](../static/zero-trust-security/user-diagnostics/app-launch-page.png) +1. To define who is able to use the App Launcher, add a new rule. -To define who is able to use the App Launcher, add a new rule. + ![Add Rule](../static/zero-trust-security/user-diagnostics/add-new-rule.png) -![Add Rule](../static/zero-trust-security/user-diagnostics/add-rule.png) +1. Once you have defined at least one rule, click **Save**. Your rule will appear under the **App Launcher rules** list. -Once you have defined at least one rule, click **Save application**. + ![Add Rule](../static/zero-trust-security/user-diagnostics/app-launcher-rules.png) -![Add Rule](../static/zero-trust-security/user-diagnostics/save-app.png) +1. Click **Save** to finalize your edits. ## Visiting the Access App Launcher diff --git a/products/cloudflare-one/src/content/tutorials/vnc-client-in-browser.md b/products/cloudflare-one/src/content/tutorials/vnc-client-in-browser.md new file mode 100644 index 00000000000..03f065c88ba --- /dev/null +++ b/products/cloudflare-one/src/content/tutorials/vnc-client-in-browser.md @@ -0,0 +1,192 @@ +--- +updated: 2021-06-18 +category: 🔐 Zero Trust +difficulty: Advanced +pcx-content-type: tutorial +--- + +# Render a VNC client in browser + +Cloudflare can render a Virtual Network Computer (VNC) terminal in your browser without any client software or configuration required. + +Administrators can use Cloudflare Tunnel to connect a VNC host to Cloudflare’s network. Using Cloudflare Access, you can apply Zero Trust policies to determine who can access your VNC server. Cloudflare’s network will then enforce the Zero Trust policies and, when a user is allowed, render the client in the browser. + +**🗺️ This walkthrough covers how to:** +- Install and run a Cloudflare Tunnel on a Linux virtual machine +- Install and configure VNC on a Linux virtual machine +- Build a Zero Trust policy to determine who can reach the host +- Render the VNC server in your browser + +**⏲️ Time to complete:** + +10 minutes + + + +## Before you start + +1. [Add a website to Cloudflare](https://support.cloudflare.com/hc/en-us/articles/201720164-Creating-a-Cloudflare-account-and-adding-a-website) +1. [Enable Cloudflare for Teams on your account](/setup) +1. [Connect your identity provider to Cloudflare for Teams](/identity/sso-integration) + +## Configure VNC on your virtual machine + +This section covers how to install a VNC server with TightVNC and the Gnome User Interface. If you already have a VNC server installed, you can skip this step. + +1. Open a terminal window for your VM. + +1. Run the following commands to install the VNC software. + + ```bash + $ sudo apt-get update + ``` + + ```bash + $ sudo apt-get install gnome-core + ``` + + ```bash + $ sudo apt install tightvncserver + ``` + + ```bash + $ sudo apt-get install gnome-panel + ``` + + ```bash + $ sudo apt-get install ubuntu-gnome-desktop + ``` + +1. Once installed, you can create the VNC server instance with the following command: + + ```bash + $ sudo tightvncserver + ``` + ![VNC password](../static/zero-trust-security/vnc-client-in-browser/vnc-password.png) + +1. Select a password for the VNC server. This password will be used during login for your browser VNC server. + +1. Run the following command, which will take you to your VNC server configuration directory. + + ```bash + $ cd .vnc + ``` + +1. Open your `xstartup` file. + + ```bash + $ vim xstartup + ``` + +1. Update the file to the following configuration (this is for demonstration purposes, browser based VNC will work with most configurations): + + ```txt + xsetroot -solid grey + x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & + #x-window-manager & + + # Fix to make GNOME work + export XKL_XMODMAP_DISABLE=1 + /etc/X11/Xsession + + #gnome-session & + gnome-panel & + nautilus & + ``` + + ![VNC xstartup file](../static/zero-trust-security/vnc-client-in-browser/vnc-xstartup.png) + +1. Run the following command to create your VNC server: + + ```bash + $ vncserver + ``` + +At this point, you have a VNC server ready to test with browser-based VNC. We recommend performing a brief test with an existing VNC browser to verify any missing packages or configuration changes that might need to be made before continuing. Once your VNC server appears as desired, continue with your setup. + +## Configure Cloudflare Tunnel on your machine + +1. Follow [these instructions](/connections/connect-apps/install-and-setup/installation#build-from-source) to install `cloudflared` + +1. Authenticate `cloudflared` with the command: + + ```bash + $ cloudflared tunnel login + ``` + +1. Create a Tunnel with the command: + + ```bash + $ cloudflared tunnel create + ``` + +1. Create a Tunnel configuration file with the command: + + ```bash + $ vim config.yml + ``` + +1. Add the following configuration to your configuration file. + + ```txt + tunnel: + ingress: + - hostname: vnc.kennyatx.com + service: tcp://localhost:5901 + - service: http_status:404 + ``` + + As you do that, replace the `hostname` value with the domain you wish to use to expose your VNC server in the browser. Also, replace `5901` with the port your VNC server is running on. To get a list of ports, run `sudo ss -lnpt` and look for `VNC` to get the value that should be specified in your configuration file. + +1. [Route your Tunnel](/connections/connect-apps/routing-to-tunnel/dns) to your website. + +1. Run your Tunnel: + + ```bash + $ cloudflared tunnel --config path/config.yaml run + ``` + + ![Run Tunnel](../static/zero-trust-security/vnc-client-in-browser/vnc-run-tunnel.png) + +1. Follow [this guide](/connections/connect-apps/configuration/ports-and-ips) to open outbound connections for Cloudflare Tunnel if you have a firewall enabled. + +At this point you have a running VNC server and a Cloudflare Tunnel on your machine ready to accept inbound VNC requests. + +## Create a Zero Trust VNC application + +The last step is to create a Zero Trust application to run your VNC server in the Browser. + +1. Open your [Teams Dashboard](https://dash.teams.cloudflare.com) and go to the **Access > Applications** tab. + +1. Click **Add an application**. + +1. Select **Self-hosted**. + +1. Name the application and set the domain to which you would like to expose the VNC server: + + ![Name application](../static/zero-trust-security/vnc-client-in-browser/vnc-domain-application.png) + +1. Add a Zero Trust policy. In this example we are only allowing users with emails ending in `@example.com`. + + ![Create policy](../static/zero-trust-security/vnc-client-in-browser/vnc-policy.png) + +1. In **`cloudflared` settings**, set **Application Type** to be *VNC*. + +And now you are ready to use the VNC terminal directly in the browser. Users will first see a login screen with your configured identity providers: + +![VNC login screen](../static/zero-trust-security/vnc-client-in-browser/vnc-login-screen.png) + +After successful authentication, they may be prompted to enter the VNC server’s password: + +![VNC password prompt](../static/zero-trust-security/vnc-client-in-browser/vnc-server-password.png) + + +Then your user will be directed into your VNC server: + +![VNC server](../static/zero-trust-security/vnc-client-in-browser/vnc-server.png) + +You’ve now successfully deployed a Zero Trust VNC server in the browser. You can define granular access controls across each individual VNC instance. diff --git a/products/cloudflare-one/src/content/tutorials/warp-to-tunnel.md b/products/cloudflare-one/src/content/tutorials/warp-to-tunnel.md index 03c89690b7b..cd7dc638932 100755 --- a/products/cloudflare-one/src/content/tutorials/warp-to-tunnel.md +++ b/products/cloudflare-one/src/content/tutorials/warp-to-tunnel.md @@ -2,13 +2,14 @@ updated: 2021-03-23 category: 🌐 Connections difficulty: Advanced +pcx-content-type: tutorial --- -# Connect from WARP to a private network on Cloudflare using Argo Tunnel +# Connect from WARP to a private network on Cloudflare using Cloudflare Tunnel -You can use [Argo Tunnel](/connections/connect-apps) to connect applications and services to Cloudflare's network. Argo Tunnel relies on a piece of software, `cloudflared`, to create those connections. +You can use [Cloudflare Tunnel](/connections/connect-apps) to connect applications and services to Cloudflare's network. Cloudflare Tunnel relies on a piece of software, `cloudflared`, to create those connections. -You can create and configure Argo Tunnel connections to [support multiple HTTP origins](/tutorials/multi-origin) or [multiple protocols simultaneously](/tutorials/gitlab). You can also use Argo Tunnel to connect any service that relies on a TCP-based protocol to Cloudflare's network. Users in your organization can then reach the service by enrolling into your organization's Cloudflare for Teams account and using the WARP agent. +You can create and configure Cloudflare Tunnel connections to [support multiple HTTP origins](/tutorials/multi-origin) or [multiple protocols simultaneously](/tutorials/gitlab). You can also use Cloudflare Tunnel to connect any service that relies on a TCP-based protocol to Cloudflare's network. Users in your organization can then reach the service by enrolling into your organization's Cloudflare for Teams account and using the WARP agent. Once enrolled, user endpoints will be able to connect to private [RFC 1918](https://tools.ietf.org/html/rfc1918) IP space and other ranges that you control. Applications running on those endpoints will be able to reach those private IPs as well in a private network model. Coming soon, administrators will be able to build Zero Trust rules to determine who within your organization can reach those IPs. @@ -32,7 +33,7 @@ Once enrolled, user endpoints will be able to connect to private [RFC 1918](http ## Install `cloudflared` -Start by [downloading and installing](/connections/connect-apps/install-and-setup) the Argo Tunnel daemon, `cloudflared`. On Mac, you can do so by running the following `brew` command. If you do not have Homebrew, follow the [documentation](https://docs.brew.sh/Installation) to install it. +Start by [downloading and installing](/connections/connect-apps/install-and-setup) the Cloudflare Tunnel daemon, `cloudflared`. On Mac, you can do so by running the following `brew` command. If you do not have Homebrew, follow the [documentation](https://docs.brew.sh/Installation) to install it. `$ brew install cloudflare/cloudflare/cloudflared` @@ -46,7 +47,7 @@ The command will launch a browser window and prompt you to login with your Cloud Once you click one of the sites in your account, Cloudflare will download a certificate file, called `cert.pem` to authenticate this instance of `cloudflared`. The `cert.pem` file uses a certificate to authenticate your instance of `cloudflared` and includes an API key for your account to perform actions like DNS record changes. -You can now use `cloudflared` to control Argo Tunnel connections in your Cloudflare account. +You can now use `cloudflared` to control Cloudflare Tunnel connections in your Cloudflare account. ![Download Cert](../static/secure-origin-connections/share-new-site/cert-download.png) @@ -56,9 +57,9 @@ You can now use `cloudflared` to control Argo Tunnel connections in your Cloudfl ## Create a Tunnel -You can now [create an Argo Tunnel](/connections/connect-apps/create-tunnel) that will connect `cloudflared` to Cloudflare's edge. +You can now [create a Tunnel](/connections/connect-apps/create-tunnel) that will connect `cloudflared` to Cloudflare's edge. -Begin by [creating an Argo Tunnel](/connections/connect-apps/create-tunnel) with an associated name. This example uses the name `grafana`. +Begin by [creating a Tunnel](/connections/connect-apps/create-tunnel) with an associated name. This example uses the name `grafana`. ```bash cloudflared tunnel create grafana @@ -74,9 +75,9 @@ cloudflared tunnel list ![List Tunnel](../static/secure-origin-connections/warp-to-tunnel/list-tunnel.png) -Next, you will need to create a route. Routes map a Tunnel ID to a CIDR range that you specify. You can use private IP space specified by [RFC 1918](https://tools.ietf.org/html/rfc1918) or other routes. The private IP space specified should match the private IP space of your subnet or environment where Argo Tunnel will send connections. +Next, you will need to create a route. Routes map a Tunnel ID to a CIDR range that you specify. You can use private IP space specified by [RFC 1918](https://tools.ietf.org/html/rfc1918) or other routes. The private IP space specified should match the private IP space of your subnet or environment where Cloudflare Tunnel will send connections. -This example tells Argo Tunnel that, for users in this organization, connections to `100.64.0.0/10` should be served by this Tunnel. For the purposes of this tutorial, Grafana is running in a Digital Ocean environment where a virtual interface has been applied that will send traffic bound for localhost to `100.64.0.1`. +This example tells Cloudflare Tunnel that, for users in this organization, connections to `100.64.0.0/10` should be served by this Tunnel. For the purposes of this tutorial, Grafana is running in a Digital Ocean environment where a virtual interface has been applied that will send traffic bound for localhost to `100.64.0.1`. ```bash cloudflared tunnel route ip add 100.64.0.0/10 8e343b13-a087-48ea-825f-9783931ff2a5 @@ -115,17 +116,89 @@ This example runs it from the command-line but we recommend running `cloudflared ## Route private IP ranges through WARP + + Users can reach this private service by logging into their Cloudflare for Teams account and the WARP agent. By default, Cloudflare WARP excludes traffic bound for RFC 1918 space and certain other routes as part of its [Split Tunnel feature](/tutorials/split-tunnel). To use this feature the IPs that you specified for your Tunnel must be included which will send traffic for those destinations through the WARP agent and to the Tunnel. -Navigate to the `Policies` page of the Gateway section in the Cloudflare for Teams dashboard. Click the **Settings** tab. The IP ranges listed are those that Cloudflare excludes by default. Choose the range being used for this private connection and delete it. +1. On the Teams Dashboard, navigate to **Settings > Network**. -![Split Tunnel](../static/secure-origin-connections/warp-to-tunnel/split-tunnel.png) +1. Click **Manage**. The IP ranges listed are those that Cloudflare excludes by default. Choose the range being used for this private connection and delete it. -## Connect via WARP +![Split Tunnel](../static/secure-web-gateway/split-tunnel/split-tunnel-entries.png) + +## Integrate your identity provider + +Users can now connect over this private network by [enrolling their devices into the WARP agent](/connections/connect-devices/warp) in the same account as the Cloudflare Tunnel configuration. They must use the `Gateway with WARP` mode. + +You can begin to [enroll devices](/connections/connect-devices/warp/deployment) by determining which users are allowed to enroll. + +Navigate to the `Settings` section of the Cloudflare for Teams dashboard and select `Authentication`. Cloudflare for Teams will automatically create a "One-time PIN" option which will rely on your user's emails. You can begin using the one-time PIN option immediately or you can also integrate your corporate [identity provider](/identity/idp-integration). + +## Determine which devices can enroll + +Next, build a rule to decide which devices can enroll in your account. + +1. Navigate to **Settings > Devices > Device enrollment**. + + ![Device settings](../static/secure-web-gateway/block-football/device-enrollment-settings.png) + +1. Click **Manage**. + +1. Click **Add a rule**. + + ![Device Enrollment](../static/secure-web-gateway/block-football/device-enrollment-add-rule.png) + + Determine who is allowed to enroll by using criteria including Access groups, groups from your identity provider, email domain, or named users. This example allows any user with a `@cloudflare.com` account to enroll. + + ![Allow Cloudflare users](../static/secure-web-gateway/block-football/allow-cf-users.png) + +1. Click **Save**. -Users can now connect over this private network by [enrolling their devices into the WARP agent](https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp) in the same account as the Argo Tunnel configuration. They must use the `Gateway with WARP` mode. A specific tutorial for enrollment is also [available](https://developers.cloudflare.com/cloudflare-one/tutorials/block-football-users). +Your rule will now be visible under the **Device enrollment rules** list. + +## Configure the Cloudflare certificate + +To inspect traffic, Cloudflare Gateway requires that a [certificate be installed](/connections/connect-devices/warp/install-cloudflare-cert) on enrolled devices. You can also distribute this certificate through an MDM provider. The example below describes the manual distribution flow. + +To download the Cloudflare certificate: +* Follow the link provided in [these instructions](/connections/connect-devices/warp/install-cloudflare-cert). +* Find the certificate in the Teams Dashboard, by navigating to **Settings > Devices > Certificates**. + +## Enable the Cloudflare proxy + +Once the certificate has been installed, you can configure Gateway to inspect HTTP traffic. To do so, navigate to **Settings > Network**. Toggle **Proxy** to *Enabled*. This will tell Cloudflare to begin proxying any traffic from enrolled devices, except the traffic excluded using the [split tunnel](/connections/connect-devices/warp/exclude-traffic) settings. + +Next, enable TLS decryption. This will tell Cloudflare to begin decrypting traffic for inspection from enrolled devices, except the traffic excluded from inspection. + +![Policy settings](../static/secure-web-gateway/block-football/enable-proxy-decrypt.png) + +## Enroll a device + +1. Follow the [instructions](/connections/connect-devices/warp/deployment) to install the WARP client depending on your device type. Cloudflare Gateway does not need a special version of the client. + +1. Once the client is installed, click the gear icon. + + ![WARP](../static/secure-web-gateway/secure-dns-devices/warp.png) + +1. Under the **Account** tab, click **Login with Cloudflare for Teams**. + + ![Account View](../static/secure-web-gateway/secure-dns-devices/account-view.png) + +1. Input your [team name](/glossary#team-name). You can find it on the Teams Dashboard under **Settings > General**. + + ![Team Name](../static/secure-web-gateway/secure-dns-devices/org-name.png) + +The user will be prompted to login with the identity provider configured in Cloudflare Access. Once authenticated, the client will update to `Teams` mode. You can click the gear to toggle between DNS filtering or full proxy. In this use case, you must toggle to `Gateway with WARP`. These settings can be configured globally for an organization through a device management platform. + +![Confirm WARP](../static/secure-web-gateway/block-football/warp-mode.png) + +## Connect via WARP Once enrolled, they will be able to connect to the private IPs configured for HTTP traffic in this example or arbitrary TCP traffic. diff --git a/products/cloudflare-one/src/content/tutorials/zendesk-sso-saas.md b/products/cloudflare-one/src/content/tutorials/zendesk-sso-saas.md new file mode 100644 index 00000000000..520226668d0 --- /dev/null +++ b/products/cloudflare-one/src/content/tutorials/zendesk-sso-saas.md @@ -0,0 +1,78 @@ +--- +updated: 2021-08-03 +category: 🔐 Zero Trust +difficulty: Advanced +pcx-content-type: tutorial +--- + +# Configure Zendesk SSO with Access for SaaS + +This tutorial covers how to configure Zendesk SSO with Access for SaaS. + + + +**⏲️ Time to complete:** + +20 minutes + +## Configure Zendesk and Cloudflare + +1. To begin, navigate to your Zendesk administrator dashboard, typically available at `.zendesk.com/admin/security/sso`. + +1. In a separate tab or window, open the [Cloudflare for Teams Dashboard](https://dash.teams.cloudflare.com) and navigate to **Access** > **Applications**. + +1. Select *SaaS* as the application type to begin creating a SaaS application. + +1. Copy the following fields from your Zendesk account and input them in the Cloudflare for Teams application configuration: + * **Assertion Consumer Service URL**. This URL appears as `SAML SSO URL` in your Zendesk account. + * **Entity ID**: `https://yoursubdomain.zendesk.com` + * **NameID**: Email + +1. Configure these Attribute Statements to include a user’s first and last name: + + * `` => `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname` + * `` => `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname` + + [Additional Attributes](http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname) can also be synchronized with Zendesk. + + + + ![Zendesk attributes](../static/zero-trust-security/zendesk-sso-saas/zendesk-attributes.png) + +1. Create an Access policy to determine who can access Zendesk. + + ![Zendesk policy](../static/zero-trust-security/zendesk-sso-saas/zendesk-policy.png) + +1. Copy the Cloudflare IdP values and add them to the following Zendesk Fields: + + * SSO Endpoint => SAML SSO URL + * Public Key => Certificate Fingerprint + + + + ![Zendesk fingerprint](../static/zero-trust-security/zendesk-sso-saas/zendesk-fingerprint.png) + +1. Go to `https://.zendesk.com/admin/security/staff_members` and enable **External Authentication** > **Single Sign On**. + + ![Zendesk external authentication](../static/zero-trust-security/zendesk-sso-saas/zendesk-external-auth.png) + + +Users should now be able to log into Zendesk if their Email address exists in the Zendesk user list. diff --git a/products/cloudflare-one/src/content/tutorials/zero-trust-network-access.md b/products/cloudflare-one/src/content/tutorials/zero-trust-network-access.md new file mode 100644 index 00000000000..fe1c4072c64 --- /dev/null +++ b/products/cloudflare-one/src/content/tutorials/zero-trust-network-access.md @@ -0,0 +1,127 @@ +--- +updated: 2021-06-11 +category: 🔐 Zero Trust +difficulty: Advanced +pcx-content-type: tutorial +--- + +# Configure Zero Trust Network Access in Cloudflare for Teams + +In this tutorial we will cover how to configure a Zero Trust Private Network in Cloudflare for Teams by combining device enrollment rules, Cloudflare Tunnels, and identity-based network policies. + +**🗺️ This tutorial covers how to:** + +* Create device enrollment rules and connect a device to Teams +* Connect your private network server to Cloudflare's edge using Cloudflare Tunnels +* Create identity-aware network policies + +**⏲️Time to complete:** + +45 minutes + + + +--- + +## Device enrollment + +The first step is to enroll your devices into the WARP client. The WARP client is responsible for forwarding your traffic to Cloudflare and eventually to your private network. + +1. Define [device enrollment rules](/connections/connect-devices/warp/warp-settings#device-enrollment-permissions) under **Settings > Devices > Device enrollment permissions > Manage**. + + In this example, we require that users have a hard key inserted and are connecting from the United States. + + ![Device enrollment rules](../static/zero-trust-security/ztna/device-enrollment-rules.png) + +1. Enroll your device into your Teams account. To do that, click the WARP icon in your navigation bar, open **Settings** and select **Account > Login** with Cloudflare for Teams. + + ![WARP preferences](../static/zero-trust-security/ztna/warp-preferences.png) + +1. Enable the WARP client on the device to forward traffic to Cloudflare. + + +## Server configuration + +Next, you will need to configure your private network server to connect to Cloudflare’s edge using Cloudflare Tunnel. This will establish a secure outbound connection to Cloudflare. + +1. Identify the server you want to use to securely make your private network available to users. This can be the origin server directly, a jumphost, or load balancer. + +1. If your server or network has a firewall, follow [this guide](/connections/connect-devices/warp/deployment/firewall) to open up the correct ports and IP addresses. Only outbound openings are required. You do not need to open any inbound holes in your firewall. + +1. [Install `cloudflared`](/connections/connect-apps/install-and-setup/installation) on the server. + +1. Authenticate `cloudflared` on the server by running the following command, then follow the prompt to authenticate via URL provided. + + ```sh + $ cloudflared tunnel login + ``` + +1. Next, create a tunnel for the device: + + ```sh + $ cloudflared tunnel create + ``` + +1. Create a YAML config file for the tunnel with the following configuration: + + ```txt + tunnel: + credentials-file: /root/.cloudflared/.json + warp-routing: + enabled: true + ``` + + + +1. Now run the tunnel: + + ```sh + $ cloudflared tunnel run + ``` + + ![Run the Tunnel](../static/zero-trust-security/ztna/run-tunnel.png) + + +## Network configuration + +Finally, you will need to establish the private RFC 1918 IP address or range that you would like to advertise to Cloudflare, as well as set the identity policies determining which users can access that particular IP or range. + +1. Route the private IP addresses of your server’s network to Cloudflare, where: + + * `10.0.0.0/10` is the IP or CIDR range of your server + * `8e343b13-a087-48ea-825f-9783931ff2a5` is your tunnel ID + + ```sh + $ cloudflared tunnel route ip add 10.0.0.0/10 8e343b13-a087-48ea-825f-9783931ff2a5 + ``` + +1. Open your Teams dashboard to the **Gateway > Policies** tab. + + ![First network policy](../static/zero-trust-security/ztna/first-network-policy.png) + +1. [Create a network policy](/policies/filtering/network-policies) to allow traffic from specific users to reach that application. + + ![Second network policy](../static/zero-trust-security/ztna/second-network-policy.png) + +1. Create a second network policy to block all traffic to the IP range that was routed. + + ![Create network policy](../static/zero-trust-security/ztna/create-network-policy.png) + +1. Verify that you do not have the desired target private IP range in the Split Tunnel configuration menu. This menu can be found at **Settings > Network > Split Tunnels**. + + ![Split Tunnel](../static/secure-web-gateway/split-tunnel/split-tunnel-entries.png) + +Your setup is now complete. For more in-depth information on how identity-aware network policies work, read our [dedicated documentation page](/policies/filtering/network-policies). + + diff --git a/products/cloudflare-one/src/content/tutorials/zsh-env-var.md b/products/cloudflare-one/src/content/tutorials/zsh-env-var.md index 527fca7527b..a9cb2a8a2a4 100644 --- a/products/cloudflare-one/src/content/tutorials/zsh-env-var.md +++ b/products/cloudflare-one/src/content/tutorials/zsh-env-var.md @@ -2,11 +2,12 @@ updated: 2021-03-16 category: 🔐 Zero Trust difficulty: Advanced +pcx-content-type: tutorial --- # Output an app's token to a variable with one command -You can use [Argo Tunnel](/connections/connect-apps) to connect applications and servers to Cloudflare's network. Argo Tunnel relies on a piece of software, `cloudflared`, to create those connections. +You can use [Cloudflare Tunnel](/connections/connect-apps) to connect applications and servers to Cloudflare's network. Cloudflare Tunnel relies on a piece of software, `cloudflared`, to create those connections. You can also secure those applications with [Cloudflare Access](/applications/configure-apps/self-hosted-apps). With Cloudflare Access, you can build Zero Trust rules which restrict who can reach your application based on signals like identity, multifactor method, device posture, and geography. @@ -27,7 +28,7 @@ You can also use `cloudflared` to quickly gather the JWT from an application and ## Install `cloudflared` -Start by [downloading and installing](/connections/connect-apps/install-and-setup/installation) the Argo Tunnel daemon, `cloudflared`. On Mac, you can do so by running the following `brew` command. If you do not have Homebrew, follow the [documentation](https://docs.brew.sh/Installation) to install it. +Start by [downloading and installing](/connections/connect-apps/install-and-setup/installation) the Cloudflare Tunnel daemon, `cloudflared`. On Mac, you can do so by running the following `brew` command. If you do not have Homebrew, follow the [documentation](https://docs.brew.sh/Installation) to install it. `$ brew install cloudflare/cloudflare/cloudflared` diff --git a/products/distributed-web/docs-config.js b/products/distributed-web/docs-config.js index bc4e9468af3..5fe98bc7974 100644 --- a/products/distributed-web/docs-config.js +++ b/products/distributed-web/docs-config.js @@ -20,6 +20,6 @@ module.exports = { description: "View files stored on the InterPlanetary File System in your browser. Interact with the Ethereum blockchain. Explore the Distributed Web.", author: "@cloudflare", url: "https://developers.cloudflare.com/distributed-web", - image: "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" + image: "https://www.cloudflare.com/img/cf-twitter-card.png" } } diff --git a/products/distributed-web/src/content/ethereum-gateway/about-eth.md b/products/distributed-web/src/content/ethereum-gateway/about-eth.md index 36b4083216d..66d0fb350cb 100644 --- a/products/distributed-web/src/content/ethereum-gateway/about-eth.md +++ b/products/distributed-web/src/content/ethereum-gateway/about-eth.md @@ -1,5 +1,6 @@ --- order: 2 +pcx-content-type: concept --- # About Ethereum @@ -57,13 +58,13 @@ sent to the wider network and added to the consensus. Reading and writing content to the Ethereum network can be done using Cloudflare's Gateway. To learn more about how to do this see [Interacting with -the Ethereum network](./interacting-with-the-eth-gateway). +the Ethereum network](../interacting-with-the-eth-gateway). ## Connect your website to the gateway If you want to be able to access the Ethereum network accessible from a custom domain name, you can do that using Cloudflare’s Ethereum Gateway. To -learn how, check out [Connecting your Website](./connecting-your-website). +learn how, refer to [Connecting your Website](../connecting-your-website). ## Going Further diff --git a/products/distributed-web/src/content/ethereum-gateway/connecting-your-website.md b/products/distributed-web/src/content/ethereum-gateway/connecting-your-website.md index 9240b1d3d62..75aea0dc0e1 100644 --- a/products/distributed-web/src/content/ethereum-gateway/connecting-your-website.md +++ b/products/distributed-web/src/content/ethereum-gateway/connecting-your-website.md @@ -1,5 +1,6 @@ --- order: 3 +pcx-content-type: tutorial --- # Connecting your Website @@ -7,7 +8,7 @@ order: 3 You can connect your own domain name to to allow Ethereum network access from your own domain. This means that anyone can send the HTTP (JSON RPC) queries as given in [Interacting with the Ethereum -Gateway](./interacting-with-the-eth-gateway/) +Gateway](../interacting-with-the-eth-gateway/) to your own domain. To do this, you should replace `https://cloudflare-eth.com` with your domain, e.g. `myethereumgateway.xyz`, as the target of the HTTP query. diff --git a/products/distributed-web/src/content/ethereum-gateway/getting-started.md b/products/distributed-web/src/content/ethereum-gateway/getting-started.md index 23a507756c2..47c02ae6ba7 100644 --- a/products/distributed-web/src/content/ethereum-gateway/getting-started.md +++ b/products/distributed-web/src/content/ethereum-gateway/getting-started.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content-type: concept --- # Getting started diff --git a/products/distributed-web/src/content/ethereum-gateway/index.md b/products/distributed-web/src/content/ethereum-gateway/index.md index ed31cc13d1c..2d68ac552ab 100644 --- a/products/distributed-web/src/content/ethereum-gateway/index.md +++ b/products/distributed-web/src/content/ethereum-gateway/index.md @@ -1,5 +1,6 @@ --- order: 3 +pcx-content-type: concept --- # Ethereum Gateway diff --git a/products/distributed-web/src/content/ethereum-gateway/interacting-with-the-eth-gateway.md b/products/distributed-web/src/content/ethereum-gateway/interacting-with-the-eth-gateway.md index 28aec59ccc4..57ac6a8a82d 100644 --- a/products/distributed-web/src/content/ethereum-gateway/interacting-with-the-eth-gateway.md +++ b/products/distributed-web/src/content/ethereum-gateway/interacting-with-the-eth-gateway.md @@ -1,5 +1,6 @@ --- order: 4 +pcx-content-type: configuration --- # Interacting with Ethereum diff --git a/products/distributed-web/src/content/ethereum-gateway/kill-switches.md b/products/distributed-web/src/content/ethereum-gateway/kill-switches.md index 82cd70101ae..b6ca31b5531 100644 --- a/products/distributed-web/src/content/ethereum-gateway/kill-switches.md +++ b/products/distributed-web/src/content/ethereum-gateway/kill-switches.md @@ -1,5 +1,6 @@ --- order: 5 +pcx-content-type: concept --- # Kill Switches diff --git a/products/distributed-web/src/content/index.md b/products/distributed-web/src/content/index.md index 26165fff2e9..8b16c86cbfd 100644 --- a/products/distributed-web/src/content/index.md +++ b/products/distributed-web/src/content/index.md @@ -1,7 +1,8 @@ --- -title: Welcome +title: Overview order: 0 type: overview +pcx-content: landing-page --- # Cloudflare Distributed Web docs diff --git a/products/distributed-web/src/content/ipfs-gateway/automated-deployment.md b/products/distributed-web/src/content/ipfs-gateway/automated-deployment.md index e59f1d2aa04..1bce75a9f89 100644 --- a/products/distributed-web/src/content/ipfs-gateway/automated-deployment.md +++ b/products/distributed-web/src/content/ipfs-gateway/automated-deployment.md @@ -1,5 +1,6 @@ --- order: 5 +pcx-content-type: reference --- # Automated Deployment @@ -23,3 +24,6 @@ hash. There are several tools that help with different parts of this: - [dnslink-cloudflare](https://github.com/ipfs-shipyard/dnslink-cloudflare) is a script to programmatically update DNSLink records. This can be run with the `-Q` flag of `ipfs add` that only outputs the top-level hash. +- [Fission's IPNS support](https://guide.fission.codes/developers/custom-domains/using-cloudflare-ipfs-gateway) + lets you use the Fission IPFS app publishing system from the CLI + or from GitHub Actions, while using Cloudflare-managed DNS and gateway. diff --git a/products/distributed-web/src/content/ipfs-gateway/browsing-ipfs.md b/products/distributed-web/src/content/ipfs-gateway/browsing-ipfs.md index e2be8bb01ea..d1e8e9de0ca 100755 --- a/products/distributed-web/src/content/ipfs-gateway/browsing-ipfs.md +++ b/products/distributed-web/src/content/ipfs-gateway/browsing-ipfs.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content-type: tutorial --- # Browsing Content on IPFS diff --git a/products/distributed-web/src/content/ipfs-gateway/connecting-website.md b/products/distributed-web/src/content/ipfs-gateway/connecting-website.md index 744728ccd81..065bcf106f6 100755 --- a/products/distributed-web/src/content/ipfs-gateway/connecting-website.md +++ b/products/distributed-web/src/content/ipfs-gateway/connecting-website.md @@ -1,5 +1,6 @@ --- order: 3 +pcx-content-type: tutorial --- # Connecting Your Website @@ -120,7 +121,7 @@ If your website is on Cloudflare, the DNS settings are accessible from your dashboard and can be managed through [our API](https://api.cloudflare.com/#dns-records-for-a-zone-update-dns-record). If your website is not on Cloudflare, and you need help finding the DNS records, -[look here](https://support.google.com/projectshield/answer/6358886?hl=en/). +[refer to Project Shield's guide.](https://support.projectshield.withgoogle.com/s/article/Find-your-Domain-Name-System-DNS-records?language=en_US). Serving your website from Cloudflare's gateway without the domain itself being on Cloudflare is called a *CNAME setup* (meaning that you manage the DNS records directly with your registrar). While our gateway supports CNAME setups, there's diff --git a/products/distributed-web/src/content/ipfs-gateway/index.md b/products/distributed-web/src/content/ipfs-gateway/index.md index eb05fe3ea15..7e42b06e5b3 100755 --- a/products/distributed-web/src/content/ipfs-gateway/index.md +++ b/products/distributed-web/src/content/ipfs-gateway/index.md @@ -1,5 +1,6 @@ --- order: 2 +pcx-content-type: concept --- # IPFS Gateway diff --git a/products/distributed-web/src/content/ipfs-gateway/setting-up-a-server.md b/products/distributed-web/src/content/ipfs-gateway/setting-up-a-server.md index 907d725c7f7..be338dafeb9 100644 --- a/products/distributed-web/src/content/ipfs-gateway/setting-up-a-server.md +++ b/products/distributed-web/src/content/ipfs-gateway/setting-up-a-server.md @@ -1,5 +1,6 @@ --- order: 2 +pcx-content-type: tutorial --- # Setting Up a Server diff --git a/products/distributed-web/src/content/ipfs-gateway/troubleshooting.md b/products/distributed-web/src/content/ipfs-gateway/troubleshooting.md index 5dcac8cdd0d..a5f3126fea5 100644 --- a/products/distributed-web/src/content/ipfs-gateway/troubleshooting.md +++ b/products/distributed-web/src/content/ipfs-gateway/troubleshooting.md @@ -1,5 +1,6 @@ --- order: 10 +pcx-content-type: reference --- # Troubleshooting diff --git a/products/distributed-web/src/content/ipfs-gateway/updating-for-ipfs.md b/products/distributed-web/src/content/ipfs-gateway/updating-for-ipfs.md index b0e1a4008c8..e802e5860ca 100644 --- a/products/distributed-web/src/content/ipfs-gateway/updating-for-ipfs.md +++ b/products/distributed-web/src/content/ipfs-gateway/updating-for-ipfs.md @@ -1,5 +1,6 @@ --- order: 4 +pcx-content-type: reference --- # Updating your Website for IPFS diff --git a/products/docs-engine/docs-config.js b/products/docs-engine/docs-config.js index 846ec849b96..85210cc4ff1 100644 --- a/products/docs-engine/docs-config.js +++ b/products/docs-engine/docs-config.js @@ -24,6 +24,6 @@ module.exports = { description: "Documentation for the open-source Cloudflare Documentation engine which powers Cloudflare's open-source documentation.", author: "@cloudflare", url: "http://developers.cloudflare.com/docs-engine", - image: "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=", + image: "https://www.cloudflare.com/img/cf-twitter-card.png", } } diff --git a/products/docs-engine/src/content/contributing/content/accessibility.md b/products/docs-engine/src/content/contributing/content/accessibility.md index 83bf0108eff..6850c6229f2 100644 --- a/products/docs-engine/src/content/contributing/content/accessibility.md +++ b/products/docs-engine/src/content/contributing/content/accessibility.md @@ -1,6 +1,7 @@ --- title: Accessibility order: 3 +pcx-content-type: best-practices --- # Writing accessible content diff --git a/products/docs-engine/src/content/contributing/content/content-framework.md b/products/docs-engine/src/content/contributing/content/content-framework.md index da8527b8edb..be53c64082f 100644 --- a/products/docs-engine/src/content/contributing/content/content-framework.md +++ b/products/docs-engine/src/content/contributing/content/content-framework.md @@ -1,5 +1,6 @@ --- order: 0 +pcx-content-type: configuration --- # Content framework diff --git a/products/docs-engine/src/content/contributing/content/formatting.md b/products/docs-engine/src/content/contributing/content/formatting.md index b8f16cbb45f..698f41ffeb9 100644 --- a/products/docs-engine/src/content/contributing/content/formatting.md +++ b/products/docs-engine/src/content/contributing/content/formatting.md @@ -1,5 +1,6 @@ --- order: 2 +pcx-content-type: best-practices --- # Formatting diff --git a/products/docs-engine/src/content/contributing/content/index.md b/products/docs-engine/src/content/contributing/content/index.md index 31818778ad0..ad746f9e194 100644 --- a/products/docs-engine/src/content/contributing/content/index.md +++ b/products/docs-engine/src/content/contributing/content/index.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content-type: navigation --- # Content diff --git a/products/docs-engine/src/content/contributing/content/working-with-github.md b/products/docs-engine/src/content/contributing/content/working-with-github.md index 662812cf66a..bdcdecad8a2 100644 --- a/products/docs-engine/src/content/contributing/content/working-with-github.md +++ b/products/docs-engine/src/content/contributing/content/working-with-github.md @@ -1,5 +1,6 @@ --- order: 4 +pcx-content-type: best-practices --- # Working with GitHub diff --git a/products/docs-engine/src/content/contributing/content/writing-style.md b/products/docs-engine/src/content/contributing/content/writing-style.md index a5e36f6f0c8..415a9ab57a3 100644 --- a/products/docs-engine/src/content/contributing/content/writing-style.md +++ b/products/docs-engine/src/content/contributing/content/writing-style.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content-type: interim --- # Writing style diff --git a/products/docs-engine/src/content/contributing/development-setup.md b/products/docs-engine/src/content/contributing/development-setup.md index e9870009c96..88c51d4b6f9 100644 --- a/products/docs-engine/src/content/contributing/development-setup.md +++ b/products/docs-engine/src/content/contributing/development-setup.md @@ -1,5 +1,6 @@ --- order: 0 +pcx-content-type: how-to --- # Development setup diff --git a/products/docs-engine/src/content/contributing/index.md b/products/docs-engine/src/content/contributing/index.md index 4f118597b05..48281f77d4d 100644 --- a/products/docs-engine/src/content/contributing/index.md +++ b/products/docs-engine/src/content/contributing/index.md @@ -1,6 +1,7 @@ --- type: overview order: 3 +pcx-content-type: navigation --- # Contributing diff --git a/products/docs-engine/src/content/contributing/to-cloudflare-docs.md b/products/docs-engine/src/content/contributing/to-cloudflare-docs.md index ea205528bb5..7b5d81d525d 100644 --- a/products/docs-engine/src/content/contributing/to-cloudflare-docs.md +++ b/products/docs-engine/src/content/contributing/to-cloudflare-docs.md @@ -1,6 +1,7 @@ --- title: To Cloudflare’s docs order: 2 +pcx-content-type: configuration --- # Contribute to Cloudflare’s docs diff --git a/products/docs-engine/src/content/contributing/to-docs-engine.md b/products/docs-engine/src/content/contributing/to-docs-engine.md index 60b2a032949..e0a6add9c1e 100644 --- a/products/docs-engine/src/content/contributing/to-docs-engine.md +++ b/products/docs-engine/src/content/contributing/to-docs-engine.md @@ -1,6 +1,7 @@ --- title: To Docs Engine order: 3 +pcx-content-type: how-to --- # Contribute to the Docs Engine diff --git a/products/docs-engine/src/content/examples/code-block-examples.md b/products/docs-engine/src/content/examples/code-block-examples.md index 432f7ce2590..1fd5fcf8ee1 100644 --- a/products/docs-engine/src/content/examples/code-block-examples.md +++ b/products/docs-engine/src/content/examples/code-block-examples.md @@ -1,3 +1,7 @@ +--- +pcx-content-type: reference +--- + # Code block examples Code blocks inside [Docs Engine Markdown](/reference/markdown) offer a variety of custom presentation mechanisms. This page contains practical examples for inspiration. diff --git a/products/docs-engine/src/content/examples/index.md b/products/docs-engine/src/content/examples/index.md index 99441d4f1c6..d28848aa11a 100644 --- a/products/docs-engine/src/content/examples/index.md +++ b/products/docs-engine/src/content/examples/index.md @@ -1,6 +1,6 @@ --- -type: overview order: 5 +pcx-content-type: navigation --- # Examples diff --git a/products/docs-engine/src/content/examples/pages/class.md b/products/docs-engine/src/content/examples/pages/class.md index 9ae109e107d..429fd5aa1fd 100644 --- a/products/docs-engine/src/content/examples/pages/class.md +++ b/products/docs-engine/src/content/examples/pages/class.md @@ -1,3 +1,7 @@ +--- +pcx-content-type: interim +--- + # Class ## Background diff --git a/products/docs-engine/src/content/examples/pages/example.md b/products/docs-engine/src/content/examples/pages/example.md index 92197b7ac8b..68d7d6ded71 100644 --- a/products/docs-engine/src/content/examples/pages/example.md +++ b/products/docs-engine/src/content/examples/pages/example.md @@ -1,11 +1,11 @@ --- -type: example summary: A short summary of the example. Should be no more than 100 characters or so. demo: https://example.com tags: - Tag1 - Tag2 - Tag3 +pcx-content-type: interim --- # Example diff --git a/products/docs-engine/src/content/examples/pages/index.md b/products/docs-engine/src/content/examples/pages/index.md index 0329cf65fc0..ad0f83a0821 100644 --- a/products/docs-engine/src/content/examples/pages/index.md +++ b/products/docs-engine/src/content/examples/pages/index.md @@ -1,5 +1,6 @@ --- order: 3 +pcx-content-type: navigation --- # Example pages diff --git a/products/docs-engine/src/content/faq.md b/products/docs-engine/src/content/faq.md index 637d2e391c8..618a131d8a3 100644 --- a/products/docs-engine/src/content/faq.md +++ b/products/docs-engine/src/content/faq.md @@ -1,6 +1,7 @@ --- type: overview order: 6 +pcx-content-type: faq --- # FAQ @@ -38,6 +39,6 @@ For pages with the [`"document"` type](/reference/pages#title) (the default), th ## How does the search work? -Search is powered by Algolia DocSearch and [must be configured](/reference/configuration) in `docs-config.js`. Make a PR on [@algolia/docsearch-configs](https://github.com/algolia/docsearch-configs/pull/2300) to obtain an `indexName` and `apiKey` (e.g. see the [Workers PR](https://github.com/algolia/docsearch-configs/pull/2300)). Then simply set those values as `search.indexName` and `search.apiKey` (e.g. see the [Workers config](https://github.com/cloudflare/cloudflare-docs/blob/e72247549d20f649786251d0368de19560d1bbb2/products/workers/docs-config.js#L21-L24)). To disable search, set those values to the empty string (e.g. [Docs Engine example site](https://github.com/adamschwartz/docs-engine-example/blob/6d725ffa554454e1daa4c0d2a8a7e44408056e6b/docs-config.js#L21-L24)). +Search is powered by Algolia DocSearch and [must be configured](/reference/configuration) in `docs-config.js`. Make a PR on [@algolia/docsearch-configs](https://github.com/algolia/docsearch-configs/pull/2300) to obtain an `indexName` and `apiKey` (e.g. see the [Workers PR](https://github.com/algolia/docsearch-configs/pull/2300)). Then simply set those values as `search.indexName` and `search.apiKey` (e.g. see the [Workers config](https://github.com/cloudflare/cloudflare-docs/blob/e72247549d20f649786251d0368de19560d1bbb2/products/workers/docs-config.js#L21-L24)). To disable search, set those values to the empty string (e.g. [Docs Engine example site](https://github.com/cloudflare/cloudflare-docs/blob/fc6f1b834f60bb9f5d425bbf6c2c6e7770f77f2e/products/docs-engine/docs-config.js#L17-20)). diff --git a/products/docs-engine/src/content/how-it-works.md b/products/docs-engine/src/content/how-it-works.md index 1baf2e999e7..9fd8f35c1e5 100644 --- a/products/docs-engine/src/content/how-it-works.md +++ b/products/docs-engine/src/content/how-it-works.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content-type: interim --- # How it works @@ -24,7 +25,7 @@ Each docs site built with the engine needs the following structure: 4. A `.gitignore` which ignores at least `.docs`, `dist/worker.js`, and `node_modules`. 5. Content in `src/content/` — A single `index.md` will do. -For a repo holding a single docs site, everything but the content should be in the root, as is the case with the [Docs Engine minimal example](https://github.com/adamschwartz/docs-engine-example/tree/c45fa9f0a8affc68baf5d3517f8b890ba0522531). +For a repo holding a single docs site, everything but the content should be in the root. However, these files can also be placed inside any sub-folder of your project. When doing this, you’ll need to then customize the `contentRepoFolder` property in `docs-config.js`, which is how the [products inside @cloudflare/cloudflare-docs](https://github.com/cloudflare/cloudflare-docs/tree/production/products) are all set up, e.g. the [Workers product](https://github.com/cloudflare/cloudflare-docs/blob/1efd366c25bc1bdd1a40f7bc4737310c6b00d15e/products/workers/docs-config.js#L6). @@ -61,31 +62,33 @@ You’ll also need a `docs-config.js` file, which is used to customize the proje filename: docs-config.js --- module.exports = { - product: "Example", - pathPrefix: "", - productLogoPathD: "M8 8v32h32V26H22V8zm18-2h16v16H26z", - contentRepo: "adamschwartz/docs-engine-example", + product: "Docs Engine", + pathPrefix: "/docs-engine", + productIconKey: "docs-engine", + contentRepo: "cloudflare/cloudflare-docs", + contentRepoFolder: "products/docs-engine", externalLinks: [ { title: "Docs Engine on GitHub", url: "https://github.com/cloudflare/cloudflare-docs-engine" }, { - title: "example.com", - url: "https://example.com" + title: "Cloudflare Developer documentation", + url: "https://developers.cloudflare.com/docs" }, ], search: { indexName: "", apiKey: "", + algoliaOptions: { "facetFilters": "" } }, siteMetadata: { - title: "Example docs", - description: "These docs are an example of of a docs site built with the Cloudflare Docs Engine.", - author: "@adamschwartz", - url: "https://docs-engine-example.adam.workers.dev/", - image: "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=", - }, + title: "Cloudflare Docs Engine docs", + description: "Documentation for the open-source Cloudflare Documentation engine which powers Cloudflare's open-source documentation.", + author: "@cloudflare", + url: "http://developers.cloudflare.com/docs-engine", + image: "https://www.cloudflare.com/img/cf-twitter-card.png", + } } ``` @@ -149,24 +152,6 @@ Learn more about the [content framework](/contributing/content/content-framework -------------------------------- -## Example site - -Here’s a minimal example site built with Docs Engine: - -
- - +
+ ${content} +
+`; + return new Response(results, { + headers: { + "content-type": "text/html;charset=UTF-8", + }, + }); +} +``` + +## Additional information + +- [Pages API Docs](https://api.cloudflare.com/#pages-project-properties) +- [Workers Getting Started Guide](https://developers.cloudflare.com/workers/get-started/guide) +- [Workers Cron Triggers](https://developers.cloudflare.com/workers/platform/cron-triggers) diff --git a/products/pages/src/content/platform/build-configuration.md b/products/pages/src/content/platform/build-configuration.md index 840a7d9c2ce..2af61b39d5f 100644 --- a/products/pages/src/content/platform/build-configuration.md +++ b/products/pages/src/content/platform/build-configuration.md @@ -1,22 +1,34 @@ +--- +order: 2 +pcx-content-type: concept +--- + # Build configuration +You may tell Cloudflare Pages how your site needs to be built as well as where its output files will be located. + ## Build commands and directories -You should provide a build command to tell Cloudflare Pages how to build your application. For projects not listed here, consider reading the tool's documentation or framework, and submit a pull request to add it here! +You should provide a build command to tell Cloudflare Pages how to build your application. For projects not listed here, consider reading the tool's documentation or framework, and submit a pull request to add it here. Build directories indicates where your project's build command outputs the built version of your Cloudflare Pages site. Often, this defaults to the industry-standard `public`, but you may find that you need to customize it. -Below are some standard build commands and directories for popular frameworks and tools. +## Framework presets + +Cloudflare maintains a list of build configurations for popular frameworks and tools. These are accessible during project creation. Below are some standard build commands and directories for popular frameworks and tools. + +If you are not using a framework, you may input `exit 0` into the **Build command** field. -| Framework/tool | Build command | Build directory | +| Framework/tool | Build command | Build output directory | | ---------------------------- | ----------------------------------- | --------------------------- | | Angular (Angular CLI) | `ng build` | `dist` | | Brunch | `brunch build --production` | `public` | | Docusaurus | `npm run build` | `build` | | Eleventy | `eleventy` | `_site` | | Ember.js | `ember build` | `dist` | +| Expo | `expo build:web` | `web-build` | | Gatsby | `gatsby build` | `public` | | GitBook | `gitbook build` | `_book` | | Gridsome | `gridsome build` | `dist` | @@ -38,13 +50,21 @@ Below are some standard build commands and directories for popular frameworks an ## Environment variables -If your project makes use of environment variables to build your site, you can provide custom environment variables via the Pages UI. +If your project makes use of environment variables to build your site, you can provide custom environment variables by going to **Account Home** > **Pages** > **your Pages project** > **Settings** > **Environment variables**. + +The following system environment variables are injected by default (but can be overridden): + +| Environment Variable | Injected value | Example use-case | +| --------------------- | ------------------------------------- | ------------------------------------------------------------------------------ | +| `CF_PAGES` | `1` | Changing build behaviour when run on Pages vs locally | +| `CF_PAGES_COMMIT_SHA` | `` | Passing current commit ID to error reporting e.g. Sentry | +| `CF_PAGES_BRANCH` | `` | Customising build based on branch e.g. disabling debug logging on `production` | ## Language support and tools -Cloudflare Pages' build environment has broad support for a variety of languages, such as Ruby, Node.js, Python, PHP, and Go (and many more). +Cloudflare Pages' build environment has broad support for a variety of languages, such as Ruby, Node.js, Python, PHP, and Go. -If you need to use a specific version of a language, e.g. Node.js or Ruby, you can specify it by providing an associated environment variable in your build configuration, or setting the relevant file in your source code. +If you need to use a specific version of a language, (e.g., Node.js or Ruby) you can specify it by providing an associated environment variable in your build configuration, or setting the relevant file in your source code. Here are the pinned versions for tools included in the Cloudflare Workers build environment, and how to override them as relevant: @@ -55,10 +75,11 @@ Here are the pinned versions for tools included in the Cloudflare Workers build | Erlang | 21 | | | | Go | 1.12 | `GO_VERSION` | | | Java | 8 | | | -| Node.js | 10 | `NODE_VERSION` | `.nvmrc`, `.node-version` | +| Node.js | 12.18.0 | `NODE_VERSION` | `.nvmrc`, `.node-version` | | PHP | 5.6 | `PHP_VERSION` | | | Python | 2.7 | `PYTHON_VERSION` | `runtime.txt`, `Pipfile` | | Ruby | 2.6.2 | `RUBY_VERSION` | `.ruby-version` | +| .NET | 3.1.302 | | | Many common tools have been pre-installed as well. The environment variable available for overriding the pinned version is specified, as available: @@ -82,4 +103,4 @@ Many common tools have been pre-installed as well. The environment variable avai | Yarn | Version 1.13.0 | `YARN_VERSION` | | Zola | (requires environment variable) | `ZOLA_VERSION` | -If you're looking to set a specific version of a framework your Cloudflare Pages project is using, note that Pages will respect your package manager of choice during your build process. For instance, if you use Gatsby.js, your `package.json` should indicate a version of the `gatsby` NPM package, which will be installed using `npm install` as your project builds on Cloudflare Pages. +If you want to set a specific version of a framework your Cloudflare Pages project is using, note that Pages will respect your package manager of choice during your build process. For example, if you use Gatsby.js, your `package.json` should indicate a version of the `gatsby` npm package, which will be installed using `npm install` as your project builds on Cloudflare Pages. diff --git a/products/pages/src/content/platform/contentful.png b/products/pages/src/content/platform/contentful.png new file mode 100644 index 00000000000..8cba1c95190 Binary files /dev/null and b/products/pages/src/content/platform/contentful.png differ diff --git a/products/pages/src/content/platform/deploy-hooks-add.png b/products/pages/src/content/platform/deploy-hooks-add.png new file mode 100644 index 00000000000..e11b36d330b Binary files /dev/null and b/products/pages/src/content/platform/deploy-hooks-add.png differ diff --git a/products/pages/src/content/platform/deploy-hooks-configure.png b/products/pages/src/content/platform/deploy-hooks-configure.png new file mode 100644 index 00000000000..8f2034ddf8e Binary files /dev/null and b/products/pages/src/content/platform/deploy-hooks-configure.png differ diff --git a/products/pages/src/content/platform/deploy-hooks-deployment-logs.png b/products/pages/src/content/platform/deploy-hooks-deployment-logs.png new file mode 100644 index 00000000000..c050ceccb10 Binary files /dev/null and b/products/pages/src/content/platform/deploy-hooks-deployment-logs.png differ diff --git a/products/pages/src/content/platform/deploy-hooks-details.png b/products/pages/src/content/platform/deploy-hooks-details.png new file mode 100644 index 00000000000..f7831a1a70f Binary files /dev/null and b/products/pages/src/content/platform/deploy-hooks-details.png differ diff --git a/products/pages/src/content/platform/deploy-hooks.md b/products/pages/src/content/platform/deploy-hooks.md new file mode 100644 index 00000000000..d616b59445e --- /dev/null +++ b/products/pages/src/content/platform/deploy-hooks.md @@ -0,0 +1,61 @@ +--- +order: 3 +pcx-content-type: concept +--- + +# Deploy Hooks + +With Deploy Hooks, you can trigger deployments using event sources beyond commits in your source repository. Each event source may obtain its own unique URL, which will receive HTTP POST requests in order to initiate new deployments. This feature allows you to integrate Pages with new or existing workflows. For example, you may: + +- Automatically deploy new builds whenever content in a Headless CMS system changes +- Implement a fully customized CI/CD pipeline, deploying only under desired conditions +- Schedule a CRON trigger to update your website on a fixed timeline + +To create a Deploy Hook, navigate from **Account Home** to **Pages** and select your desired Pages project. Navigate to **Settings** > **Builds & deployments** and select **Add deploy hook** to start configuration. + +![deploy hooks](deploy-hooks-add.png) + +## Parameters needed +To configure your Deploy Hook, you must enter two key parameters: + 1. **Deploy hook name:** a unique identifier for your Deploy Hook (e.g. “contentful-site”) + 2. **Branch to build:** the repository branch your Deploy Hook should build + +![deploy hooks](deploy-hooks-configure.png) + +## Using your Deploy Hook +Once your configuration is complete, the Deploy Hook’s unique URL is ready to be used. You will see both the URL as well as the POST request snippet available to copy. +![deploy hooks](deploy-hooks-details.png) + +Every time a request is sent to your Deploy Hook, a new build will be triggered. Review the **Source** column of your deployment log to see which deployment were triggered by a Deploy Hook. + +![deploy hooks](deploy-hooks-deployment-logs.png) + +## Security Considerations +Deploy Hooks are uniquely linked to your project and do not require additional authentication to be used. While this does allow for complete flexibility, it is important that you protect these URLs in the same way you would safeguard any proprietary information or application secret. + +If you suspect unauthorized usage of a Deploy Hook, you should delete the Deploy Hook and generate a new one in its place. + +## Integrating Deploy Hooks with common CMS platforms +Every CMS provider is different and will offer different pathways in integrating with Pages' Deploy Hooks. The following section contains step-by-step instructions for a select number of popular CMS platforms. + +### Contentful +Contentful supports integration with Cloudflare Pages via its **Webhooks** feature. In your Contentful project settings, go to **Webhooks**, create a new Webhook, and paste in your unique Deploy Hook URL in the **URL** field. Optionally, you can specify events that the Contentful Webhook should forward. By default, Contentful will trigger a Pages deployment on all project activity, which may be a bit too frequent. You can filter for specific events, such as Create, Publish, and many others. + +![Configuring Deploy Hooks with Contentful](./contentful.png) + +### Ghost +You can configure your Ghost website to trigger Pages deployments by creating a new **Custom Integration**. In your Ghost website’s settings, create a new Custom Integration in the **Integrations** page. + +Each custom integration created can have multiple **webhooks** attached to it. Create a new webhook with the **Add webhook** button and select **Site changed (rebuild)** as the **Event**. Then paste your unique Deploy Hook URL as the **Target URL** value. After creating this webhook, your Cloudflare Pages application will redeploy whenever your Ghost site changes. + +![Configuring Deploy Hooks with Ghost](./ghost.png) + +### Sanity +In your Sanity project's Settings page, find the **Webhooks** section, and add the Deploy Hook URL, as seen below. By default, the Webhook will trigger your Pages Deploy Hook for all datasets inside of your Sanity project. You can filter notifications to individual datasets, such as production, using the **Dataset** field: + +![Configuring Deploy Hooks with Sanity](./sanity.png) + +### WordPress +You can configure WordPress to trigger a Pages Deploy Hook by installing the free **WP Webhooks** plugin. The plugin includes a number of triggers, such as **Send Data on New Post, Send Data on Post Update** and **Send Data on Post Deletion**, all of which allow you to trigger new Pages deployments as your WordPress data changes. Select a trigger on the sidebar of the plugin settings and then [**Add Webhook URL**](https://wordpress.org/plugins/wp-webhooks/), pasting in your unique Deploy Hook URL. + +![Configuring Deploy Hooks with WordPress](./wordpress.png) diff --git a/products/pages/src/content/platform/ghost.png b/products/pages/src/content/platform/ghost.png new file mode 100644 index 00000000000..2b739a04c76 Binary files /dev/null and b/products/pages/src/content/platform/ghost.png differ diff --git a/products/pages/src/content/platform/git.pause.png b/products/pages/src/content/platform/git.pause.png new file mode 100644 index 00000000000..d6db53aa101 Binary files /dev/null and b/products/pages/src/content/platform/git.pause.png differ diff --git a/products/pages/src/content/platform/github-integration.md b/products/pages/src/content/platform/github-integration.md index 97c2016d80b..3eb531b3c22 100644 --- a/products/pages/src/content/platform/github-integration.md +++ b/products/pages/src/content/platform/github-integration.md @@ -1,19 +1,34 @@ +--- +order: 1 +pcx-content-type: concept +--- + # GitHub integration -We support connecting Cloudflare Pages to your GitHub repositories to look for new changes to your project. +Cloudflare supports connecting Cloudflare Pages to your GitHub repositories to look for new changes to your project. ## Custom branches -If you have a custom Git workflow that makes use of specific branches for representing your "production" build of your project, you can specify a custom branch when creating (or managing an existing) Cloudflare Pages project. +If you have a custom Git workflow that makes use of specific branches for representing your production build of your project, you can specify a custom branch when creating (or managing an existing) Cloudflare Pages project. -For instance, imagine that you merge new code into the `main` branch, and when it's time to deploy your project, you merge a set of commits into the `production` branch. In the Cloudflare Pages UI, you can set the default branch to `production`. +For example, imagine that you merge new code into the `main` branch. When it is time to deploy your project, you merge a set of commits into the `production` branch. In the Cloudflare Pages dashboard, you can set the default branch to `production`. -In fact, you can also use [preview deployments](/platform/preview-deployments) to get a glimpse at how the new version of your project looks _before_ even merging to `production`. To do this, enable preview deployments, and you'll be able to access a deployed version of your `main` branch, or whatever other branches exist, whether created manually or via pull requests. +You can also use [preview deployments](/platform/preview-deployments) to preview how the new version of your project looks before merging to `production`. To do this, make sure that preview deployments are enabled. You can check this by going to the Pages project's **Settings** > **Builds & deployments** > and verifying that automatic deployments are enabled and **Pause deployments** is unselected. With preview deployments, you will be able to access a deployed version of your `main` branch, or other branches that exist, whether created manually or through pull requests. ## Organizational access -When authorizing Cloudflare Pages to access your GitHub account, you can also specify access to _organizations_ that you belong to on GitHub. This means that you can deploy projects to Cloudflare Pages from your open-source team, company, or side project. +When authorizing Cloudflare Pages to access your GitHub account, you can also specify access to organizations that you belong to on GitHub. This means that you can deploy projects to Cloudflare Pages from your open-source team, company, or side project. ## Removing access to your GitHub account -You can remove Cloudflare Pages' access to your GitHub account by viewing the ["Applications" page](https://github.com/settings/installations) on GitHub. Note that removing access to GitHub will also disable new builds, though the last build of your site will continue to be hosted via Cloudflare Pages. +You can remove Cloudflare Pages' access to your GitHub account by viewing the [**Applications** page](https://github.com/settings/installations) on GitHub. Note that removing access to GitHub will also disable new builds, though the last build of your site will continue to be hosted via Cloudflare Pages. + +## Pausing Automatic Builds + +By default, Cloudflare Pages automatically builds and deploys a project whenever its repository receives new commits. You can pause this behavior to keep your website at a particular version and manually deploy new versions when desired. + +To pause automatic deployments, go to the Pages project's **Settings** > **Builds & deployments** > select **Pause deployments** at the end of the page. + +![pause button](git.pause.png) + +Selecting **Pause deployments** will present a confirmation and, once confirmed, the **Pause deployments** button will be replaced with a **Resume deployments** button. While paused, your **Deployments** list will present a banner message, reminding you that automatic deployments are not enabled. diff --git a/products/pages/src/content/platform/index.md b/products/pages/src/content/platform/index.md index ccf900f7d3c..3905506589f 100644 --- a/products/pages/src/content/platform/index.md +++ b/products/pages/src/content/platform/index.md @@ -1,3 +1,7 @@ +--- +pcx-content-type: navigation +--- + # Platform diff --git a/products/pages/src/content/platform/known-issues.md b/products/pages/src/content/platform/known-issues.md index 27ce28705f6..2a6c50ba0b4 100644 --- a/products/pages/src/content/platform/known-issues.md +++ b/products/pages/src/content/platform/known-issues.md @@ -1,3 +1,8 @@ +--- +order: 9 +pcx-content-type: concept +--- + # Known issues Here are some known bugs and issues that we're aware of with Cloudflare Pages: @@ -7,5 +12,8 @@ Here are some known bugs and issues that we're aware of with Cloudflare Pages: - pages.dev subdomains currently can't be changed. If you need to change your pages.dev subdomain, delete your project and create a new one. - Hugo builds automatically run an old version. To run the latest version of Hugo (for instance, 0.80.0), you'll need to set an environment variable. Set `HUGO_VERSION` to `0.80.0` or the Hugo version of your choice. - By default, we use Node 10 in the Pages build environment. If you need to use a newer Node version, see our [Build configuration page](https://developers.cloudflare.com/pages/platform/build-configuration) for configuration options. +- For users migrating from Netlify, Cloudflare does not support Netlify's Forms and Serverless Functions features. Cloudflare Pages does not directly support HTTP header customization, but it can be done through Workers. Refer to the ["Add custom HTTP headers"](/how-to/add-custom-http-headers) guide for more information. +- It is currently not possible to add a custom domain with a wildcard, e.g. *.domain.com. +- Cloudflare Pages is not supported with Cloudflare Apps; you may see a 1014 error if you use both in a deployment. -Having an issue that you don't see listed above? Let us know in the Cloudflare Workers Discord! Get your invite at [discord.gg/cloudflaredev](https://discord.gg/cloudflaredev), and share your bug report in the #pages channel. +If you have an issue that you do not see listed, let the team know in the Cloudflare Workers Discord. Get your invite at [discord.gg/cloudflaredev](https://discord.gg/cloudflaredev), and share your bug report in the #pages-help channel. diff --git a/products/pages/src/content/platform/limits.md b/products/pages/src/content/platform/limits.md index 05c0054b99b..c1f3202f958 100644 --- a/products/pages/src/content/platform/limits.md +++ b/products/pages/src/content/platform/limits.md @@ -1,10 +1,17 @@ +--- +order: 8 +pcx-content-type: concept +--- + # Limits -Below, we've listed the limits for users using the Cloudflare Pages free plan. For more details on removing these limits, check out our [Cloudflare plans](https://www.cloudflare.com/plans) page. +Below are limits observed by the Cloudflare Pages free plan. For more details on removing these limits, refer to our [Cloudflare plans](https://www.cloudflare.com/plans) page. ## Builds -Each time you push new code to your GitHub repository, we'll build and deploy your site. You can deploy up to 500 times per month on the free plan. Check out the Pro and Business plans on our [pricing page](https://pages.cloudflare.com/#pricing) if you need to deploy more frequently! +Each time you push new code to your GitHub repository, Pages will build and deploy your site. You can deploy up to 500 times per month on the free plan. Refer to the Pro and Business plans on the Pages [pricing page](https://pages.cloudflare.com/#pricing) if you need to deploy more frequently. + +Builds will timeout after 20 minutes. ## Custom domains @@ -12,11 +19,11 @@ A Cloudflare Pages project can be attached to a maximum of ten (10) custom domai ## Files -We take each file in your site and upload it to our globally distributed network to bring low latency to every user that visits your site. Cloudflare Pages sites can contain up to 20,000 files. +Pages uploads each file on your site to Cloudflare's globally distributed network to deliver a low latency exprience to every user that visits your site. Cloudflare Pages sites can contain up to 20,000 files. ## File size -The maximum file size for a Cloudflare Pages site asset is 25MB. +The maximum file size for a single Cloudflare Pages site asset is 25MB. ## Preview deployments @@ -28,5 +35,4 @@ Your Pages site can be managed by an unlimited number of users via the Cloudflar ## Sites -Cloudflare Pages supports deploying unlimited sites to your account. In order to protect against abuse of the service, we may temporarily disable your ability to create new Pages projects, if you're deploying a large number of applications in a short amount of time. Please email workers-support@cloudflare.com if you need this restriction removed. - +Cloudflare Pages supports deploying unlimited sites to your account. In order to protect against abuse of the service, Cloudflare may temporarily disable your ability to create new Pages projects, if you are deploying a large number of applications in a short amount of time. Please email workers-support@cloudflare.com if you need this restriction removed. \ No newline at end of file diff --git a/products/pages/src/content/platform/preview-deployment-generated.png b/products/pages/src/content/platform/preview-deployment-generated.png new file mode 100644 index 00000000000..0e50eb19a31 Binary files /dev/null and b/products/pages/src/content/platform/preview-deployment-generated.png differ diff --git a/products/pages/src/content/platform/preview-deployment-mergedone.png b/products/pages/src/content/platform/preview-deployment-mergedone.png new file mode 100644 index 00000000000..2b3052ad21d Binary files /dev/null and b/products/pages/src/content/platform/preview-deployment-mergedone.png differ diff --git a/products/pages/src/content/platform/preview-deployments.md b/products/pages/src/content/platform/preview-deployments.md index b381846616b..4e9851d2386 100644 --- a/products/pages/src/content/platform/preview-deployments.md +++ b/products/pages/src/content/platform/preview-deployments.md @@ -1,9 +1,30 @@ +--- +order: 3 +pcx-content-type: concept +--- + # Preview deployments -Preview deployments allow you to preview new versions of your project without deploying it to production. +Preview deployments allow you to preview new versions of your project without deploying it to production. To view preview deployments, navigate from the **Account Home** > **Pages** and select your project. + +Every time you open a new pull request on your GitHub repository, Cloudflare Pages will create a unique preview URL, which will stay updated as you continue to push new commits to the branch. + +For example, if you have a repo called `user-example` connected to Pages, this will give you a `user-example.pages.dev` subdomain. If `main` is your default branch, then any commits to the `main` branch will update your `user-example.pages.dev` content, as well as any [custom domains](/get-started#adding-a-custom-domain) attached to the project. + +![development preview](preview-deployment-mergedone.png) + +While developing `user-example`, you may push new changes to a `development` branch, for example. + +In this example, after you create the new `development` branch, Pages will automatically generate a preview deployment for these changes available at `373f31e2.user-example.pages.dev` - where `373f31e2` is a randomly generated hash. + +Each new branch you create will receive a new, randomly-generated hash in front of your `pages.dev` subdomain. + +![development preview](preview-deployment-generated.png) + +Any additional changes to the `development` branch will continue to update this `373f31e2.user-example.pages.dev` preview address until the `development` branch is merged with the `main` production branch. -Every time you open a new pull request on your GitHub repository, Cloudflare Pages will create a unique preview URL, which will stay up-to-date as you continue to push new commits to the branch. +Any custom domains, as well as your `user-example.pages.dev` site, will not be affected by preview deployments. ## Customizing preview deployments access -By default, preview deployments are enabled and available publicly. In your project's settings, you can require visitors to authenticate using [Cloudflare Access](https://www.cloudflare.com/teams-access/) to be able to view preview deployment. This allows you to lock down access to these preview deployments to your teammates, organization, or anyone else you specify via [Access policies](https://developers.cloudflare.com/access/setting-up-access/configuring-access-policies/). \ No newline at end of file +By default, preview deployments are enabled and available publicly. In your project's settings, you can require visitors to authenticate using [Cloudflare Access](https://www.cloudflare.com/teams-access/) to be able to view preview deployment. This allows you to lock down access to these preview deployments to your teammates, organization, or anyone else you specify via [Access policies](https://developers.cloudflare.com/access/setting-up-access/configuring-access-policies/). diff --git a/products/pages/src/content/platform/redirects.md b/products/pages/src/content/platform/redirects.md index 36ee21676f6..58e7ae70fcc 100644 --- a/products/pages/src/content/platform/redirects.md +++ b/products/pages/src/content/platform/redirects.md @@ -1,11 +1,27 @@ +--- +order: 6 +pcx-content-type: concept +--- + # Redirects ## Creating redirects -To use redirects on Cloudflare Pages, declare your redirects in a `_redirects` plain text file in the output folder of your project. The [build output folder](https://developers.cloudflare.com/pages/platform/build-configuration) is project-specific so the `_redirects` file should not always be in the root directory of the repo. Changes to redirects will be updated to your website at build time so make sure you commit and push the file to trigger a new build each time you update redirects. -Redirects can be stated as such with one redirect per line in the form: +To use redirects on Cloudflare Pages, declare your redirects in a `_redirects` plain text file in the output folder of your project. The [build output folder](/platform/build-configuration) is project-specific so the `_redirects` file should not always be in the root directory of the repository. Changes to redirects will be updated to your website at build time so make sure you commit and push the file to trigger a new build each time you update redirects. -[source] [destination] [code] +Only one redirect can be defined per line and must follow this format: + +``` +[source] [destination] [code?] +``` + + + +A complete example with multiple redirects may look like the following: ``` --- @@ -18,10 +34,10 @@ filename: _redirects /trailing /trailing/ 301 /notrailing/ /nottrailing 301 ``` - -There is a limit of 100 redirects and a 1000 character limit per redirect line. Incorrectly formatted lines in the file are ignored. If there are multiple redirects for the same source, the topmost redirect is applied. -We currently offer limited support for advanced redirects. More support will be added in the future. +A project is limited to 100 total redirects. Each redirect declaration has a 1000-character limit. Malformed definitions are ignored. If there are multiple redirects for the same `source` path, the topmost redirect is applied. If the same `source` URL has multiple redirects, the topmost redirect is applied. + +Cloudflare currently offers limited support for advanced redirects. More support will be added in the future. @@ -32,13 +48,13 @@ We currently offer limited support for advanced redirects. More support will be | Splats | No | /blog/* /blog/:splat | | Placeholders | No | /blog/:year/:month/:date/:slug /news/:year/:month/:date/:slug | | Query Parameters | No | /shop id=:id /blog/:id 301 | -| Force (shadowing) | No | /workers/ /workers/index.html 200! | +| Force (shadowing) | No | /workers/ /workers/index.html 200! | | Domain-level redirects | No | workers.example.com/* workers.example.com/blog/:splat 301 | | Redirect by country or language | No | / /us 302 Country=us | -## See also +## Additional information - [Transform Rules](https://developers.cloudflare.com/rules/transform) diff --git a/products/pages/src/content/platform/rollbacks.md b/products/pages/src/content/platform/rollbacks.md new file mode 100644 index 00000000000..ee88291e101 --- /dev/null +++ b/products/pages/src/content/platform/rollbacks.md @@ -0,0 +1,19 @@ +--- +order: 5 +pcx-content-type: concept +--- + +# Rollbacks + +Rollbacks allow you to instantly revert your project to a previous production deployment. + +Any production deployment that has been successfully built is a valid rollback target. When your project has rolled back to a previous deployment, you may still rollback to deployments that are newer than your current version. Note that preview deployments are not valid rollback targets. + +In order to perform a rollback, go to **Deployments** in your Pages project. Browse the **All deployments** list and select the three dotted actions menu for the desired target. Select **Rollback to this deployment** for a confirmation window to appear. When confirmed, your project's production deployment will change instantly. + +![rollbacks preview](rollbacks.png) + +## Additional information + +- [Preview Deployments](/platform/preview-deployments) +- [Pausing Automatic Builds](/platform/github-integration#pausing-automatic-builds) diff --git a/products/pages/src/content/platform/rollbacks.png b/products/pages/src/content/platform/rollbacks.png new file mode 100644 index 00000000000..11da92e9d53 Binary files /dev/null and b/products/pages/src/content/platform/rollbacks.png differ diff --git a/products/pages/src/content/platform/sanity.png b/products/pages/src/content/platform/sanity.png new file mode 100644 index 00000000000..f8051703a0b Binary files /dev/null and b/products/pages/src/content/platform/sanity.png differ diff --git a/products/pages/src/content/platform/serving-pages.md b/products/pages/src/content/platform/serving-pages.md index 6ba242d29d4..395428eff93 100644 --- a/products/pages/src/content/platform/serving-pages.md +++ b/products/pages/src/content/platform/serving-pages.md @@ -1,6 +1,11 @@ +--- +order: 4 +pcx-content-type: concept +--- + # Serving Pages -Cloudflare Pages includes a number of "good defaults" for serving your Pages sites. This page details some of those decisions, so you can understand how Pages works, and how you might want to override some of the default behaviors. +Cloudflare Pages includes a number of defaults for serving your Pages sites. This page details some of those decisions, so you can understand how Pages works, and how you might want to override some of the default behaviors. ## Route matching @@ -8,13 +13,13 @@ If an HTML file is found with a matching path to the current route requested, Pa ## Not Found behavior -You can define a custom page to be displayed when Pages can't find a requested file by creating a `404.html` file. Pages will attempt to find the *closest* 404 page, that is, if one isn't found in the *same* directory as the route you're currently requesting, it will continue to look up the directory tree for a matching `404.html` file, ending in `/404.html`. This means that you can define custom 404 paths for situations like `/blog/404.html` *and* `/404.html`, and Pages will automatically render the correct one depending on the situation. +You can define a custom page to be displayed when Pages cannot find a requested file by creating a `404.html` file. Pages will then attempt to find the closest 404 page. If one is not found in the same directory as the route you are currently requesting, it will continue to look up the directory tree for a matching `404.html` file, ending in `/404.html`. This means that you can define custom 404 paths for situations like `/blog/404.html` and `/404.html`, and Pages will automatically render the correct one depending on the situation. ## Single-page app (SPA) rendering -If your project doesn't include a top-level `404.html` file, Pages assumes that you're deploying a single-page application. This includes frameworks like React, Vue, and Angular. Pages' default single-page application behavior matches all incoming paths to the root (`/`), allowing you to capture URLs like `/about` or `/help` and respond to them from within your SPA. +If your project does not include a top-level `404.html` file, Pages assumes that you are deploying a single-page application. This includes frameworks like React, Vue, and Angular. Pages' default single-page application behavior matches all incoming paths to the root (`/`), allowing you to capture URLs like `/about` or `/help` and respond to them from within your SPA. ## Caching and performance -Pages includes good caching defaults. That means that every time you deploy an asset to Pages, it remains cached on our CDN until your next deploy. As much as possible, Pages sets `ETag` and `If-None-Match` headers to allow clients to also cache content in their browsers — for more details on these behaviors, check out the MDN ["HTTP Caching" page](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching). Pages will also serve Gzip and Brotli responses whenever possible. +Pages includes good caching defaults. That means that every time you deploy an asset to Pages, it remains cached on the Cloudflare CDN until your next deploy. As much as possible, Pages sets `ETag` and `If-None-Match` headers to allow clients to also cache content in their browsers — for more details on these behaviors, refer to the MDN [HTTP Caching page](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching). Pages will also serve Gzip and Brotli responses whenever possible. diff --git a/products/pages/src/content/platform/wordpress.png b/products/pages/src/content/platform/wordpress.png new file mode 100644 index 00000000000..5c964a8ed14 Binary files /dev/null and b/products/pages/src/content/platform/wordpress.png differ diff --git a/products/pages/src/content/tutorials/build-a-blog-using-nuxt-and-sanity/hooks.png b/products/pages/src/content/tutorials/build-a-blog-using-nuxt-and-sanity/hooks.png new file mode 100644 index 00000000000..f8051703a0b Binary files /dev/null and b/products/pages/src/content/tutorials/build-a-blog-using-nuxt-and-sanity/hooks.png differ diff --git a/products/pages/src/content/tutorials/build-a-blog-using-nuxt-and-sanity/index.md b/products/pages/src/content/tutorials/build-a-blog-using-nuxt-and-sanity/index.md index 54f3848e0b1..c9c2d20008e 100644 --- a/products/pages/src/content/tutorials/build-a-blog-using-nuxt-and-sanity/index.md +++ b/products/pages/src/content/tutorials/build-a-blog-using-nuxt-and-sanity/index.md @@ -1,8 +1,12 @@ +--- +pcx-content-type: tutorial +--- + # Build a blog using Nuxt.js and Sanity.io on Cloudflare Pages ## Introduction -In this tutorial, we'll build a blog application using Nuxt.js and Sanity.io and deploy it on Cloudflare Pages. Nuxt.js is a powerful static site generator built on the frontend framework Vue.js, and Sanity.io is a headless CMS tool built for managing your application's data without needing to maintain a database. +In this tutorial, you will build a blog application using Nuxt.js and Sanity.io and deploy it on Cloudflare Pages. Nuxt.js is a powerful static site generator built on the front-end framework Vue.js. Sanity.io is a headless CMS tool built for managing your application's data without needing to maintain a database. ## Prerequisites @@ -11,11 +15,11 @@ In this tutorial, we'll build a blog application using Nuxt.js and Sanity.io and ## Creating a new Sanity project -To begin, we'll create a new Sanity project. We'll use one of Sanity's templates, the _blog_ template, but if you'd like to do something differently, you can modify the schema or pick a custom template. +To begin, create a new Sanity project, using one of Sanity's templates, the blog template. If you would like to customize your configuration, you can modify the schema or pick a custom template. ### Installing Sanity and configuring your dataset -To do this, we'll install the `@sanity/cli` client from NPM, and create a new project using `sanity init`: +Create your new Sanity project by installing the `@sanity/cli` client from NPM, and running `sanity init` in your terminal: ```sh --- @@ -24,11 +28,11 @@ header: Installing the Sanity client and creating a new project $ npm install -g @sanity/cli && sanity init ``` -When you create a Sanity project, you can choose to use one of their pre-defined schemas. Schemas describe the shape of your data in your Sanity dataset -- if you were to start a brand new project, you may choose to initialize the schema from scratch, but for now, select the "Blog" schema. +When you create a Sanity project, you can choose to use one of their pre-defined schemas. Schemas describe the shape of your data in your Sanity dataset -- if you were to start a brand new project, you may choose to initialize the schema from scratch, but for now, select the **Blog** schema. ### Inspecting your schema -With your project created, you can navigate into the folder and start up the _studio_ locally: +With your project created, you can navigate into the folder and start up the studio locally: ```sh --- @@ -38,13 +42,13 @@ $ cd my-sanity-project $ sanity start ``` -The Sanity studio is where you can create new records for your dataset. By default, running the studio locally makes it available at `localhost:3333` -- go there now and create your author record, as well as a blog post or two! +The Sanity studio is where you can create new records for your dataset. By default, running the studio locally makes it available at `localhost:3333`– go there now and create your author record. You can also create blog posts here. ![Sanity studio preview](./sanity-studio.png) ### Deploying your dataset -When you're ready to deploy your studio, you can run `sanity deploy` to choose a unique URL for your studio. This means that you (or anyone else you invite to manage your blog) can access the studio at a `yoururl.sanity.studio` domain. +When you are ready to deploy your studio, run `sanity deploy` to choose a unique URL for your studio. This means that you (or anyone else you invite to manage your blog) can access the studio at a `yoururl.sanity.studio` domain. ```sh --- @@ -53,13 +57,20 @@ header: Deploying the studio $ sanity deploy ``` -Once you've deployed your Sanity studio, you'll need to go into Sanity's management panel ([manage.sanity.io](https://manage.sanity.io)), find your project, select "API", and add `http://localhost:3000` as an allowed CORS origin for your project. This means that requests that come to your Sanity dataset from your Nuxt application will be whitelisted. +Once you have deployed your Sanity studio: + +1. Go into Sanity's management panel ([manage.sanity.io](https://manage.sanity.io)). +2. Find your project. +3. Select **API**. +4. Add `http://localhost:3000` as an allowed CORS origin for your project. + +This means that requests that come to your Sanity dataset from your Nuxt application will be whitelisted. ![CORS settings](./cors.png) ## Creating a new Nuxt.js project -Next, we'll create a Nuxt.js project. In a new terminal, use `create-nuxt-app` to set up a new Nuxt project: +Next, create a Nuxt.js project. In a new terminal, use `create-nuxt-app` to set up a new Nuxt project: ```sh --- @@ -68,9 +79,9 @@ header: Creating a new Nuxt.js project $ npx create-nuxt-app blog ``` -Importantly, you should ensure that you select a rendering mode of "Universal (SSR / SSG)" and a deployment target of "Static (Static/JAMStack hosting)", while going through the setup process. +Importantly, ensure that you select a rendering mode of **Universal (SSR / SSG)** and a deployment target of **Static (Static/JAMStack hosting)**, while going through the setup process. -Once you've completed your project, `cd` into your new project, and start a local development server by running `yarn dev` (or, if you chose NPM as your package manager, `npm run dev`): +After you have completed your project, `cd` into your new project, and start a local development server by running `yarn dev` (or, if you chose NPM as your package manager, `npm run dev`): ```sh --- @@ -82,7 +93,7 @@ $ yarn dev ### Integrating Sanity.io -With your Nuxt.js application spun up, it's time to add Sanity's `@sanity/nuxt` plugin to your Nuxt project: +After your Nuxt.js application is set up, add Sanity's `@sanity/nuxt` plugin to your Nuxt project: ```sh --- @@ -91,7 +102,7 @@ header: Adding @nuxt/sanity $ yarn add @nuxtjs/sanity @sanity/client ``` -To configure the plugin in your Nuxt.js application, you'll need to provide some configuration details. The easiest way to do this it to copy the `sanity.json` folder from your studio into your application directory (though there are other methods, too: [check out the docs!](https://sanity.nuxtjs.org/quick-start)). +To configure the plugin in your Nuxt.js application, you will need to provide some configuration details. The easiest way to do this is to copy the `sanity.json` folder from your studio into your application directory (though there are other methods, too: [refer to the `@nuxt/sanity` documentation](https://sanity.nuxtjs.org/getting-started/quick-start/). ```sh --- @@ -100,7 +111,7 @@ header: Adding sanity.json $ cp ../my-sanity-project/sanity.json . ``` -Finally, you'll need to add `@nuxtjs/sanity` as a "build module" in your Nuxt configuration: +Finally, add `@nuxtjs/sanity` as a **build module** in your Nuxt configuration: ```js --- @@ -115,11 +126,11 @@ filename: nuxt.config.js ### Setting up components -With Sanity configured in your application, you can begin using it to render your blog. We'll set up a few pages to pull data from your Sanity API and render it. Note that if you aren't familiar with Nuxt, it's recommended that you check out the [Nuxt guide](https://nuxtjs.org/guide), which will teach you some fundamentals concepts around building applications with Nuxt. +With Sanity configured in your application, you can begin using it to render your blog. You will now set up a few pages to pull data from your Sanity API and render it. Note that if you are not familiar with Nuxt, it is recommended that you review the [Nuxt guide](https://nuxtjs.org/guide), which will teach you some fundamentals concepts around building applications with Nuxt. ### Setting up the index page -To begin, we'll update the `index` page, which will be rendered when we visit the root route (`/`). In `pages/index.vue`: +To begin, update the `index` page, which will be rendered when you visit the root route (`/`). In `pages/index.vue`: ```vue --- @@ -163,9 +174,9 @@ export default { ``` -Vue SFCs, or _single file components_, are a unique Vue feature that allow you to combine JavaScript, HTML and CSS into a single file. In `pages/index.vue`, we provide a `template` tag, which represents our Vue component. +Vue SFCs, or _single file components_, are a unique Vue feature that allow you to combine JavaScript, HTML and CSS into a single file. In `pages/index.vue`, a `template` tag is provided, which represents the Vue component. -Importantly, we use the `v-for` directive to tell Vue to render HTML for each `post` in an array of `posts`: +Importantly, `v-for` is used as a directive to tell Vue to render HTML for each `post` in an array of `posts`: ```html --- @@ -176,11 +187,11 @@ header: Inspecting the v-for directive
``` -To populate that `posts` array, we use the `asyncData` function, which is provided by Nuxt to make asynchronous calls (e.g. network requests) to populate the page's data. +To populate that `posts` array, the `asyncData` function is used, which is provided by Nuxt to make asynchronous calls (e.g., network requests) to populate the page's data. -The `$sanity` object is provided by the Nuxt + Sanity.js integration as a way to make requests to your Sanity dataset. By calling `$sanity.fetch`, and passing a query, we can retrieve specific data from our Sanity dataset, and return it as our page's data. +The `$sanity` object is provided by the Nuxt and Sanity.js integration as a way to make requests to your Sanity dataset. By calling `$sanity.fetch`, and passing a query, you can retrieve specific data from our Sanity dataset, and return it as your page's data. -If you haven't used Sanity before, you'll probably be unfamiliar with _GROQ_, the _GRaph Oriented Query language_ provided by Sanity for interfacing with your dataset. GROQ is a powerful language that allows you to tell the Sanity API _what_ data you want out of your dataset. For our first query, we'll simply tell Sanity to retrieve every object in the dataset with a `_type` value of `post`: +If you have not used Sanity before, you will probably be unfamiliar with GROQ, the GRaph Oriented Query language provided by Sanity for interfacing with your dataset. GROQ is a powerful language that allows you to tell the Sanity API what data you want out of your dataset. For our first query, you will tell Sanity to retrieve every object in the dataset with a `_type` value of `post`: ```js --- @@ -192,7 +203,7 @@ const posts = await $sanity.fetch(query) ### Setting up the blog post page -Our `index` page renders a link for each blog post in our dataset, using the `slug` value to set the URL for a blog post. For instance, if I create a blog post called "Hello World" and set the slug to `hello-world`, my Nuxt application should be able to handle a request to the page `/hello-world`, and retrieve the corresponding blog post from Sanity. +Our `index` page renders a link for each blog post in our dataset, using the `slug` value to set the URL for a blog post. For example, if I create a blog post called "Hello World" and set the slug to `hello-world`, my Nuxt application should be able to handle a request to the page `/hello-world`, and retrieve the corresponding blog post from Sanity. Nuxt has built-in support for these kind of pages, by creating a new file in `pages` in the format `_slug.vue`. In the `asyncData` function of your page, you can then use the `params` argument to reference the slug: @@ -209,7 +220,7 @@ export default { ``` -With that in mind, we can build `pages/_slug.vue` to take the incoming `slug` value, make a query to Sanity to find the matching blog post, and render the `post` title for the blog post: +With that in mind, you can build `pages/_slug.vue` to take the incoming `slug` value, make a query to Sanity to find the matching blog post, and render the `post` title for the blog post: ```vue --- @@ -231,7 +242,7 @@ import { groq } from '@nuxtjs/sanity' export default { async asyncData({ params, $sanity }) { - const query = groq`*[_type == "post" && slug.current == "/${params.slug}"][0]` + const query = groq`*[_type == "post" && slug.current == "${params.slug}"][0]` const post = await $sanity.fetch(query) return { post } } @@ -253,11 +264,11 @@ p { margin: 1rem 0; } ``` -When visiting, for instance, `/hello-world`, Nuxt will take the incoming slug `hello-world`, and make a GROQ query to Sanity for any objects with a `_type` of `post`, as well as a slug that matches the value `/hello-world`. From that set, we can get the first object in the array (using the array index operator you'd find in JavaScript -- `[0]`) and set it as `post` in our page data. +When visiting, for example, `/hello-world`, Nuxt will take the incoming slug `hello-world`, and make a GROQ query to Sanity for any objects with a `_type` of `post`, as well as a slug that matches the value `/hello-world`. From that set, you can get the first object in the array (using the array index operator you would find in JavaScript – `[0]`) and set it as `post` in your page data. ### Rendering content for a blog post -We've rendered the `post` title for our blog, but we're still missing the content of the blog post itself. To render this, we'll need to import the [`sanity-blocks-vue-component`](https://github.com/rdunk/sanity-blocks-vue-component) package, which takes Sanity's [Portable Text](https://www.sanity.io/docs/presenting-block-text) format and renders it as a Vue component. +You have rendered the `post` title for our blog, but you are still missing the content of the blog post itself. To render this, import the [`sanity-blocks-vue-component`](https://github.com/rdunk/sanity-blocks-vue-component) package, which takes Sanity's [Portable Text](https://www.sanity.io/docs/presenting-block-text) format and renders it as a Vue component. First, install the NPM package: @@ -268,7 +279,7 @@ header: Add sanity-blocks-vue-component package $ yarn add sanity-blocks-vue-component ``` -Once the package is installed, create `plugins/sanity-blocks.js`, which will import the component and register it as the Vue component `block-content`: +After the package is installed, create `plugins/sanity-blocks.js`, which will import the component and register it as the Vue component `block-content`: ```js --- @@ -279,7 +290,7 @@ import BlockContent from "sanity-blocks-vue-component"; Vue.component("block-content", BlockContent); ``` -In your Nuxt config, `nuxt.config.js`, import that file as part of the `plugins` directive: +In your Nuxt configuration, `nuxt.config.js`, import that file as part of the `plugins` directive: ```js --- @@ -290,7 +301,7 @@ filename: nuxt.config.js } ``` -In `pages/_slug.vue`, you can now use the `` component to render your content! This takes the format of a custom HTML component, and takes three arguments: `:blocks`, which indicates _what_ to render (in our case, `child`), `v-for`, which accepts an _iterator_ of where to get `child` from (in our case, `post.body`), and `:key`, which helps Vue [keep track of state rendering](https://vuejs.org/v2/guide/list.html#Maintaining-State) by providing a unique value for each post: that is, the `_id` value. +In `pages/_slug.vue`, you can now use the `` component to render your content. This takes the format of a custom HTML component, and takes three arguments: `:blocks`, which indicates what to render (in our case, `child`), `v-for`, which accepts an iterator of where to get `child` from (in our case, `post.body`), and `:key`, which helps Vue [keep track of state rendering](https://vuejs.org/v2/guide/list.html#Maintaining-State) by providing a unique value for each post: that is, the `_id` value. ```vue --- @@ -314,7 +325,7 @@ import { groq } from '@nuxtjs/sanity' export default { async asyncData({ params, $sanity }) { - const query = groq`*[_type == "post" && slug.current == "/${params.slug}"][0]` + const query = groq`*[_type == "post" && slug.current == "${params.slug}"][0]` const post = await $sanity.fetch(query) return { post } } @@ -336,7 +347,7 @@ p { margin: 1rem 0; } ``` -In `pages/index.vue`, we can also use the `block-content` component to render a _summary_ of the content, by taking the first block in your blog post content and rendering it: +In `pages/index.vue`, you can use the `block-content` component to render a summary of the content, by taking the first block in your blog post content and rendering it: ```vue --- @@ -387,28 +398,32 @@ export default { -There's many other things inside of your blog schema that you can add to your project. As an exercise, consider one of the following to dig in and continue to develop your understanding of how to build with a headless CMS: +There are many other things inside of your blog schema that you can add to your project. As an exercise, consider one of the following to continue developing your understanding of how to build with a headless CMS: - Create `pages/authors.vue`, and render a list of authors (similar to `pages/index.vue`, but for objects with `_type == "author"`) - Read the Sanity docs on [using references in GROQ](https://www.sanity.io/docs/how-queries-work#references-and-joins-db43dfd18d7d), and use it to render author information in a blog post page ## Publishing with Cloudflare Pages -Publishing your project with Cloudflare Pages is an easy, two-step process: first, push your project to GitHub, and then in the Cloudflare Pages UI, set up a new project based on that GitHub repository. Pages will deploy a new version of your site each time you publish, and will even set up preview deployments whenever you open a new pull request. +Publishing your project with Cloudflare Pages is an easy, two-step process: first, push your project to GitHub, and then in the Cloudflare Pages dashboard, set up a new project based on that GitHub repository. Pages will deploy a new version of your site each time you publish, and will even set up preview deployments whenever you open a new pull request. To push your project to GitHub, [create a new repo](https://repo.new), and follow the instructions to push your local Git repository to GitHub. -Once you've pushed your project to GitHub, go to the Pages UI, and create a new project. When asked for your project's build configuration, just choose "Nuxt" -- Pages will set the correct fields for you automatically. +After you've pushed your project to GitHub, deploy your site to Pages by logging into the [Cloudflare dashboard](https://dash.cloudflare.com/) > **Account Home** > **Pages** and selecting **Create a project**. Select the new GitHub repository that you created and, in the **Set up builds and deployments** section, choose _Nuxt_. Pages will set the correct fields for you automatically. + +When your site has been deployed, you will receive a unique URL to view it in production. + +In order to automatically deploy your project when your Sanity.io data changes, you can use [Deploy Hooks](/platform/deploy-hooks). Create a new Deploy Hook URL in your **Pages project** > **Settings**. In your Sanity project's Settings page, find the **Webhooks** section, and add the Deploy Hook URL, as seen below: -When your site has been deployed, you'll receive a unique URL to view it in production. +![Creating a deploy hook in Sanity.io](./hooks.png) -_A note about automatic deployments:_ at launch, Cloudflare Pages does not have support for webhooks. This means that you'll need to trigger a deploy manually from the Cloudflare Pages UI when you make a change to your Sanity dataset. Support for this feature will be available in the future, and this tutorial will be updated accordingly! +Now, when you make a change to your Sanity.io dataset, Sanity will make a request to your unique Deploy Hook URL, which will begin a new Cloudflare Pages deploy. By doing this, your Pages application will remain up-to-date as you add new blog posts, or edit existing ones. ## Conclusion -Congrats, you've deployed your own blog, powered by Nuxt, Sanity.io, and Cloudflare Pages. You can find the source code for both codebases on GitHub: +By completing this guide, you have successfully deployed your own blog, powered by Nuxt, Sanity.io, and Cloudflare Pages. You can find the source code for both codebases on GitHub: - Blog frontend: https://github.com/signalnerve/nuxt-sanity-blog - Sanity dataset: https://github.com/signalnerve/sanity-blog-schema -If you enjoyed this tutorial, you may be interested in learning how you can use Cloudflare Workers, our powerful serverless function platform, to augment your existing site. [Check out the tutorial to learn more!](/tutorials/build-an-api-with-workers) +If you enjoyed this tutorial, you may be interested in learning how you can use Cloudflare Workers, our powerful serverless function platform, to augment your existing site. [Refer to the tutorial to learn more.](/tutorials/build-an-api-with-workers) diff --git a/products/pages/src/content/tutorials/build-an-api-with-workers/index.md b/products/pages/src/content/tutorials/build-an-api-with-workers/index.md index a002a33fa6b..a8612b9a5a4 100644 --- a/products/pages/src/content/tutorials/build-an-api-with-workers/index.md +++ b/products/pages/src/content/tutorials/build-an-api-with-workers/index.md @@ -1,20 +1,24 @@ +--- +pcx-content-type: tutorial +--- + # Build an API for your frontend using Cloudflare Workers ## Introduction -In this tutorial, we'll build an API on Cloudflare Workers that can be used by your Pages application. Workers serve as a great companion to your frontend applications on Cloudflare Pages. In this tutorial, we'll build a simple JSON API that returns blog posts that can be retrieved and rendered in a frontend application. +In this tutorial, you will build an API on [Cloudflare Workers](https://www.cloudflare.com/learning/serverless/glossary/serverless-and-cloudflare-workers/) that can be used by your Pages application. Workers serve as a great companion to your front-end applications on Cloudflare Pages. In this tutorial, you will build a simple JSON API that returns blog posts that can be retrieved and rendered in a frontend application. -This tutorial contains two, separate applications: the backend, a serverless API deployed on Cloudflare Workers, and the frontend, built with React and deployed using Cloudflare Pages. +This tutorial contains two, separate applications: the backend, a [serverless](https://www.cloudflare.com/learning/serverless/what-is-serverless/) API deployed on Cloudflare Workers, and the front end, built with React and deployed using Cloudflare Pages. -If you're interested in a more comprehensive approach to building applications like this, you may benefit from moving from a serverless API for your content to a headless CMS — see our [headless CMS tutorial] to learn more! +If you are interested in a more comprehensive approach to building applications like this, you may benefit from moving from a serverless API for your content to a headless CMS — refer to the [headless CMS tutorial] to learn more. ## Deploying a serverless API ### Generating a new project -Let's begin by creating a new Cloudflare Workers project. If you haven't used Cloudflare Workers, or installed Wrangler, the command-line tool for managing and publishing Workers projects, you should check out the Quick Start guide in the Workers documentation. Once you've configured Wrangler and authenticated it with your Cloudflare account, you can return here to generate your API codebase. +Begin by creating a new Cloudflare Workers project. If you have not used Cloudflare Workers, or installed [Wrangler](https://developers.cloudflare.com/workers/cli-wrangler/install-update), the command-line tool for managing and publishing Workers projects, refer to the [Get started guide](https://developers.cloudflare.com/workers/get-started/guide) in the Workers documentation. Once you have configured Wrangler and authenticated it with your Cloudflare account, return here to generate your API codebase. -We'll use the Workers TypeScript template to generate our project. Don't worry if you don't know TypeScript -- we won't be writing any complicated types, and if you're using VS Code or another editor with TypeScript support, your code will be validated and checked by the editor as you build your application. Run `wrangler generate` to create a new project using the template: +You will use the Workers TypeScript template to generate our project. Don't worry if you do not know TypeScript — you will not be writing any complicated types, and if you are using VS Code or another editor with TypeScript support, your code will be validated and checked by the editor as you build your application. Run `wrangler generate` in your terminal to create a new project using the template: ```sh --- @@ -25,9 +29,9 @@ $ wrangler generate serverless-api https://github.com/cloudflare/worker-typescri ### Adding a router -Our Workers application will serve as a backend API to return blog post data using JSON to our static application. This means that it should have two routes: `/api/posts`, which will return a list of blog posts, and `/api/posts/:id`, which will be used to retrieve a specific blog post based on ID. +Your Workers application will serve as a backend API to return blog post data using JSON to our static application. This means that it should have two routes: `/api/posts`, which will return a list of blog posts, and `/api/posts/:id`, which will be used to retrieve a specific blog post based on ID. -While you can manually parse incoming URLs, it's much easier to use a routing library to consistently handle incoming requests. We'll install and use [itty-router](https://github.com/kwhitley/itty-router), an open-source routing library with support for Cloudflare Workers: +While you can manually parse incoming URLs, it is much easier to use a routing library to consistently handle incoming requests. Install and use [itty-router](https://github.com/kwhitley/itty-router), an open-source routing library with support for Cloudflare Workers by running the following command in your terminal: ```sh --- @@ -37,7 +41,7 @@ $ npm install itty-router --- ``` -With `itty-router` installed, we can open up `handler.ts` and set up our router. Begin by importing the `itty-router` package and setting up a new instance of the `Router` class: +With `itty-router` installed, you can open up `handler.ts` and set up your router. Begin by importing the `itty-router` package and setting up a new instance of the `Router` class: ```ts --- @@ -58,15 +62,15 @@ router export const handleRequest = request => router.handle(request) ``` -The above routing configuration defines three routes: `/api/posts`, `/api/posts/:id`, and a _wildcard_ route, which will be called if the incoming request doesn't match the first two routes. +The above routing configuration defines three routes: `/api/posts`, `/api/posts/:id`, and a wildcard route, which will be called if the incoming request does not match the first two routes. Create two files, `handlers/posts.ts` and `handlers/post.ts`, which will contain the handler code for our two API routes. ### Implementing API routes -In `handlers/posts.ts`, we'll return an array of posts as a JSON array. If you've never worked with JSON APIs before, all you need to know is that a serverless API returning JSON needs to define a `Content-type` header, which should be set to `application/json`. Any JSON data coming back as part of the response body should be turned into a JSON string using `JSON.stringify`. +In `handlers/posts.ts`, you will return an array of posts as a JSON array. If you have never worked with JSON APIs before, all you need to know is that a serverless API returning JSON needs to define a `Content-type` header, which should be set to `application/json`. Any JSON data coming back as part of the response body should be turned into a JSON string using `JSON.stringify`. -In the below sample, we'll stub out the `posts` array, and later, we'll come back and fill it in with real data: +In the below sample, you will stub out the `posts` array, and later, you will come back and fill it in with real data: ```ts --- @@ -83,9 +87,9 @@ const Posts = () => { export default Posts ``` -`Posts` is a simple function with no arguments that returns a JSON response. When an application makes a GET request to `/api/posts`, they'll receive a JSON-encoded array back, which they can use to render a list of blog posts. +`Posts` is a simple function with no arguments that returns a JSON response. When an application makes a GET request to `/api/posts`, they will receive a JSON-encoded array back, which they can use to render a list of blog posts. -We'll define something similar for `handlers/post.ts`, which returns a single blog post. Importantly, we'll use the request argument that `itty-router` passes to handlers, using it to retrieve the `:id` parameter that we defined in `handler.ts`. Again, we'll stub out the `post` data, but you can already begin to see in the below sample how to retrieve the `:id` param inside of a handler: +You will define something similar for `handlers/post.ts`, which returns a single blog post. Importantly, you will use the request argument that `itty-router` passes to handlers, using it to retrieve the `:id` parameter that we defined in `handler.ts`. Again, you will stub out the `post` data, but you can already begin to see in the below sample how to retrieve the `:id` param inside of a handler: ```ts --- @@ -107,7 +111,7 @@ export default Post ### Defining a static data class -Until now, we've used empty stub data to return data in our API routes. To make this application meaningful, we'll define a static data class, called `PostsStore`, to simulate how you might retrieve data from a database or other data source. In `posts_store.ts`: +Until now, you have used empty stub data to return data in our API routes. To make this application meaningful, define a static data class, called `PostsStore`, to simulate how you might retrieve data from a database or other data source. In `posts_store.ts`: ```ts --- @@ -139,9 +143,9 @@ export default class PostsStore { } ``` -We're still referring to static content, but by building a `PostsStore` class, we can abstract the retrieval of posts and easily imagine a future where this class talks to a database, key-value store, or however you prefer to store your data. +You are still referring to static content, but by building a `PostsStore` class, you can abstract the retrieval of posts and easily imagine a future where this class talks to a database, key-value store, or however you prefer to store your data. -With `PostsStore` set up, we can import it and use it in our handlers: +With `PostsStore` set up, you can import it and use it in our handlers: ```ts --- @@ -181,7 +185,7 @@ export default Post ### Adding CORS headers -Before we're ready to deploy, we'll make one more change to our handlers, adding [CORS headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) to allow our frontend application to make requests to the API. In our handlers, we'll update the `headers` variable accordingly: +Before you are ready to deploy, you will make one more change to our handlers, adding [CORS headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) to allow your frontend application to make requests to the API. In your handlers, you will update the `headers` variable accordingly: ```ts --- @@ -227,7 +231,7 @@ export default Post ### Publishing the API -With our API configured, we're ready to publish! Run `wrangler publish`, and when you've successfully deployed your application, you should be able to make requests to your API to see data returned in the console: +With your API configured, you are ready to publish. Run `wrangler publish` in your terminal, and when you have successfully deployed your application, you should be able to make requests to your API to see data returned in the console: ```sh --- @@ -237,9 +241,9 @@ $ curl serverless-api.signalnerve.workers.dev/api/posts $ curl serverless-api.signalnerve.workers.dev/api/posts/1 ``` -## Deploying a new React application to pages +## Deploying a new React application to Pages -With our serverless API deployed, we can now build the frontend of our application with React. First, we'll generate the application, and then we'll define the functionality by adding routing, and rendering blog posts from the API. Once we're happy with the implementation locally, we'll use Cloudflare Pages to deploy it in just a matter of minutes! +With your serverless API deployed, we can now build the frontend of our application with React. First, you will generate the application, and then you will define the functionality by adding routing, and rendering blog posts from the API. Once you are happy with the implementation locally, you will use Cloudflare Pages to deploy it in just a matter of minutes. ### Generating a new React application @@ -297,7 +301,7 @@ function App() { return ( - + ); } @@ -305,7 +309,7 @@ function App() { export default App; ``` -Create a new folder called `components`, and inside of it, create two files: `posts.js`, and `post.js`. These components will load the blog posts from our API, and render them. Let's begin with `posts.js`: +Create a new folder called `components`, and inside of it, create two files: `posts.js`, and `post.js`. These components will load the blog posts from our API, and render them. Begin with `posts.js`: ```js --- @@ -355,7 +359,7 @@ filename: "src/components/post.js" import React, { useEffect, useState } from "react"; import { Link } from "@reach/router"; -const Posts = ({ id }) => { +const Post = ({ id }) => { const [post, setPost] = useState({}); useEffect(() => { @@ -386,26 +390,28 @@ const Posts = ({ id }) => { ); }; -export default Posts; +export default Post; ``` ### Publishing with Cloudflare Pages -Publishing your project with Cloudflare Pages is an easy, two-step process: first, push your project to GitHub, and then in the Cloudflare Pages UI, set up a new project based on that GitHub repository. Pages will deploy a new version of your site each time you publish, and will even set up preview deployments whenever you open a new pull request. +Publishing your project with Cloudflare Pages is an easy, two-step process: first, push your project to GitHub, and then in the Cloudflare Pages dashboard, set up a new project based on that GitHub repository. + +Pages will deploy a new version of your site each time you publish and will set up preview deployments whenever you open a new pull request. -To push your project to GitHub, [create a new repo](https://repo.new), and follow the instructions to push your local Git repository to GitHub. +To push your project to GitHub, [create a new repository](https://repo.new), and follow the instructions to push your local Git repository to GitHub. -Once you've pushed your project to GitHub, go to the Pages UI, and create a new project. When asked for your project's build configuration, just choose "React" -- Pages will set the correct fields for you automatically. +Deploy your site to Pages by logging into the [Cloudflare dashboard](https://dash.cloudflare.com/) > **Account Home** > **Pages** and selecting **Create a project**. Select the new GitHub repository that you created and, in the **Set up builds and deployments** section, choose **React** -- Pages will automatically apply the correct build settings for you. -When your site has been deployed, you'll receive a unique URL to view it in production. +When your site has been deployed, you will receive a unique URL to view it in production. -Congrats, you've deployed your own blog, powered by Cloudflare Workers and Cloudflare Pages. +You have now deployed your own blog, powered by Cloudflare Workers and Cloudflare Pages. ## Custom domains -Cloudflare Workers and Pages both provide first-class support for custom domains. This means that you can deploy your Pages application to a custom domain, as you would for any normal website, and _also_ deploy your API (`/api/posts` and `/api/posts/:id`) "over" your Pages application, by specifying a route in your `wrangler.toml`. +Cloudflare Workers and Pages both provide first-class support for custom domains. This means that you can deploy your Pages application to a custom domain, as you would for any normal website, and also deploy your API (`/api/posts` and `/api/posts/:id`) "over" your Pages application, by specifying a route in your `wrangler.toml` file. -For instance, given the example domain "myblog.com", you could set up your API application's `wrangler.toml` with the following config: +For example, given the example domain `myblog.com`, you could set up your API application's `wrangler.toml` with the following config: ```toml --- @@ -416,15 +422,15 @@ route = "*myblog.com/api*" zone_id = "$zoneId" ``` -Now, when you run `wrangler publish`, your API will be published and served on `myblog.com`, but _only_ when you visit a route matching `/api*` -- this means that your basic routes (`/`, `/posts/:id`, etc.) will be sent to your frontend Pages application, but any API routes will be intercepted and handled by your Workers application. +Now, when you run `wrangler publish`, your API will be published and served on `myblog.com`, but only when you visit a route matching `/api*` -- this means that your basic routes (`/`, `/posts/:id`, etc.) will be sent to your front-end Pages application, but any API routes will be intercepted and handled by your Workers application. ## Conclusion -In this tutorial, you built a full blog application by combining a frontend deployed with Cloudflare Pages, and a serverless API built with Cloudflare Workers. You can find the source code for both codebases on GitHub: +In this tutorial, you built a full blog application by combining a front end deployed with Cloudflare Pages, and a serverless API built with Cloudflare Workers. You can find the source code for both codebases on GitHub: - Blog frontend: https://github.com/signalnerve/blog-frontend - Serverless API: https://github.com/signalnerve/serverless-api -If you enjoyed this tutorial, check out our [headless CMS tutorial]! +If you enjoyed this tutorial, refer to the [headless CMS tutorial] to learn how to build a blog using Nuxt.js and Sanity.io. -[headless CMS tutorial]:https://developers.cloudflare.com/pages/tutorials/build-a-blog-using-nuxt-and-sanity +[headless CMS tutorial]:/tutorials/build-a-blog-using-nuxt-and-sanity diff --git a/products/pages/src/content/tutorials/index.md b/products/pages/src/content/tutorials/index.md index 2a8fd62145c..6fc8cbbd758 100644 --- a/products/pages/src/content/tutorials/index.md +++ b/products/pages/src/content/tutorials/index.md @@ -1,7 +1,7 @@ --- type: overview -hideChildren: true order: 3 +pcx-content-type: navigation --- import DocsTutorials from "../../components/docs-tutorials" diff --git a/products/partners/README.md b/products/partners/README.md new file mode 100644 index 00000000000..8fa236d27ce --- /dev/null +++ b/products/partners/README.md @@ -0,0 +1,5 @@ +# Cloudflare Partners docs + +[View docs →](https://developers.cloudflare.com/partners) + +[Read contributor guidelines →](https://developers.cloudflare.com/docs-engine/contributing/content-framework) \ No newline at end of file diff --git a/products/partners/docs-config.js b/products/partners/docs-config.js new file mode 100644 index 00000000000..2725e809bbb --- /dev/null +++ b/products/partners/docs-config.js @@ -0,0 +1,29 @@ +module.exports = { + product: "Partners", + pathPrefix: "/partners", + productLogoPathD: require('./src/content/icons/partners').pathD, + contentRepo: "cloudflare/cloudflare-docs", + contentRepoFolder: "products/partners", + externalLinks: [ + { + title: "Cloudflare Partners homepage", + url: "https://www.cloudflare.com/partners" + }, + { + title: "Cloudflare homepage", + url: "https://cloudflare.com" + } + ], + search: { + indexName: "developers-cloudflare", + apiKey: "", + algoliaOptions: { 'facetFilters': ''} + }, + siteMetadata: { + title: "Cloudflare Partners docs", + description: "The Cloudflare Partner Network includes Channel Partners who deliver our security, reliability and performance solutions with a broad range of value-added and managed services, and Alliance Partners who embed Cloudflare into their applications.", + author: "@cloudflare", + url: "https://developers.cloudflare.com/partners", + image: "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" + } +} \ No newline at end of file diff --git a/products/partners/package.json b/products/partners/package.json new file mode 100644 index 00000000000..71104525ae0 --- /dev/null +++ b/products/partners/package.json @@ -0,0 +1,14 @@ +{ + "private": true, + "dependencies": { + "cloudflare-docs-engine": "git+https://github.com/cloudflare/cloudflare-docs-engine.git" + }, + "scripts": { + "bootstrap": "node_modules/cloudflare-docs-engine/bin/commands.sh bootstrap", + "build": "node_modules/cloudflare-docs-engine/bin/commands.sh build", + "develop": "node_modules/cloudflare-docs-engine/bin/commands.sh develop", + "ghactionsbootstrap": "node_modules/cloudflare-docs-engine/bin/commands.sh ghactionsbootstrap", + "savechanges": "node_modules/cloudflare-docs-engine/bin/commands.sh savechanges", + "serve": "node_modules/cloudflare-docs-engine/bin/commands.sh serve" + } +} \ No newline at end of file diff --git a/products/partners/src/content/analytics/index.md b/products/partners/src/content/analytics/index.md new file mode 100644 index 00000000000..5943cd7f0da --- /dev/null +++ b/products/partners/src/content/analytics/index.md @@ -0,0 +1,11 @@ +--- +title: Analytics +order: 1 +pcx-content-type: navigation +--- + +# Analytics + +Review visualized metrics to identify security threats, find opportunities to improve performance, and troubleshoot problems for all sites in your account. Cloudflare's analytics products summarize the data collected by Cloudflare for you and include extensive information about attack and mitigation activity detected by Firewall, load balancer steering decisions, threat and event data, and more. + +[View Analytics Integrations documentation](https://developers.cloudflare.com/fundamentals/data-products/analytics-integrations) \ No newline at end of file diff --git a/products/partners/src/content/icons/partners.js b/products/partners/src/content/icons/partners.js new file mode 100644 index 00000000000..ccdef01f03a --- /dev/null +++ b/products/partners/src/content/icons/partners.js @@ -0,0 +1,3 @@ +module.exports = { + pathD: "M24.0165 24.684C25.4257 24.684 26.8032 24.2661 27.9749 23.4832C29.1466 22.7003 30.0598 21.5875 30.5991 20.2856C31.1384 18.9837 31.2795 17.5511 31.0046 16.169C30.7297 14.7869 30.0511 13.5173 29.0546 12.5209C28.0582 11.5244 26.7886 10.8458 25.4065 10.5709C24.0244 10.296 22.5918 10.4371 21.2899 10.9764C19.9879 11.5156 18.8752 12.4289 18.0923 13.6006C17.3094 14.7723 16.8915 16.1498 16.8915 17.559C16.8931 19.4482 17.6442 21.2595 18.9801 22.5954C20.316 23.9312 22.1273 24.6824 24.0165 24.684ZM24.0165 13.4377C24.8323 13.4377 25.6299 13.6797 26.3082 14.1329C26.9866 14.5862 27.5153 15.2304 27.8275 15.9842C28.1397 16.7379 28.2214 17.5673 28.0622 18.3675C27.9031 19.1677 27.5102 19.9027 26.9333 20.4796C26.3564 21.0565 25.6214 21.4493 24.8212 21.6085C24.0211 21.7676 23.1917 21.686 22.4379 21.3737C21.6842 21.0615 21.0399 20.5328 20.5867 19.8545C20.1334 19.1761 19.8915 18.3786 19.8915 17.5627C19.8915 16.4687 20.3261 15.4195 21.0997 14.6459C21.8733 13.8723 22.9225 13.4377 24.0165 13.4377Z M9.03894 27.7928C10.0773 27.7928 11.0923 27.4849 11.9557 26.908C12.819 26.3311 13.4919 25.5112 13.8893 24.5518C14.2867 23.5925 14.3906 22.5369 14.1881 21.5185C13.9855 20.5001 13.4855 19.5647 12.7513 18.8304C12.017 18.0962 11.0816 17.5962 10.0632 17.3936C9.04476 17.1911 7.98916 17.295 7.02985 17.6924C6.07054 18.0898 5.2506 18.7627 4.67373 19.626C4.09685 20.4894 3.78894 21.5044 3.78894 22.5428C3.79033 23.9347 4.3439 25.2693 5.32816 26.2535C6.31243 27.2378 7.64698 27.7914 9.03894 27.7928ZM9.03894 20.2928C9.48395 20.2928 9.91896 20.4247 10.289 20.672C10.659 20.9192 10.9474 21.2706 11.1177 21.6817C11.288 22.0929 11.3325 22.5453 11.2457 22.9817C11.1589 23.4182 10.9446 23.8191 10.6299 24.1337C10.3153 24.4484 9.91435 24.6627 9.47789 24.7495C9.04144 24.8363 8.58904 24.7918 8.1779 24.6215C7.76677 24.4512 7.41537 24.1628 7.16813 23.7928C6.9209 23.4228 6.78894 22.9878 6.78894 22.5428C6.78954 21.9464 7.02685 21.3747 7.44875 20.9532C7.87064 20.5318 8.44259 20.295 9.03894 20.295V20.2928Z M40.5112 28.575H37.4865C36.3725 28.574 35.2726 28.8237 34.2682 29.3055C33.2866 28.1391 32.0619 27.2013 30.6798 26.558C29.2977 25.9146 27.7917 25.5812 26.2672 25.581H21.7327C20.2109 25.5813 18.7076 25.9136 17.3275 26.5548C15.9474 27.196 14.7238 28.1307 13.7422 29.2935C12.7413 28.8193 11.6473 28.5738 10.5397 28.575H7.51571C5.5307 28.5772 3.62759 29.3666 2.22384 30.7701C0.820079 32.1735 0.0302906 34.0765 0.02771 36.0615L1.52771 37.5615H46.5L48 36.0615C47.9976 34.0763 47.2077 32.1731 45.8038 30.7696C44.3998 29.366 42.4964 28.5768 40.5112 28.575ZM7.51571 31.575H10.5397C11.083 31.5777 11.6213 31.6793 12.1282 31.875C11.7558 32.7321 11.5008 33.6355 11.37 34.5607H3.28571C3.59698 33.6877 4.17049 32.9322 4.92771 32.3978C5.68493 31.8633 6.58885 31.5759 7.51571 31.575ZM14.4007 34.5622C14.7489 32.8743 15.6681 31.3579 17.0036 30.2684C18.3391 29.179 20.0092 28.5831 21.7327 28.581H26.2672C27.9907 28.5828 29.6609 29.1786 30.9966 30.2679C32.3322 31.3572 33.2516 32.8736 33.6 34.5615L14.4007 34.5622ZM36.63 34.5622C36.4999 33.6396 36.2462 32.7388 35.8755 31.884C36.3887 31.6823 36.935 31.5775 37.4865 31.575H40.5112C41.4382 31.5759 42.3422 31.8635 43.0993 32.3983C43.8564 32.9331 44.4297 33.6889 44.7405 34.5622H36.63Z M39.0105 27.7928C40.0489 27.7928 41.0639 27.4849 41.9272 26.908C42.7906 26.3311 43.4635 25.5112 43.8609 24.5518C44.2582 23.5925 44.3622 22.5369 44.1596 21.5185C43.9571 20.5001 43.457 19.5647 42.7228 18.8304C41.9886 18.0962 41.0531 17.5962 40.0347 17.3936C39.0163 17.1911 37.9607 17.295 37.0014 17.6924C36.0421 18.0898 35.2222 18.7627 34.6453 19.626C34.0684 20.4894 33.7605 21.5044 33.7605 22.5428C33.7619 23.9347 34.3155 25.2693 35.2997 26.2535C36.284 27.2378 37.6185 27.7914 39.0105 27.7928ZM39.0105 20.2928C39.4555 20.2928 39.8905 20.4247 40.2605 20.672C40.6305 20.9192 40.9189 21.2706 41.0892 21.6817C41.2595 22.0929 41.3041 22.5453 41.2173 22.9817C41.1304 23.4182 40.9162 23.8191 40.6015 24.1337C40.2868 24.4484 39.8859 24.6627 39.4495 24.7495C39.013 24.8363 38.5606 24.7918 38.1495 24.6215C37.7383 24.4512 37.3869 24.1628 37.1397 23.7928C36.8925 23.4228 36.7605 22.9878 36.7605 22.5428C36.7611 21.9464 36.9984 21.3747 37.4203 20.9532C37.8422 20.5318 38.4142 20.295 39.0105 20.295V20.2928Z", +} diff --git a/products/partners/src/content/index.md b/products/partners/src/content/index.md new file mode 100644 index 00000000000..8e0283b97f9 --- /dev/null +++ b/products/partners/src/content/index.md @@ -0,0 +1,15 @@ +--- +title: Overview +order: 0 +pcx-content-type: landing-page +--- + +# Partners + +At Cloudflare, we love our partners. Partners play a vital role in Cloudflare's mission to help build a better Internet for customers worldwide. + +The Cloudflare Partner Network includes Channel Partners who deliver our security, reliability, and performance solutions with a broad range of value-added and managed services, and Alliance Partners who embed Cloudflare into their applications. Our Technology Partners offer customers complementary solutions within the cloud stack. + + + + diff --git a/products/partners/src/content/logs/index.md b/products/partners/src/content/logs/index.md new file mode 100644 index 00000000000..5a057f0bd53 --- /dev/null +++ b/products/partners/src/content/logs/index.md @@ -0,0 +1,11 @@ +--- +title: Logs +order: 2 +pcx-content-type: navigation +--- + +# Logs + +Cloudflare Enterprise customers have access to detailed logs of the metadata generated by our products. These logs are helpful for debugging, identifying configuration adjustments, and creating analytics, especially when combined with logs from other sources, such as your application server. + +[View Logs documentation](https://developers.cloudflare.com/logs/get-started/enable-destinations) diff --git a/products/partners/src/content/network-interconnect/index.md b/products/partners/src/content/network-interconnect/index.md new file mode 100644 index 00000000000..ce29c41d171 --- /dev/null +++ b/products/partners/src/content/network-interconnect/index.md @@ -0,0 +1,13 @@ +--- +title: Network Interconnect +order: 3 +pcx-content-type: navigation +--- + +# Cloudflare Network Interconnect + +Cloudflare Network Interconnect (CNI) allows you to connect your network infrastructure directly with Cloudflare – rather than using the public Internet – for a more reliable and secure experience. + +Cloudflare partners with multiple network fabric providers to offer as many connectivity options and locations as possible. + +[View Cloudflare Network Interconnect Partner documentation](https://developers.cloudflare.com/network-interconnect/partners) diff --git a/products/partners/wrangler.toml b/products/partners/wrangler.toml new file mode 100644 index 00000000000..eca482bc247 --- /dev/null +++ b/products/partners/wrangler.toml @@ -0,0 +1,14 @@ +name = "partners" +type = "webpack" +account_id = "b54f07a6c269ecca2fa60f1ae4920c99" # cloudflare-docs.workers.dev +workers_dev = true + +[env.production] +workers_dev = false +account_id = "b54f07a6c269ecca2fa60f1ae4920c99" +zone_id = "351cf9fc660523187714fa772ad5ca49" +route = "https://developers.cloudflare.com/partners*" + +[site] +bucket = ".docs/public/" +entry-point = ".docs/workers-site" \ No newline at end of file diff --git a/products/railgun/README.md b/products/railgun/README.md new file mode 100644 index 00000000000..b442de647d9 --- /dev/null +++ b/products/railgun/README.md @@ -0,0 +1,5 @@ +# Cloudflare Railgun docs + +[View docs →](https://developers.cloudflare.com/railgun) + +[Read contributor guidelines →](https://developers.cloudflare.com/docs-engine/contributing/content-framework) diff --git a/products/railgun/docs-config.js b/products/railgun/docs-config.js new file mode 100644 index 00000000000..b4b903bfe34 --- /dev/null +++ b/products/railgun/docs-config.js @@ -0,0 +1,25 @@ +module.exports = { + product: "Railgun", + pathPrefix: "/railgun", + productIconKey: "railgun", + contentRepo: "cloudflare/cloudflare-docs", + contentRepoFolder: "products/railgun", + externalLinks: [ + { + title: "Cloudflare homepage", + url: "https://cloudflare.com" + } + ], + search: { + indexName: "developers-cloudflare", + apiKey: "b23088ab4d346409f9d3ece6606344c3", + algoliaOptions: { 'facetFilters': '["project:railgun"]'} + }, + siteMetadata: { + title: "Railgun Documentation", + description: "Improve loading times by caching dynamically generated or personalized web pages, dramatically reducing bandwidth usage and improving download times.", + author: "@cloudflare", + url: "https://developers.cloudflare.com/railgun", + image: "https://www.cloudflare.com/img/cf-twitter-card.png" + } + } \ No newline at end of file diff --git a/products/railgun/package.json b/products/railgun/package.json new file mode 100644 index 00000000000..3334a89ef07 --- /dev/null +++ b/products/railgun/package.json @@ -0,0 +1,14 @@ +{ + "private": true, + "dependencies": { + "cloudflare-docs-engine": "git+https://github.com/cloudflare/cloudflare-docs-engine.git" + }, + "scripts": { + "bootstrap": "node_modules/cloudflare-docs-engine/bin/commands.sh bootstrap", + "build": "node_modules/cloudflare-docs-engine/bin/commands.sh build", + "develop": "node_modules/cloudflare-docs-engine/bin/commands.sh develop", + "ghactionsbootstrap": "node_modules/cloudflare-docs-engine/bin/commands.sh ghactionsbootstrap", + "savechanges": "node_modules/cloudflare-docs-engine/bin/commands.sh savechanges", + "serve": "node_modules/cloudflare-docs-engine/bin/commands.sh serve" + } +} diff --git a/products/railgun/src/content/changelog.md b/products/railgun/src/content/changelog.md new file mode 100644 index 00000000000..a8e8effd6ce --- /dev/null +++ b/products/railgun/src/content/changelog.md @@ -0,0 +1,70 @@ +--- +order: 21 +pcx-content-type: reference +--- + +# Changelog + +```txt +* Apr 23 2018 Cloudflare Inc - 5.3.3 +- Uses go 1.10.1 + +* Mar 12 2018 Cloudflare Inc - 5.3.2 +- Passthrough URIs with invalid percent encoding + +* Nov 28 2017 Cloudflare Inc - 5.3.1 +- Fix IPv6 connections sometimes going to the wrong port + +* Nov 8 2016 CloudFlare Inc - 5.3.0 +- Improve rg-listener.conf format and help text +- Standardise error codes for origin failures +- Return HTTP 527 for communication errors between sender and listener +- Set railgun user agent if none is specified by client +- Add memcached as package dependency + +* Dec 16 2015 CloudFlare Inc - 5.2.0 +- Refactor listener's response/error event flow code +- Retry transient HTTP errors once + +* Sep 21 2015 CloudFlare Inc - 5.1.0 +- Better handling of origin request failures + +* Jul 13 2015 CloudFlare Inc - 5.0.2 +- Switch to new GPG key for CloudFlare packages + +* Jan 10 2015 CloudFlare Inc - 5.0.0 +- Performance and stability improvements +- Better handling of HTTP keepalives +- Reduced needed size for memcache +- Misc bugfixes + +* Jul 15 2013 CloudFlare Inc - 4.0.0 +- Optimize compression method +- Remove libz and libcrypto dependencies +- Add clearer error messages +- Misc bugfixes + +* Feb 25 2013 CloudFlare Inc - 3.3.0 +- Depend on libssl for speedier crypto routines than current Go +- Add more options for debugging and memcache control +- Improved diagnostic tools +- Misc bugfixes + +* Nov 20 2012 CloudFlare Inc - 2.7.0 +- memcached fixes and timeout adjustments +- Direct HTTP request failover improvements +- Misc bugfixes + +* Sep 14 2012 CloudFlare Inc - 2.6.0 +- Implement memcached backend +- Add activation and SSL systems +- Misc bugfixes + +* Fri Sep 14 2012 CloudFlare Inc - 2.0.0 +- Cache backend revamp +- Performance improvements +- Misc bufixes + +* Wed Jun 28 2012 CloudFlare Inc - 1.0.0 +- Initial release. +``` \ No newline at end of file diff --git a/products/railgun/src/content/index.md b/products/railgun/src/content/index.md new file mode 100644 index 00000000000..4cb33bcd661 --- /dev/null +++ b/products/railgun/src/content/index.md @@ -0,0 +1,13 @@ +--- +title: Overview +order: 0 +pcx-content-type: landing-page +--- + +# Railgun documentation + +Railgun is a WAN optimization technology developed by Cloudflare and is available to Cloudflare Business and Enterprise customers, as well as [Optimized Partners](http://www.cloudflare.com/partner-programs). Railgun requires a piece of software called the Railgun Listener to be installed on your web server’s network. Railgun takes about an hour to install, setup, and test. + +## User’s guide + + diff --git a/products/railgun/src/content/license-agreement.md b/products/railgun/src/content/license-agreement.md new file mode 100644 index 00000000000..e64aafa6d41 --- /dev/null +++ b/products/railgun/src/content/license-agreement.md @@ -0,0 +1,53 @@ +--- +title: License agreement +order: 20 +pcx-content-type: reference +--- + +# License + +SERVICES AGREEMENT + +Your installation of this software is symbol of your signature indicating that you accept the terms of this Services Agreement (this “Agreement”). This Agreement is a legal agreement between you (either an individual or a single entity) and CloudFlare Inc. for the services being provided to you by CloudFlare or its authorized representative (the “Services”), including any computer software and any associated media, printed materials, and “online” or electronic documentation provided in connection with the Services (the “Software” and together with the Services are hereinafter collectively referred to as the “Solution”). If the user is not an individual, then “you” means your company, its officers, members, employees, agents, representatives, successors and assigns. BY USING THE SOLUTION, YOU ARE INDICATING THAT YOU HAVE READ, AND AGREE TO BE BOUND BY, THE POLICIES, TERMS, AND CONDITIONS SET FORTH BELOW IN THEIR ENTIRETY WITHOUT LIMITATION OR QUALIFICATION, AS WELL AS BY ALL APPLICABLE LAWS AND REGULATIONS, AS IF YOU HAD HANDWRITTEN YOUR NAME ON A CONTRACT. IF YOU DO NOT AGREE TO THESE TERMS AND CONDITIONS, YOU MAY NOT USE THE SOLUTION. + +1\. GRANT OF RIGHTS + +1.1 Grant of License. The Solution is licensed by CloudFlare and its licensors, not sold. Subject to the terms and conditions of this Agreement, CloudFlare hereby grants you a nonexclusive, nonsublicensable, nontransferable license to use the Solution. + +1.2 Restrictions. The license granted herein is granted solely to you and not, by implication or otherwise, to any of your parents, subsidiaries or affiliates. No right is granted hereunder to use the Solution to perform services for third parties. All rights not expressly granted hereunder are reserved to CloudFlare. You may not use the Solution except as explicitly permitted under this Agreement. You are expressly prohibited from modifying, adapting, translating, preparing derivative works from, decompiling, reverse engineering, disassembling or otherwise attempting to derive source code from the Software used to provide the Services or any internal data files generated by the Solution. You are also prohibited from removing, obscuring or altering any copyright notice, trademarks, or other proprietary rights notices affixed to or associated with the Solution. + +1.3 Ownership. As between the parties, CloudFlare and/or its licensors own and shall retain all right, title, and interest in and to the Solution, including any and all technology embodied therein, including all copyrights, patents, trade secrets, trade dress and other proprietary rights associated therewith, and any derivative works created there from. + +2\. LIMITATION OF LIABILITY + +YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT DOWNLOADING THE SOFTWARE IS AT YOUR SOLE RISK. THE SOFTWARE IS PROVIDED “AS IS” AND WITHOUT WARRANTY OF ANY KIND AND CloudFlare, ITS LICENSORS AND ITS AUTHORIZED REPRESENTATIVES (TOGETHER FOR PURPOSES HEREOF, “CloudFlare”) EXPRESSLY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. CloudFlare DOES NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE SOFTWARE WILL MEET YOUR REQUIREMENTS, OR THAT THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT DEFECTS IN THE SOFTWARE WILL BE CORRECTED. FURTHERMORE, CLOUDFLARE DOES NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE SOFTWARE OR RELATED DOCUMENTATION IN TERMS OF THEIR CORRECTNESS, ACCURACY, RELIABILITY, OR OTHERWISE. NO ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY CloudFlare SHALL CREATE A WARRANTY OR IN ANY WAY INCREASE THE SCOPE OF THIS WARRANTY. + +3\. CONFIDENTIALITY + +It may be necessary during the set up and performance of the Solution for the parties to exchange Confidential Information. “Confidential Information” means any information whether oral, or written, of a private, secret, proprietary or confidential nature, concerning either party or its business operations, including without limitation: (a) your data and (b) CloudFlare’s access control systems, specialized network equipment and techniques related to the Solution, use policies, which include trade secrets of CloudFlare and its licensors. Each party agrees to use the same degree of care to protect the confidentiality of the Confidential Information of the other party and to prevent its unauthorized use or dissemination as it uses to protect its own Confidential Information of a similar nature, but in no event shall exercise less than due diligence and reasonable care. Each party agrees to use the Confidential Information of the other party only for purposes related to the performance of this Agreement. All Confidential Information remains the property of the party disclosing the information and no license or other rights to Confidential Information is granted or implied hereby. + +4\. TERM AND TERMINATION + +4.1 Term. This Agreement shall be effective upon download or install of the Software. + +4.2 Termination. This Agreement may be terminated by CloudFlare or its authorized representative by written notice to you if any of the following events occur: (i) you fail to pay any amounts due for the Services and the Solution when due and after written notice of such nonpayment has been given to you; (ii) you are in material breach of any term, condition, or provision of this Agreement or any other agreement executed by you with CloudFlare or its authorized representative in connection with the provision of the Solution and Services (a “Related Agreement”); or (iii) you terminate or suspend your business, becomes subject to any bankruptcy or insolvency proceeding under federal or state statutes, or become insolvent or subject to direct control by a trustee, receiver or similar authority. + +4.3 Effect of Termination. Upon the termination of this Agreement for any reason: (1) all license rights granted hereunder shall terminate and (2) all Confidential Information shall be returned to the disclosing party or destroyed. + +5\. MISCELLANEOUS + +5.1 Assignment. You may not assign any of your rights or delegate any of your obligations under this Agreement, whether by operation of law or otherwise, without the prior express written consent of CloudFlare or its authorized representative. Any such assignment without the prior express written consent of CloudFlare or its authorized representative shall be void. Subject to the foregoing, this Agreement will bind and inure to the benefit of the parties, their respective successors and permitted assigns. + +5.2 Waiver and Amendment. No modification, amendment or waiver of any provision of this Agreement shall be effective unless in writing and signed by the party to be charged. No failure or delay by either party in exercising any right, power, or remedy under this Agreement, except as specifically provided herein, shall operate as a waiver of any such right, power or remedy. Without limiting the foregoing, terms and conditions on any purchase orders or similar materials submitted by you to CloudFlare or its authorized representative shall be of no force or effect. + +5.3 Governing Law. This Agreement shall be governed by the laws of the State of California, USA, excluding conflict of laws and provisions, and excluding the United Nations Convention on Contracts for the International Sale of Goods. + +5.4 Notices. All notices, demands or consents required or permitted under this Agreement shall be in writing. Notice shall be sent to you at the e-mail address provided by you to CloudFlare or its authorized representative in connection with the Solution. + +5.5 Independent Contractors. The parties are independent contractors. Neither party shall be deemed to be an employee, agent, partner or legal representative of the other for any purpose and neither shall have any right, power or authority to create any obligation or responsibility on behalf of the other. + +5.6 Severability. If any provision of this Agreement is held by a court of competent jurisdiction to be contrary to law, such provision shall be changed and interpreted so as to best accomplish the objectives of the original provision to the fullest extent allowed by law and the remaining provisions of this Agreement shall remain in full force and effect. + +5.7 Force Majeure. CloudFlare shall not be liable to the other party for any failure or delay in performance caused by reasons beyond its reasonable control. + +5.8 Complete Understanding. This Agreement and the Related Agreement constitute the final, complete and exclusive agreement between the parties with respect to the subject matter hereof, and supersedes all previous written and oral agreements and communications related to the subject matter of this Agreement. To the extent this Agreement and the Related Agreement conflict, this Agreement shall control. \ No newline at end of file diff --git a/products/railgun/src/content/user-guide/administration.md b/products/railgun/src/content/user-guide/administration.md new file mode 100644 index 00000000000..4e265dda6ac --- /dev/null +++ b/products/railgun/src/content/user-guide/administration.md @@ -0,0 +1,84 @@ +--- +order: 9 +pcx-content-type: how-to +--- + +# Administration + +## Overview + +Multiple Railguns may be added to a Cloudflare account. Only one registered and activated Railgun may be used per domain. + +Railgun can be load-balanced and multiple Railgun daemons can be used per activated public IP and token. There is no need to register each Railgun daemon. + +## Adding a Railgun + +1. Navigate to the [Railgun listing page](https://www.cloudflare.com/a/account/my-account/). +1. Enter the descriptive title of your choosing. +1. Press the `Add` button. +1. Within your Railgun configuration file, update `activation.public_ip` to the public IP or a hostname which resolves to the public IP of your Railgun’s server and set the `activation.token` to the activation key displayed on the page. +1. Start the Railgun daemon so that it can proceed with activation. +1. If everything went smoothly, the red icon will change to a green check-mark after refreshing the page and the Railgun can then be toggled on. +1. If the Railgun fails to activate, check your logs for errors and [contact support](https://support.cloudflare.com/hc/articles/200172476) if the issue persists. + +## Enabling Railgun + +1. Navigate to the Railgun Settings section of the Speed page for your domain for your domain and select the desired Railgun from the drop-down menu. +1. Switch the toggle to `On`. + +## Collecting and Reporting Statistics + +Railgun can report statistics via syslog, JSON via a HTTP POST request, or through its own simple HTTP server when enabled. To enable statistics collection, first set `stats.enabled` to `1` within the main Railgun configuration file (`railgun.conf`). To enable syslog statistics reporting, set `stats.log` to `1`. To enable reporting via an HTTP POST request of JSON data to the specified URL, set `stats.url` to a valid URL. `stats.interval` determines how frequently stats will be logged or POSTed in minutes. + +If `stats.listen` is set to a non-empty `host:post` string, Railgun will spawn a local HTTP server and listen on that interface awaiting a `GET /` HTTP request. The response will be JSON-encoded statistics. The statistics returned will change according to `stats.interval`. If the Railgun statistics port is not protected via a firewall, the host portion should be set to a loopback interface (e.g., `127.0.0.1` or `localhost`) to prevent external access. An example response follows: + +```sh +$ curl -v http://127.0.0.1:22408/ + +> GET / HTTP/1.1 +> Accept: */* +> +< HTTP/1.1 200 OK +< Content-Length: 1191 +< Content-Type: application/json +< Date: Tue, 02 Apr 2013 16:56:57 GMT +{ + "bytes_retrieved": 2794091, + "conveyor_cleans_chunk": 1, + "conveyor_cleans_hasher": 1, + "conveyor_get": 0, + "conveyor_give": 0, + "conveyor_queue_chunk": 3, + "conveyor_queue_hasher": 29, + "conveyor_removed_chunk": 0, + "conveyor_removed_hasher": 0, + "conveyor_retained_chunk": 3212, + "conveyor_retained_hasher": 19468, + "conveyor_tuned_chunk": 753, + "conveyor_tuned_hasher": 1471, + "delta_compression_ratio": 6890, + "memstats.Frees": 51773495, + "memstats.Mallocs": 52696575, + "memstats.alloc": 128060840, + "memstats.heap_alloc": 128060840, + "memstats.heap_idle": 22933504, + "memstats.heap_in_use": 134352896, + "memstats.heap_objects": 923080, + "memstats.heap_released": 0, + "memstats.heap_sys": 157286400, + "memstats.lookups": 305636, + "memstats.num_gc": 133, + "memstats.pause_ns": 164422, + "memstats.stack_in_use": 3940352, + "memstats.stack_sys": 6160384, + "memstats.sys": 448807352, + "memstats.total_alloc": 5162978952, + "no_origin_response": 1, + "origin_retries": 0, + "requests_completed": 2455, + "requests_started": 2295, + "uncompressed_chunks": 2552, + "wan_bytes_sent": 2952019, + "wan_starts": 44 +} +``` \ No newline at end of file diff --git a/products/railgun/src/content/user-guide/client-api/enable-and-disable-connections.md b/products/railgun/src/content/user-guide/client-api/enable-and-disable-connections.md new file mode 100644 index 00000000000..3db73cf4399 --- /dev/null +++ b/products/railgun/src/content/user-guide/client-api/enable-and-disable-connections.md @@ -0,0 +1,452 @@ +--- +order: 13 +pcx-content-type: configuration +--- + +# Enable and disable connections + +After a Railgun has been activated, it can be assigned to a particular domain with the [conn_set](/user-guide/client-api/enable-and-disable-connections/#post-conn_set) API call. [conn_setmode_enabled](/user-guide/client-api/enable-and-disable-connections/#post-conn_setmode_enabled) and [conn_setmode_disabled](/user-guide/client-api/enable-and-disable-connections/#post-conn_setmode_disabled) can be used to toggle Railgun on or off for the domain. [conn_set](/user-guide/client-api/enable-and-disable-connections/#post-conn_set) also accepts a mode parameter to assign and enable Railgun in a single API call. [zone_conn_get_active](/user-guide/client-api/list-railgun-details/#post-zone_conn_get_active) can be used to view active Railgun connections. + +## POST conn_set + +`POST /api/v2/railgun/conn_set` + +Establish a connection between a domain and a Railgun. + +### Form parameters + +* **email** – User account email +* **tkn** – User API token +* **z** – Domain name +* **rtkn** – Railgun token +* **mode** – Railgun operation mode, `1` for active `0` for inactive + +
+Example request +
+ +```txt +POST /api/v2/railgun/conn_set HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +mode=0 +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_set", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
+ +## GET conn_set + +`GET /api/v2/railgun/conn_set` + +Establish a connection between a domain and a Railgun. + +### Query parameters + +* **email** – User account email +* **tkn** – User API token +* **z** – Domain name +* **rtkn** – Railgun token +* **mode** – Railgun operation mode, `1` for active `0` for inactive + +
+Example request +
+ +```txt +GET /api/v2/railgun/conn_set?email=&tkn=&rtkn=&z=&mode= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +mode=0 +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_set", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
+ +## POST conn_setmode_enabled + +`POST /api/v2/railgun/conn_setmode_enabled` + +Enable a Railgun. If request is successful, the specified Railgun will be enabled and traffic for the specified domain will be proxied through Railgun. + +### Form parameters + +* **email** – User account email +* **tkn** – User API token +* **z** – Domain name +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +POST /api/v2/railgun/conn_setmode_enabled HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_setmode_enabled", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
+ +## GET conn_setmode_enabled + +`GET /api/v2/railgun/conn_setmode_enabled` + +Enable a Railgun. If request is successful, the specified Railgun will be enabled and traffic for the specified domain will be proxied through Railgun. + +### Query parameters + +* **email** – User account email +* **tkn** – User API token +* **z** – Domain name +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +GET /api/v2/railgun/conn_setmode_enabled?email=&tkn=&rtkn=&z= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_setmode_enabled", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
+ +## POST conn_setmode_disabled + +`POST /api/v2/railgun/conn_setmode_disabled` + +Disable a Railgun. If request is successful, the specified Railgun will be disabled and traffic for the specified domain will no longer use Railgun. + +### Form parameters + +* **email** – User account email +* **tkn** – User API token +* **z** – Domain name +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +POST /api/v2/railgun/conn_setmode_disabled HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_setmode_disabled", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
+ +## GET conn_setmode_disabled + +`GET /api/v2/railgun/conn_setmode_disabled` + +Disable a Railgun. If request is successful, the specified Railgun will be disabled and traffic for the specified domain will no longer use Railgun. + +### Query parameters + +* **email** – User account email +* **tkn** – User API token +* **z** – Domain name +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +GET /api/v2/railgun/conn_setmode_disabled?email=&tkn=&rtkn=&z= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_setmode_disabled", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
+ +## POST conn_delete + +`POST /api/v2/railgun/conn_delete` + +Remove a connection between a domain and a Railgun. This API call will allow a connected Railgun to be assigned to a different domain. Removing the connection of an enabled Railgun and domain will disable Railgun for the domain until a new connection is made with [conn_set](/user-guide/client-api/enable-and-disable-connections/#post-conn_set). + +### Form parameters + +* **email** – User account email +* **tkn** – User API token +* **z** – Domain name +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +POST /api/v2/railgun/conn_delete HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_delete", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
+ +## GET conn_delete + +`GET /api/v2/railgun/conn_delete` + +Remove a connection between a domain and a Railgun. This API call will allow a connected Railgun to be assigned to a different domain. Removing the connection of an enabled Railgun and domain will disable Railgun for the domain until a new connection is made with [conn_set](/user-guide/client-api/enable-and-disable-connections/#post-conn_set). + +### Query parameters + +* **email** – User account email +* **tkn** – User API token +* **z** – Domain name +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +GET /api/v2/railgun/conn_delete?email=&tkn=&rtkn=&z= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_delete", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
diff --git a/products/railgun/src/content/user-guide/client-api/index.md b/products/railgun/src/content/user-guide/client-api/index.md new file mode 100644 index 00000000000..86391ab6904 --- /dev/null +++ b/products/railgun/src/content/user-guide/client-api/index.md @@ -0,0 +1,14 @@ +--- +order: 10 +pcx-content-type: reference +--- + +# Client API + +## Overview + +This article is intended for Cloudflare users with a Business or Enterprise subscription. Hosting partners must use the Optimized Partner API. All Railgun API requests must either include a Client API token and email address as a request parameter. API keys can be found and managed on the [My Account](https://www.cloudflare.com/my-account) page. All API requests should be directed at `https://www.cloudflare.com/`. + +Multiple Railguns may be added to a Cloudflare account. Only one registered and activated Railgun may be used per domain. Railgun can be load-balanced and multiple Railgun daemons can be used per activated public IP and token. There is no need to register each Railgun daemon. + +All API methods may be performed either as `GET` requests that include query string parameters or `POST` requests. The return status of the API request and any relevant errors messages are within the returned JSON response body. The `result` member indicates success or failure and the `msg` member contains further details if applicable. \ No newline at end of file diff --git a/products/railgun/src/content/user-guide/client-api/list-railgun-details.md b/products/railgun/src/content/user-guide/client-api/list-railgun-details.md new file mode 100644 index 00000000000..81c0c4855c1 --- /dev/null +++ b/products/railgun/src/content/user-guide/client-api/list-railgun-details.md @@ -0,0 +1,338 @@ +--- +order: 12 +pcx-content-type: configuration +--- + +# List Railgun details + +The following API calls can be used to determine details and the status or one or more Railguns assigned to an account. These calls are sometimes needed to determine the unique `rtkn` or `id` assigned to a Railgun. + +## POST user_get_all + +`POST /api/v2/railgun/user_get_all` + +Assign a Railgun to a domain. + +### Form parameters + +* **email** – User account email +* **tkn** – User API token + +
+Example request +
+ +```txt +POST /api/v2/railgun/user_get_all HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_user_get_all", + "railguns": { + "count": 5, + "objs": [ + { + "cdate": "2012-10-27 16:34:37.718746-07", + "edate": "2012-11-06 13:02:16.153332-08", + "props": { + "build": "2012-10-27-1257", + "number": "2.6.0", + "revision": "ff3f8f25f5238de327cf34059659de0738399176" + }, + "railgun_activated_on": "2012-11-06 13:02:16.122355-08", + "railgun_api_key": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp", + "railgun_deleted_on": null, + "railgun_host_id": null, + "railgun_id": "1", + "railgun_ip": null, + "railgun_mode": "1", + "railgun_name": "RG_100f5777999990edb60d2db56627f9", + "railgun_port": "2408", + "railgun_pubname": "Railgun for example.com", + "railgun_rec_id": "100", + "railgun_rec_name": "rg-d65dfffff666a75fd3dea2a7cfeede90.port2408.net", + "railgun_status": "V", + "railgun_tag": "a18bbbbc555f4g6h2i8j222l711n", + "railgun_type": "user", + "railgun_user_id": "1000" + }, + { + "cdate": "2012-11-02 00:03:33.17205-07", + "edate": "2012-11-02 00:03:33.17205-07", + "props": { + "build": null, + "number": null, + "revision": null + }, + "railgun_activated_on": null, + "railgun_api_key": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp", + "railgun_deleted_on": null, + "railgun_host_id": null, + "railgun_id": "178", + "railgun_ip": null, + "railgun_mode": "0", + "railgun_name": "RG_000f7777999690edb60d2db56627f9", + "railgun_port": "2408", + "railgun_pubname": "Railgun for mydomain.com", + "railgun_rec_id": null, + "railgun_rec_name": null, + "railgun_status": "INI", + "railgun_tag": "d18bbbbc555f4g6h2i8j222l711n", + "railgun_type": "user", + "railgun_user_id": "1000" + } + ] + } + }, + "result": "success" +} +``` + +
+
+ +## GET user_get_all + +`GET /api/v2/railgun/user_get_all` + +Assign a Railgun to a domain. + +### Query parameters + +* **email** – User account email +* **tkn** – User API token + +
+Example request +
+ +```txt +GET /api/v2/railgun/user_get_all?email=&tkn= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_user_get_all", + "railguns": { + "count": 5, + "objs": [ + { + "cdate": "2012-10-27 16:34:37.718746-07", + "edate": "2012-11-06 13:02:16.153332-08", + "props": { + "build": "2012-10-27-1257", + "number": "2.6.0", + "revision": "ff3f8f25f5238de327cf34059659de0738399176" + }, + "railgun_activated_on": "2012-11-06 13:02:16.122355-08", + "railgun_api_key": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp", + "railgun_deleted_on": null, + "railgun_host_id": null, + "railgun_id": "1", + "railgun_ip": null, + "railgun_mode": "1", + "railgun_name": "RG_100f5777999990edb60d2db56627f9", + "railgun_port": "2408", + "railgun_pubname": "Railgun for example.com", + "railgun_rec_id": "100", + "railgun_rec_name": "rg-d65dfffff666a75fd3dea2a7cfeede90.port2408.net", + "railgun_status": "V", + "railgun_tag": "a18bbbbc555f4g6h2i8j222l711n", + "railgun_type": "user", + "railgun_user_id": "1000" + }, + { + "cdate": "2012-11-02 00:03:33.17205-07", + "edate": "2012-11-02 00:03:33.17205-07", + "props": { + "build": null, + "number": null, + "revision": null + }, + "railgun_activated_on": null, + "railgun_api_key": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp", + "railgun_deleted_on": null, + "railgun_host_id": null, + "railgun_id": "178", + "railgun_ip": null, + "railgun_mode": "0", + "railgun_name": "RG_000f7777999690edb60d2db56627f9", + "railgun_port": "2408", + "railgun_pubname": "Railgun for mydomain.com", + "railgun_rec_id": null, + "railgun_rec_name": null, + "railgun_status": "INI", + "railgun_tag": "d18bbbbc555f4g6h2i8j222l711n", + "railgun_type": "user", + "railgun_user_id": "1000" + } + ] + } + }, + "result": "success" +} +``` + +
+
+ +## POST zone_conn_get_active + +`POST /api/v2/railgun/zone_conn_get_active` + +List all active Railgun connections for a domain. + +### Form parameters + +* **email** – User account email +* **tkn** – User API token + +
+Example request +
+ +```txt +POST /api/v2/railgun/zone_conn_get_active HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_zone_conn_get_active", + "railgun_conn": { + "obj": { + "railgun_conn_id": "2", + "railgun_id": "123", + "railgun_conn_status": "V", + "railgun_conn_mode": "1", + "railgun_enabled": "t", + } + } + }, + "result": "success" +} +``` + +
+
+ +## GET zone_conn_get_active + +`GET /api/v2/railgun/zone_conn_get_active` + +List all active Railgun connections for a domain. + +### Form parameters + +* **email** – User account email +* **tkn** – User API token + +
+Example request +
+ +```txt +GET /api/v2/railgun/zone_conn_get_active?email=&tkn=&z= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_zone_conn_get_active", + "railgun_conn": { + "obj": { + "railgun_conn_id": "2", + "railgun_id": "123", + "railgun_conn_status": "V", + "railgun_conn_mode": "1", + "railgun_enabled": "t", + } + } + }, + "result": "success" +} +``` + +
+
diff --git a/products/railgun/src/content/user-guide/client-api/manage-railguns.md b/products/railgun/src/content/user-guide/client-api/manage-railguns.md new file mode 100644 index 00000000000..ab1c28c935d --- /dev/null +++ b/products/railgun/src/content/user-guide/client-api/manage-railguns.md @@ -0,0 +1,230 @@ +--- +order: 11 +pcx-content-type: configuration +--- + +# Manage Railguns + +Creating and activating a Railgun requires two API calls. First, a Railgun must be initialized using the `init` call. The activation API call is made by Railgun when the daemon is started and does not need to be made by a user. + +## POST init + +`POST /api/v2/railgun/init` + +Create a Railgun. If request is successful, a new Railgun is added to a user account and placed in initializing status (`INI`). + +### Form parameters + +* **email** – User account email +* **tkn** – User API token +* **name** – Name of Railgun +* **pubname** – Name of Railgun shown to users + +
+Example request +
+ +```txt +POST /api/v2/railgun/init HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp +pubname=My%20Railgun +name=my-railgun +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_init", + "railgun_id": "1", + "railgun_name": "RG_a1b2c3d4e5f6g7h8i9j0k1", + "railgun_status": "INI", + "rtkn": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp" + }, + "result": "success" +} +``` + +
+
+ +## GET init + +`GET /api/v2/railgun/init` + +Create a Railgun. If request is successful, a new Railgun is added to a user account and placed in initializing status (`INI`). + +### Query parameters + +* **email** – User account email +* **tkn** – User API token +* **name** – Name of Railgun +* **pubname** – Name of Railgun shown to users + +
+Example request +
+ +```txt +GET /api/v2/railgun/init?email=&tkn=&pubname=&name= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp +pubname=My%20Railgun +name=my-railgun +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_init", + "railgun_id": "1", + "railgun_name": "RG_a1b2c3d4e5f6g7h8i9j0k1", + "railgun_status": "INI", + "rtkn": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp" + }, + "result": "success" +} +``` + +
+
+ +## POST delete + +`POST /api/v2/railgun/delete` + +Delete a Railgun. If request is successful, the Railgun with a token matching `rtkn` is removed from the account and set to deleted status (`D`). + +### Form parameters + +* **email** – User account email +* **tkn** – User API token +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +POST /api/v2/railgun/delete HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_delete", + "railgun_id": "1", + }, + "result": "success" +} +``` + +
+
+ +## GET delete + +`GET /api/v2/railgun/delete` + +Delete a Railgun. If request is successful, the Railgun with a token matching `rtkn` is removed from the account and set to deleted status (`D`). + +### Query parameters + +* **email** – User account email +* **tkn** – User API token +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +GET /api/v2/railgun/delete?email=&tkn=&rtkn= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +email=user%40cloudflare.com +tkn=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_delete", + "railgun_id": "1", + }, + "result": "success" +} +``` + +
+
diff --git a/products/railgun/src/content/user-guide/increase-logging.md b/products/railgun/src/content/user-guide/increase-logging.md new file mode 100644 index 00000000000..9118add9ea8 --- /dev/null +++ b/products/railgun/src/content/user-guide/increase-logging.md @@ -0,0 +1,45 @@ +--- +order: 22 +pcx-content-type: reference +--- + +# Increase logging for Railgun + +When troubleshooting or testing the Railgun Listener, it may be necessary to raise the level of verbosity to capture more log data for debugging. + +In order to increase logging, the `log.level` within `railgun.conf` should be set to **5** in order for all events within the Listener instance to be captured during troubleshooting. + + + +The log files for Railgun can be found in the following locations for each supported operating system: + +
+Debian/Ubuntu +
+ +Default Location: `/var/log/syslog`. When the `log.level` set to **5** in `railgun.conf`, no further action is needed to have very verbose logs appear in syslog. + +
+
+ +
+CentOS/RHEL +
+ +Default Location: `/var/log/messages`. + +By default, CentOS and RHEL omit many logs from `/messages`. A few extra steps are needed to achieve the same level of verbosity as Debian/Ubuntu: + +1. Editing `/etc/rsyslog.conf` so that the line that reads: `*.info;mail.none;authpriv.none;cron.none /var/log/messages` is updated to be: `*.* /var/log/messages`. Comment out the default line and add this on a new line below it. Another option is to create a new log file. +1. Restarting `rsyslog` and Railgun services. This may need to be done with `sudo` or as `root`: `service rsyslog restart service railgun restart`. If Railgun or `memcached` fails over/crashes, logs can be found under `/var/log/railgun/panic.log`. + +
+
diff --git a/products/railgun/src/content/user-guide/index.md b/products/railgun/src/content/user-guide/index.md new file mode 100644 index 00000000000..680f930f76b --- /dev/null +++ b/products/railgun/src/content/user-guide/index.md @@ -0,0 +1,9 @@ +--- +title: User guide +order: 1 +pcx-content-type: navigation +--- + +# General documentation for end users + + \ No newline at end of file diff --git a/products/railgun/src/content/user-guide/introduction.md b/products/railgun/src/content/user-guide/introduction.md new file mode 100644 index 00000000000..00a2e2421df --- /dev/null +++ b/products/railgun/src/content/user-guide/introduction.md @@ -0,0 +1,116 @@ +--- +order: 2 +pcx-content-type: reference +--- + +# Introduction + +One of the major advantages of using Cloudflare is that cacheable content (such as images, JavaScript, CSS and HTML) is both cached by Cloudflare and delivered from our data centers around the world. Because Cloudflare has data centers covering the entire globe, cached content gets delivered quickly to web surfers wherever they are (and overcomes latency problems). + +But only about 66% of content is cacheable. The other 34% must be obtained from the real origin web server. Railgun overcomes this problem by using a scheme that is able to cache dynamically generated or personalized web pages dramatically reducing bandwidth used and improving download times. + +Railgun is a single daemon that runs on a 64-bit system which uses alternative compression techniques to dramatically speed up WAN performance. + +It proxies traffic through a special protocol that would normally travel between Cloudflare and your origin server over HTTP. + +Typically, the markup of websites, or the body a JSON API response, does not change that frequently from one request to the next. Instead of transferring the entire request between Cloudflare and your environment, Railgun will transfer only the changes in markup from one request to the next. This cuts down on bandwidth, transfer time, and overall page load times. Railgun caches these differences in memory to make page processing as fast as possible. + +## Requirements + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
 Business and Enterprise UsersOptimized Partners
Hardware +
    +
  • Dual core processor
  • +
  • 4 GB RAM
  • +
  • 64-bit Architecture
  • +
+
+
    +
  • Quad core processor
  • +
  • 8 GB RAM
  • +
  • 64-bit Architecture
  • +
+
Software +
    +
  • Memcache >= 1.4 with at least 512 MB of storage (>1 GB recommended)
  • +
+
+
    +
  • Memcache >= 1.4 with at least 1 GB of storage (>2 GB recommended)
  • +
+
Operating System +
    +
  • Debian 8, 9
  • +
  • Ubuntu Linux 12.04, 14.04, 16.04
  • +
  • Red Hat Enterprise Linux 6, 7
  • +
  • CentOS 6, 7
  • +
+
 
Network +
    +
  • Port 2408 open to traffic from our IPs
  • +
+
 
+
+ +## Support + +When contacting [Cloudflare Support](https://support.cloudflare.com/hc/articles/200172476), provide the following information (if accessible): +* Your `railgun.conf` and `railgun-nat.conf` (if applicable) files. +* Output from `/var/log/messages` from Railgun. +* A copy of `/var/log/railgun/panic.log`, if not empty. + +Providing the IP address or hostname of your Railgun server will also allow our Support team to test connectivity remotely. Please let us know if you have firewalled your Railgun server when lodging support request. + +## Implementation Details + +Railgun works by recognizing that uncacheable web pages do not change very rapidly. For example, we captured the CNN homepage HTML once, then again after five minutes and then again after one hour. The page sizes were 92,516, five minutes later still 92,516 and one hour later 93,727. + +CNN sets the caching on this page to 60 seconds. After one minute it’s necessary to download the entire page again. But looking inside the page itself not much has changed. In fact, the change between versions is on order of 100s of bytes out of almost 100k. Here’s a screenshot of one of the small binary differences between the CNN home page at five minute intervals. The yellow bytes have changed, the rest have not: + +![Binary of CNN homepage](./media/cnn.webp) + +Experiments at Cloudflare has revealed similar change values across the web. For example, reddit.com changes by about 2.15% over five minutes and 3.16% over an hour. The New York Times home page changes by about 0.6% over five minutes and 3% over an hour. BBC News changes by about 0.4% over five minutes and 2% over an hour. + +Although the dynamic web is not cacheable, it’s also not changing quickly. That means that from moment to moment there’s only a small change between versions of a page. Railgun uses this fact to achieve very high rates of compression. This is very similar to how video compression looks for changes from frame to frame; Railgun looks for changes on a page from download to download. + +Railgun consists of two components: the sender and the listener. The sender is installed at every Cloudflare data center around the world. The listener is a software component that premium customers install on their network. + +The sender and listener establish a permanent TCP connection that’s secured by TLS. This TCP connection is used for the Railgun protocol. It’s an all binary multiplexing protocol that allows multiple HTTP requests to be run simultaneously and asynchronously across the link. + +To a web client the Railgun system looks like a proxy server, but instead of being a server it’s a wide-area link with special properties. One of those properties is that it performs compression on non-cacheable content by synchronizing page versions. + +Each end of the Railgun link keeps track of the last version of a web page that’s been requested. When a new request comes in for a page that Railgun has already seen, only the changes are sent across the link. The listener component make an HTTP request to the real, origin web server for the uncacheable page, makes a comparison with the stored version and sends across the differences. + +The sender then reconstructs the page from its cache and the difference sent by the other side. + +Of course, compression is used on web pages today. The most common technique is to gzip the page itself. CNN actually does this and sends 23,529 bytes of gzipped data which when decompressed become 92,516 bytes of page (so the page is compressed to 25.25% of its original size). And Google has proposed a somewhat complex dictionary based scheme called SDCH which is not widely deployed. + +But the Railgun compression technique goes much further. The compression between versions 1 and 2 of the page above (at five minute intervals) results in just 266 bytes of difference data being sent (a compression to 0.29% of the original page size). The one hour difference (versions 2 to 3 above) is 2,885 bytes (a compression to 3% of the original page size). Clearly, Railgun compression outpeforms gzip enormously. + +For pages that are frequently accessed the deltas are often so small that they fit inside a single TCP packet, and because the connection between the two parts of Railgun is kept active problems with TCP connection time and slow start are eliminated. \ No newline at end of file diff --git a/products/railgun/src/content/user-guide/media/cnn.webp b/products/railgun/src/content/user-guide/media/cnn.webp new file mode 100644 index 00000000000..54f1f8af7cd Binary files /dev/null and b/products/railgun/src/content/user-guide/media/cnn.webp differ diff --git a/products/railgun/src/content/user-guide/optimized-partner-api/enable-and-disable-connections.md b/products/railgun/src/content/user-guide/optimized-partner-api/enable-and-disable-connections.md new file mode 100644 index 00000000000..376661d4eed --- /dev/null +++ b/products/railgun/src/content/user-guide/optimized-partner-api/enable-and-disable-connections.md @@ -0,0 +1,548 @@ +--- +order: 17 +pcx-content-type: configuration +--- + +# Enable and disable connections + +After a Railgun has been activated, it can be exposed to a particular domain with the [suggestion_set](/user-guide/optimized-partner-api/enable-and-disable-connections#post-suggestion_set) API call. [suggestion_set](/user-guide/optimized-partner-api/enable-and-disable-connections#post-suggestion_set) also accepts the `auto_enabled` parameter to assign and enable Railgun for the domain globally in a single API call. If `auto_enabled` is not set to `1`, then the connection needed to enable Railgun for the domain must be made manually using the [conn_set](/user-guide/optimized-partner-api/enable-and-disable-connections#post-conn_set) method. [conn_setmode_enabled](/user-guide/optimized-partner-api/enable-and-disable-connections#post-conn_setmode_enabled) and [conn_setmode_disabled](/user-guide/optimized-partner-api/enable-and-disable-connections#post-conn_setmode_disabled) can be used to toggle Railgun on or off for the domain globally. [zone_conn_get_active](/user-guide/optimized-partner-api/list-railgun-details#post-zone_conn_get_active) can be used to view active Railgun connections. + +## POST suggestion_set + +`POST /api/v2/railgun/suggestion_set` + +Expose a verified Railgun to a domain via the Cloudflare Settings user-interface. This method allows an end-user to select and enable the specified Railgun within the Cloudflare Settings user-interface. If `auto_enabled` is set to `0`, it is also necessary to perform a [conn_set](/user-guide/optimized-partner-api/enable-and-disable-connections#post-conn_set) for the Railgun in order to setup a connection with the domain. + +### Form parameters + +* **host_key** – Host API key +* **z** – Domain name +* **rtkn** – Railgun token +* **auto_enabled** – Railgun operation mode, `1` for active `0` for inactive + +
+Example request +
+ +```txt +POST /api/v2/railgun/suggestion_set HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +auto_enabled=0 +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_suggest", + "railgun_id": "1", + }, + "result": "success" +} +``` + +
+
+ +## GET suggestion_set + +`GET /api/v2/railgun/suggestion_set` + +Expose a verified Railgun to a domain via the Cloudflare Settings user-interface. This method allows an end-user to select and enable the specified Railgun within the Cloudflare Settings user-interface. If `auto_enabled` is set to `0`, it is also necessary to perform a [conn_set](/user-guide/optimized-partner-api/enable-and-disable-connections#post-conn_set) for the Railgun in order to setup a connection with the domain. + +### Query parameters + +* **host_key** – Host API key +* **z** – Domain name +* **rtkn** – Railgun token +* **auto_enabled** – Railgun operation mode, `1` for active `0` for inactive + +
+Example request +
+ +```txt +GET /api/v2/railgun/suggestion_set?host_key=&rtkn=&z=&mode= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +auto_enabled=0 +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_suggest", + "railgun_id": "1", + }, + "result": "success" +} +``` + +
+
+ +## POST conn_set + +`POST /api/v2/railgun/conn_set` + +Establish a connection between a domain and a Railgun without requiring the domain’s user to utilize the Cloudflare Settings user-interface to change or deactivate it. The `mode` parameter can be set to `1` in order to enable the Railgun globally if `conn_set` succeeds. + +### Form parameters + +* **host_key** – Host API key +* **z** – Domain name +* **rtkn** – Railgun token +* **mode** – Railgun operation mode, `1` for active `0` for inactive + +
+Example request +
+ +```txt +POST /api/v2/railgun/conn_set HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +mode=0 +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_set", + "railgun_conn_id": "1", + "railgun_rec_name": "rg-d65dfffff666a77fd3dea2a7cfeede90.port2408.net" + }, + "result": "success" +} +``` + +
+
+ +## GET conn_set + +`GET /api/v2/railgun/conn_set` + +Establish a connection between a domain and a Railgun without requiring the domain’s user to utilize the Cloudflare Settings user-interface to change or deactivate it. The `mode` parameter can be set to `1` in order to enable the Railgun globally if `conn_set` succeeds. + +### Query parameters + +* **host_key** – Host API key +* **z** – Domain name +* **rtkn** – Railgun token +* **mode** – Railgun operation mode, `1` for active `0` for inactive + +
+Example request +
+ +```txt +GET /api/v2/railgun/conn_set?host_key=&rtkn=&z=&mode= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +mode=0 +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_set", + "railgun_conn_id": "1", + "railgun_rec_name": "rg-d65dfffff666a77fd3dea2a7cfeede90.port2408.net" + }, + "result": "success" +} +``` + +
+
+ +## POST conn_setmode_enabled + +`POST /api/v2/railgun/conn_setmode_enabled` + +Enable a Railgun. If request is successful, the specified Railgun will be enabled and traffic for the specified domain will be proxied through Railgun. + +### Form parameters + +* **host_key** – Host API key +* **z** – Domain name +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +POST /api/v2/railgun/conn_setmode_enabled HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_setmode_enabled", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
+ +## GET conn_setmode_enabled + +`GET /api/v2/railgun/conn_setmode_enabled` + +Enable a Railgun. If request is successful, the specified Railgun will be enabled and traffic for the specified domain will be proxied through Railgun. + +### Query parameters + +* **host_key** – Host API key +* **z** – Domain name +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +GET /api/v2/railgun/conn_setmode_enabled?host_key=&rtkn=&z= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_setmode_enabled", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
+ +## POST conn_setmode_disabled + +`POST /api/v2/railgun/conn_setmode_disabled` + +Disable a Railgun. If request is successful, the specified Railgun will be disabled and traffic for the specified domain will no longer use Railgun. + +### Form parameters + +* **host_key** – Host API key +* **z** – Domain name +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +POST /api/v2/railgun/conn_setmode_disabled HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_setmode_disabled", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
+ +## GET conn_setmode_disabled + +`GET /api/v2/railgun/conn_setmode_disabled` + +Disable a Railgun. If request is successful, the specified Railgun will be disabled and traffic for the specified domain will no longer use Railgun. + +### Query parameters + +* **host_key** – Host API key +* **z** – Domain name +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +GET /api/v2/railgun/conn_setmode_disabled?host_key=&rtkn=&z= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_setmode_disabled", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
+ +## POST conn_delete + +`POST /api/v2/railgun/conn_delete` + +Remove a connection between a domain and a Railgun. This API call will allow a connected Railgun to be assigned to a different domain. Removing the connection of an enabled Railgun and domain will disable Railgun for the domain until a new connection is made with [conn_set](/user-guide/optimized-partner-api/enable-and-disable-connections#post-conn_set). + +### Form parameters + +* **host_key** – Host API key +* **z** – Domain name +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +POST /api/v2/railgun/conn_delete HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_delete", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
+ +## GET conn_delete + +`GET /api/v2/railgun/conn_delete` + +Remove a connection between a domain and a Railgun. This API call will allow a connected Railgun to be assigned to a different domain. Removing the connection of an enabled Railgun and domain will disable Railgun for the domain until a new connection is made with [conn_set](/user-guide/optimized-partner-api/enable-and-disable-connections#post-conn_set). + +### Query parameters + +* **host_key** – Host API key +* **z** – Domain name +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +GET /api/v2/railgun/conn_delete?host_key=&rtkn=&z= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_conn_delete", + "railgun_id": "1" + }, + "result": "success" +} +``` + +
+
\ No newline at end of file diff --git a/products/railgun/src/content/user-guide/optimized-partner-api/index.md b/products/railgun/src/content/user-guide/optimized-partner-api/index.md new file mode 100644 index 00000000000..91619c8df1f --- /dev/null +++ b/products/railgun/src/content/user-guide/optimized-partner-api/index.md @@ -0,0 +1,14 @@ +--- +order: 14 +pcx-content-type: reference +--- + +# Optimized partner API + +## Overview + +This article is intended for Cloudflare Optimized Hosting Partners. End-users must utilize the Client API. All Railgun API requests must include a [Host API](http://www.cloudflare.com/docs/host-api.html) token as a request parameter. You can apply for an API key or read more about Cloudflare Hosting Partner programs [in our Partnerships page](https://www.cloudflare.com/partner-programs). All API requests should be directed at `https://www.cloudflare.com/`. + +Multiple Railguns may be added to a Cloudflare host account. Only one registered and activated Railgun may be used per domain. Railgun can be load-balanced and multiple Railgun daemons can be used per activated public IP and token. There is no need to register each Railgun daemon if they share a public IP. + +All API methods may be performed either as `GET` requests that include query string parameters or `POST` requests. The return status of the API request and any relevant errors messages are within the returned JSON response body. The `result` member indicates success or failure and the `msg` member contains further details if applicable. \ No newline at end of file diff --git a/products/railgun/src/content/user-guide/optimized-partner-api/list-railgun-details.md b/products/railgun/src/content/user-guide/optimized-partner-api/list-railgun-details.md new file mode 100644 index 00000000000..f74d052a5ab --- /dev/null +++ b/products/railgun/src/content/user-guide/optimized-partner-api/list-railgun-details.md @@ -0,0 +1,333 @@ +--- +order: 16 +pcx-content-type: configuration +--- + +# List Railgun details + +The following API calls can be used to determine details and the status or one or more Railguns assigned to an account. These calls are sometimes needed to determine the unique `rtkn` or `id` assigned to a Railgun. + +## POST host_get_all + +`POST /api/v2/railgun/host_get_all` + +Assign a Railgun to a domain + +### Form parameters + +* **host_key** – Host API key + +
+Example request +
+ +```txt +POST /api/v2/railgun/host_get_all HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters + + +host_key=e111dff66d1fddfda6a888c9992d4366 +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_host_get_all", + "railguns": { + "count": 5, + "objs": [ + { + "cdate": "2012-10-27 16:34:37.718746-07", + "edate": "2012-11-06 13:02:16.153332-08", + "props": { + "build": "2012-10-27-1257", + "number": "2.6.0", + "revision": "ff3f8f25f5238de327cf34059659de0738399176" + }, + "railgun_activated_on": "2012-11-06 13:02:16.122355-08", + "railgun_api_key": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp", + "railgun_deleted_on": null, + "railgun_host_id": null, + "railgun_id": "1", + "railgun_ip": null, + "railgun_mode": "1", + "railgun_name": "RG_100f5777999990edb60d2db56627f9", + "railgun_port": "2408", + "railgun_pubname": "Railgun for example.com", + "railgun_rec_id": "100", + "railgun_rec_name": "rg-d65dfffff666a77fd3dea2a7cfeede90.port2408.net", + "railgun_status": "V", + "railgun_tag": "a18bbbbc555f4g6h2i8j222l711n", + "railgun_type": "user", + "railgun_user_id": "1000" + }, + { + "cdate": "2012-11-02 00:03:33.17205-07", + "edate": "2012-11-02 00:03:33.17205-07", + "props": { + "build": null, + "number": null, + "revision": null + }, + "railgun_activated_on": null, + "railgun_api_key": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp", + "railgun_deleted_on": null, + "railgun_host_id": null, + "railgun_id": "178", + "railgun_ip": null, + "railgun_mode": "0", + "railgun_name": "RG_000f7777999690edb60d2db56627f9", + "railgun_port": "2408", + "railgun_pubname": "Railgun for mydomain.com", + "railgun_rec_id": null, + "railgun_rec_name": null, + "railgun_status": "INI", + "railgun_tag": "d18bbbbc555f4g6h2i8j222l711n", + "railgun_type": "user", + "railgun_user_id": "1000" + } + ] + } + }, + "result": "success" +} +``` + +
+
+ +## GET host_get_all + +`GET /api/v2/railgun/host_get_all` + +Assign a Railgun to a domain + +### Query parameters + +* **host_key** – Host API key + +
+Example request +
+ +```txt +GET /api/v2/railgun/host_get_all?host_key= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_host_get_all", + "railguns": { + "count": 5, + "objs": [ + { + "cdate": "2012-10-27 16:34:37.718746-07", + "edate": "2012-11-06 13:02:16.153332-08", + "props": { + "build": "2012-10-27-1257", + "number": "2.6.0", + "revision": "ff3f8f25f5238de327cf34059659de0738399176" + }, + "railgun_activated_on": "2012-11-06 13:02:16.122355-08", + "railgun_api_key": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp", + "railgun_deleted_on": null, + "railgun_host_id": null, + "railgun_id": "1", + "railgun_ip": null, + "railgun_mode": "1", + "railgun_name": "RG_100f5777999990edb60d2db56627f9", + "railgun_port": "2408", + "railgun_pubname": "Railgun for example.com", + "railgun_rec_id": "100", + "railgun_rec_name": "rg-d65dfffff666a77fd3dea2a7cfeede90.port2408.net", + "railgun_status": "V", + "railgun_tag": "a18bbbbc555f4g6h2i8j222l711n", + "railgun_type": "user", + "railgun_user_id": "1000" + }, + { + "cdate": "2012-11-02 00:03:33.17205-07", + "edate": "2012-11-02 00:03:33.17205-07", + "props": { + "build": null, + "number": null, + "revision": null + }, + "railgun_activated_on": null, + "railgun_api_key": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp", + "railgun_deleted_on": null, + "railgun_host_id": null, + "railgun_id": "178", + "railgun_ip": null, + "railgun_mode": "0", + "railgun_name": "RG_000f7777999690edb60d2db56627f9", + "railgun_port": "2408", + "railgun_pubname": "Railgun for mydomain.com", + "railgun_rec_id": null, + "railgun_rec_name": null, + "railgun_status": "INI", + "railgun_tag": "d18bbbbc555f4g6h2i8j222l711n", + "railgun_type": "user", + "railgun_user_id": "1000" + } + ] + } + }, + "result": "success" +} +``` + +
+
+ +## POST zone_conn_get_active + +`POST /api/v2/railgun/zone_conn_get_active` + +List all active Railgun connections for a domain. + +### Form parameters + +* **email** – User account email +* **tkn** – User API token + +
+Example request +
+ +```txt +POST /api/v2/railgun/zone_conn_get_active HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_zone_conn_get_active", + "railgun_conn": { + "obj": { + "railgun_conn_id": "2", + "railgun_id": "123", + "railgun_conn_status": "V", + "railgun_conn_mode": "1", + "railgun_enabled": "t", + } + } + }, + "result": "success" +} +``` + +
+
+ +## GET zone_conn_get_active + +`GET /api/v2/railgun/zone_conn_get_active` + +List all active Railgun connections for a domain. + +### Form parameters + +* **email** – User account email +* **tkn** – User API token + +
+Example request +
+ +```txt +GET /api/v2/railgun/zone_conn_get_active?host_key=&z= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +z=example.com +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_zone_conn_get_active", + "railgun_conn": { + "obj": { + "railgun_conn_id": "2", + "railgun_id": "123", + "railgun_conn_status": "V", + "railgun_conn_mode": "1", + "railgun_enabled": "t", + } + } + }, + "result": "success" +} +``` + +
+
\ No newline at end of file diff --git a/products/railgun/src/content/user-guide/optimized-partner-api/manage-railguns.md b/products/railgun/src/content/user-guide/optimized-partner-api/manage-railguns.md new file mode 100644 index 00000000000..780bec97dc4 --- /dev/null +++ b/products/railgun/src/content/user-guide/optimized-partner-api/manage-railguns.md @@ -0,0 +1,223 @@ +--- +order: 15 +pcx-content-type: configuration +--- +# Manage Railguns + +Creating and activating a Railgun requires two API calls. First, a Railgun must be initialized and then activated using the `init` and `activate` calls respectively. The activation API call is made by Railgun when the daemon is started and does not need to be made by a user. + +The response body of the `init` API call will contain the activation token (`rtkn`) required activation. Set `activation.token` within the Railgun configuration file to the value of `rtkn` from the API call response. + +## POST init + +`POST /api/v2/railgun/init` + +Create a Railgun. If request is successful, a new Railgun is added to a host account and placed in initializing status (`INI`). + +### Form parameters + +* **host_key** – Host API key +* **name** – Name of Railgun (optional) +* **pubname** – Name of Railgun shown to users (optional) + +
+Example request +
+ +```txt +POST /api/v2/railgun/init HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +name=my-railgun +pubname=My%20Railgun +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_init", + "railgun_id": "1", + "railgun_name": "RG_a1b2c3d4e5f6g7h8i9j0k1", + "railgun_status": "INI", + "rtkn": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp" + }, + "result": "success" +} +``` + +
+
+ +## GET init + +`GET /api/v2/railgun/init` + +Create a Railgun. If request is successful, a new Railgun is added to a host account and placed in initializing status (`INI`). + +### Query parameters + +* **host_key** – Host API key +* **name** – Name of Railgun (optional) +* **pubname** – Name of Railgun shown to users (optional) + +
+Example request +
+ +```txt +GET /api/v2/railgun/init?host_key=&pubname=&name= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +name=my-railgun +pubname=My%20Railgun +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_init", + "railgun_id": "1", + "railgun_name": "RG_a1b2c3d4e5f6g7h8i9j0k1", + "railgun_status": "INI", + "rtkn": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5pp" + }, + "result": "success" +} +``` + +
+
+ +## POST delete + +`POST /api/v2/railgun/delete` + +Delete a Railgun. If request is successful, the Railgun with a token matching `rtkn` is removed from the account and set to deleted status (`D`). + +### Form parameters + +* **host_key** – Host API key +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +POST /api/v2/railgun/delete HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_delete", + "railgun_id": "1", + }, + "result": "success" +} +``` + +
+
+ +## GET delete + +`GET /api/v2/railgun/delete` + +Delete a Railgun. If request is successful, the Railgun with a token matching `rtkn` is removed from the account and set to deleted status (`D`). + +### Query parameters + +* **host_key** – Host API key +* **rtkn** – Railgun token + +
+Example request +
+ +```txt +GET /api/v2/railgun/delete?host_key=&rtkn= HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example query string parameters: + +host_key=e111dff66d1fddfda6a888c9992d4366 +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_delete", + "railgun_id": "1", + }, + "result": "success" +} +``` + +
+
\ No newline at end of file diff --git a/products/railgun/src/content/user-guide/optimized-partner-api/railguns-via-ip-ranges.md b/products/railgun/src/content/user-guide/optimized-partner-api/railguns-via-ip-ranges.md new file mode 100644 index 00000000000..f049cdbe6f6 --- /dev/null +++ b/products/railgun/src/content/user-guide/optimized-partner-api/railguns-via-ip-ranges.md @@ -0,0 +1,65 @@ +--- +order: 18 +pcx-content-type: configuration +--- + +# Railguns via IP ranges + +It is possible to make a Railgun available to domains via IP ranges. This can be done by setting one or more IP range(s) that a Railgun will use. Once the Railgun IP Range(s) have been set, any domains that have origin IP(s) that fall within a Railgun’s IP Range(s) will have the ability to select and enable the Railgun. + +## POST ipr_set + +`POST /api/v2/railgun/ipr_set` + +Set the IP range(s) for a Railgun. This will expose the railgun to domains whose origin IP(s) are contained within the Railgun’s IP range. + +The `ipr` holds IPv4 or IPv6 host addresses, and optionally their subnet, all in one field. The subnet is represented by the number of network address bits present in the host address (the “netmask”). If the netmask is 32 AND the address is IPv4, then the value does not indicate a subnet, only a single host. In IPv6, the address length is 128 bits, so 128 bits specify a unique host address. + +The input format for this type is address/y where address is an IPv4 or IPv6 address and y is the number of bits in the netmask. If the /y portion is missing, the netmask is 32 for IPv4 and 128 for IPv6, so the value represents just a single host. On display, the /y portion is suppressed if the netmask specifies a single host. + +For internal reasons, Cloudflare restricts the netmask range of 8 < netmask < 32 for IPv4 and 112 < netmask < 128 for IPv6. + +### Form parameters + +* **rtkn** – Railgun token +* **ipr** – One or more Railgun IP addresses/ranges. Use JSON array format. + +
+Example request +
+ +```txt +POST /api/v2/railgun/ipr_set HTTP/1.1 +Host: www.cloudflare.com +Accept: */* +Content-Type: application/x-www-form-urlencoded + +Example form parameters: + +rtkn=7h8i9j0k1l2m3n4o5p6q7r8id9h0j1l +ipr=["203.0.0.0/8","208.0.0.0/8","207.0.0.7","BE81::02C3:B44F:FE1E:8329/112"] +``` + +
+
+ +
+Example response +
+ +```json +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "msg": null, + "response": { + "act": "railgun_ipr_set", + "railgun_id": "1079", + }, + "result": "success" +} +``` + +
+
\ No newline at end of file diff --git a/products/railgun/src/content/user-guide/optimized-partner-api/using-curl-with-the-api.md b/products/railgun/src/content/user-guide/optimized-partner-api/using-curl-with-the-api.md new file mode 100644 index 00000000000..8d013712865 --- /dev/null +++ b/products/railgun/src/content/user-guide/optimized-partner-api/using-curl-with-the-api.md @@ -0,0 +1,94 @@ +--- +order: 19 +pcx-content-type: configuration +--- + +# Using cURL with the API + +Here is how to create, activate, assign, and enable a Railgun using cURL and the Optimized Partner API. + +1. Look up the `user_key` for the domain to add a Railgun to. This can be done using the [user_lookup](http://www.cloudflare.com/docs/host-api.html#s3.2.3) Host API method and the user’s email address or unique ID: + +```json +$ curl -s 'https://api.cloudflare.com/host-gw.html?act=user_lookup&host_key=YOUR_HOST_API_KEY&cloudflare_email=user@example.com' + +{ + "msg": null, + "request": { + "act": "user_lookup", + "cloudflare_email": "user@example.com" + }, + "response": { + "cloudflare_email": "user@example.com", + "hosted_zones": [ + "example.com" + ], + "unique_id": "UNIQUE_ID (CAN BE USED IN PLACE OF USER'S EMAIL)", + "user_api_key": "USER_API_KEY (NOT USED FOR RAILGUN)", + "user_authed": true, + "user_exists": true, + "user_key": "UNIQUE_USER_KEY_OF_32_CHARACTERS" + }, + "result": "success" +} +``` + +2. Next, call the `init` API method to create a new Railgun using the `host_key` and `user_key`: + +```json +$ curl 'https://www.cloudflare.com/api/v2/railgun/init?host_key=YOUR_HOST_API_KEY&pubname=My%20Railgun' + +{ + "msg": null, + "response": { + "act": "railgun_init", + "railgun_id": "1", + "railgun_name": "GENERATED_OR_SPECIFIED_RG_NAME", + "railgun_status": "INI", + "rtkn": "30_CHARACTER_RTKN" + }, + "result": "success" +} +``` + +3. The Railgun daemon should then be started so that it may complete the activation process, which should be logged via syslog after startup: + +```sh +$ tail -f /var/log/messages +Oct 27 22:29:41 www railgun[Activation]: Activation POST completed. +Oct 27 22:29:41 www railgun[Activation]: Assigned Railgun ID: 1 +Oct 27 22:29:41 www railgun[Activation]: Acquired cert from server +``` + +4. Next, the `suggestion_set` method is called with `auto_enabled` set to `0` in order to expose the Railgun to the domain. Setting `auto_enabled` to `0` will not enable Railgun for the domain, it will only expose the Railgun instance to the domain within Cloudflare Settings. To expose, associate, and enable Railgun in a single API call, set `auto_enabled` to `1`. + +```sh +$ curl 'https://www.cloudflare.com/api/v2/railgun/suggestion_set?host_key=YOUR_HOST_API_KEY&z=example.com&rtkn=30_CHARACTER_RTKN&auto_enabled=0' + +{ + "msg": null, + "response": { + "act": "railgun_suggest", + "railgun_id": "1", + }, + "result": "success" +} +``` + +5. The user should now be able to see the Railgun configuration dropdown menu within their Cloudflare Settings panel. The user can now test and enable Railgun themselves. If `auto_enabled` had been set to `1`, the following `conn_set` call is not necessary and would’ve been performed automatically. + +6. Finally, the `conn_set` method is called to associate the Railgun with the domain and create the necessary port2408.net DNS records and SSL certificate. It is possible to test Railgun without enabling it using a special HTTP header. More details on testing with the port2408.net hostname (`railgun_rec_name`) in the installation documentation. + +``` +$ curl 'https://www.cloudflare.com/api/v2/railgun/conn_set?host_key=YOUR_HOST_API_KEY&z=example.com&rtkn=30_CHARACTER_RTKN&mode=0' + +{ + "msg": null, + "response": { + "act": "railgun_conn_set", + "railgun_conn_id": "2", + "railgun_rec_name": "rg-ffffffff1111111111111111.port2408.net" + }, + "result": "success" +} +``` \ No newline at end of file diff --git a/products/railgun/src/content/user-guide/railgun-ca-certificates.md b/products/railgun/src/content/user-guide/railgun-ca-certificates.md new file mode 100644 index 00000000000..b7659762624 --- /dev/null +++ b/products/railgun/src/content/user-guide/railgun-ca-certificates.md @@ -0,0 +1,35 @@ +--- +order: 23 +pcx-content-type: reference +--- + +# Using Railgun with Origin CA Certificates + +While using Railgun and configuring Origin CA certificates, please note that additional steps are needed to avoid service impact for HTTPS requests being sent from the Listener to the site's origin (where the origin CA certificates are installed). This is due to the default trust store that is shipped with the Railgun Listener being an identical copy of the root certificates that it trusts (identical to what NSS/Mozilla trusts). + +This means that when enabling Full SSL (Strict) in the dashboard while Railgun is enabled, the Listener will no longer consider the origin presenting the Origin CA certificate as trustworthy, resulting in a 520 error. + + + +Here is an example of the error generated when `validate.cert = 1`, the origin uses an Origin CA leaf, and the Origin CA roots are not in the trust store for Railgun specified by `ca.bundle`: + +``` +rg-listener: [2a074d8b36f00000-ATL] www.example.com origin request failed 123.123.123.123:443 to %!!(MISSING)s(MISSING): x509: certificate signed by unknown authority +``` + +Here are the following options available to avoid these errors: + +1. Set `validate.cert = 0` in the `railgun.conf` file. +1. Add to the trust store specified in the `ca.bundle` parameter in the `railgun.conf`. This can be done by simply adding these root certificates at the end of the file using a text editor. + +By default, `railgun.conf` defines the Listener's trust store as (for Debian/Ubuntu): `ca.bundle = /etc/ssl/railgun-ca-certs.crt`. + + diff --git a/products/railgun/src/content/user-guide/railgun-execution.md b/products/railgun/src/content/user-guide/railgun-execution.md new file mode 100644 index 00000000000..8e91485d8e0 --- /dev/null +++ b/products/railgun/src/content/user-guide/railgun-execution.md @@ -0,0 +1,90 @@ +--- +order: 8 +pcx-content-type: reference +--- + +# Railgun execution + +Railgun consists of two programs: `rg-listener` and `rg-sender`. `rg-listener` is to be installed at a hosting provider or end-user environment and listens for WAN connections. `rg-sender` is to be installed at Cloudflare locations and establishes connections across the WAN. + +`rg-sender` acts as an HTTP proxy and accepts HTTP requests (with the `CF-ORIGIN-IP` and `CF-WAN-ID` headers) and sends them across the WAN to the `rg-listener` which then contacts the real web server. + +Both ends use memcached for page caching for the delta compression. If memcached is not working then both ends still operate without delta compression. + +Both programs write a log file containing detailed information about operation. `rg-listener` reads a configuration file named `rg.config` which is assumed to be in the same directory as the program. The location of the configuration file can be set on the command line with the `-config` option. + +## Runtime Options + + + +Option | Description +---------|---------- +`-config[=\| ]PATH` | The path to the `rg.config` configuration file to use +`-version` | Output version information and exit + + +## Configuration Parameters + + + +Parameter | Description +----------|------------ +`wan.ip` | The IP on which to listen for WAN connections. Default to an empty string meaning all interfaces. +`wan.port` | The port on which to listen for WAN connections. Defaults to 2408. +`stderr.file` | Name of log file to write stderr messages to. Useful for debugging crashes. +`log.level` | The maximum level of log message to output. 0 = errors only; 1 = informational messages; 5 = debugging. The default is 0. +`syslog.addr` | The network address (`hostname:port`) of the syslog server to connect to using UDP, or a path for a connection using a Unix domain socket. Defaults to the empty string which means that the system configured syslog will be used via a Unix domain socket. +`lan.timeout` | The number of seconds to wait while trying to connect to a web server or for a read from the server. Defaults to 30. +`wan.tls` | Whether to use TLS for the WAN connection. Defaults to 1 and should only be set to 0 for testing. If no certificate files are provided, but `wan.tls=1` and `activate.server` is non-empty, `rg-listener` will attempt to acquire a certificate from the activation server. +`memcached.servers` | Space separated list of memcached servers in `host:port` format that will be used for caching. There is not default and this must be set. +`memcached.timeout` | The maximum amount of time (in ms) to wait for retrieval of a cached page from memcached. The default is 100. +`memcached.expiration` | The expiration time of individual memcached items in seconds. The default is 600 seconds (10 minutes). If set to 0 then the expiration time is infinite. +`memcached.connect` | The `host:port` for the memcached server. Defaults to `127.0.0.1:11211`. +`memcached.limit` | The maximum size (in bytes) of pages that will be stored in memcached. Defaults to 100,000. +`stats.enabled` | Determines whether statistics are gathered or not. Defaults to 0 (set to 1 for statistics output). +`stats.url` | Sets the URL (e.g. `http://stats.example.com:9090/`) to periodically POST stats to. Defaults to empty for disabled. +`stats.log` | Determines whether stats are periodically written to syslog. Defaults to 0 (set to 1 for logged statistics). +`stats.interval` | How often (in minutes) stats are generated (and logged and POSTed to the `stats.url`). Default is 1 indicating every minute. +`stats.listen` | `host:port` on which to listen and create a simple HTTP JSON API through which stats can be read via a `GET /`. Defaults to empty for disabled. +`pid.file` | The name of a file into which the PID will be written. Defaults to an empty string which means that no PID file is created. +`cert.file` | Name of file containing the certificate presented by this server to connections. No default. +`key.file` | Name of file containing the private key for the `cert.file`. No default. +`validate.cert` | Whether to validate the certificate presented when making a TLS connection. Defaults to 1 (meaning perform the validation). +`map.file` | Name of a file containing `domain=ip` pairs that is used to override DNS and the `CF-ORIGIN-IP` setting. Defaults to no file. +`activation.railgun_host` | The public facing, resolvable, hostname through which the CF CDN can connect to this rg-listener. DNS lookups are done at request-time. Use in place of `activation.public_ip`. +`activation.public_ip` | The external IP (or a hostname which resolves to the IP) of your Railgun instance used for activation and automatic DNS record updates. No Default. +`activation.token` | 32 character hash used for activation (see https://www.cloudflare.com/a/account/my-account). No default. +`activation.heartbeat_interval` | Interval, in seconds, between heartbeats to activation server. Defaults to 0/off. +`memprofile.file` | Name of the file to which the heap profile will be written when `SIGUSR1` is received. There is no default value which means that the memory profile will not be created and memory profiling will be disabled. +`cpuprofile.file` | Name of the file to which the CPU profile will be written when `SIGUSR1` is received. There is no default value which means that the CPU profile will not be created. Note that the `SIGUSR1` signal toggles profiling on and off and the file will be written on every transition to off. +`cpuprofile.intial` | Whether to begin profiling immediately on startup. It is only valid when `cpuprofile.file` is set and valid. It is 0 by default, requiring an explicit signal to begin profiling. +`memstats.file` | Name of the file to which information about current memory use will be written when `SIGUSR2` is received. This is intended for internal use. +`ca.bundle` | Name of a file containing PEM-encoded CA root certificates that will be used for verifying connections to origin servers using TLS. Defaults to empty string which means use the system roots. +`origin.idleconns` | Sets the number of idle TCP connections that will be kept open to the origin server for connection pooling. Defaults to 1. +`insecure.origin` | If this is set to 1 (to indicate true) then connections to the origin web server will be made insecurely at all times (i.e. proxied HTTPS connections will use HTTP). This is only safe if the network topology between railgun and the origin server cannot be eavesdropped upon. Defaults to 0 (false). +`origin.cf-railgun` | If set to 1 then a Cf-Railgun header will be sent to the origin web server when the request goes through railgun. Defaults to 0. The Cf-Railgun will not have a compression ratio in it, instead it has the word ‘origin’. +`compress.data` | Whether LZ4 compression is to be enabled or not. The default is 0 (disabled). Set to 1 to enable. +`cpu.oversubscribe` | Tuning feature used to set a multiplier on the number of cores available to oversubscribe. Default is 1. +`stream.size` | If the HTTP response body is greater than this number of bytes it will not be delta compressed and the body will be streamed across the WAN as it is read from the HTTP server. Defaults to 250000. + + +## Running + +1. Create a `rg.config` file containing the parameters above. +2. Start memcached and then run `rg-listener` with the `-config` option set to the path of the `rg.config` file. Errors on start will output to stderr. + +## Signal Handling + +Railgun handles some signals for easier daemon control. + +### SIGHUP + +Reload configuration file. Certain configuration options cannot be dynamically changed and require a full restart. The following parameters can be changed at runtime: compress.data, lan.timeout, log.level, map.file, memcached.expiration, memcached.limit, memcached.servers, memcached.timeout, stats.url, syslog.addr, validate.cert + +### SIGQUIT + +Perform a graceful shutdown without dropping active connections. Upon successful shutdown, deactivate the Railgun matching the `activation.token` via the Cloudflare API until the instance is restarted. + +### SIGUSR2 + +Perform a binary upgrade by spawning a new child, and then terminating the previously running parent process. This signal is automatically sent during the post-install for binary yum/apt package upgrades. \ No newline at end of file diff --git a/products/railgun/src/content/user-guide/set-up/configuration-activation.md b/products/railgun/src/content/user-guide/set-up/configuration-activation.md new file mode 100644 index 00000000000..20e22b27e9e --- /dev/null +++ b/products/railgun/src/content/user-guide/set-up/configuration-activation.md @@ -0,0 +1,97 @@ +--- +order: 6 +pcx-content-type: tutorial +--- + +# Configuration and activation + +Railgun is configured in `/etc/railgun/railgun.conf` (GNU/Linux). The most important directives are `wan.port`, which specifies the port Railgun listens on, `memcached.servers`, a space separated list of `host:port` memcached instances for Railgun to utilize. It is also possible to specify the full path to a single socket file for memcached. Using a socket file is recommended for best performance if your memcached does not require network communication. Make sure at least one memcached instance is defined. Full details on the available options [can be found in the Railgul Execution docs](/user-guide/railgun-execution). + +If you will be using Railgun in combination with a website hosted behind the same NAT scheme, then you will also need to configure static IP mapping. In other words, if your website and Railgun node are running behind the same router or firewall, there are extra configuration steps necessary to properly route requests. More details in the [Potential problems and common issues](/user-guide/set-up/potential-problems) section. Contact support for assistance, or you can use the examples in `/etc/railgun/railgun-nat.conf` to define one yourself. + +Railgun requires an activation step before usage. To activate, you will need to update the configuration file with the external IP address or a hostname which resolves to the external IP of your Railgun instance for `activation.public_ip` and your activation token for `activation.token`. You can determine the external IP address of a server with the following command: + +```sh +$ curl icanhazip.com +``` + +By default, Railgun will listen on all interfaces. It is best practice to specify the interface you would like Railgun to use. You can do that by setting the wan.ip option to the IP address of the interface you would like Railgun to listen on. **This is especially important if you have a local link IPv6 address, as Railgun will prefer that to an IPv4 address and may not work as a result.** + +Business and Enterprise users can find the Railgun activation token listed on the [Account Settings page](https://www.cloudflare.com/a/account/my-account). Details on this page can be found in the Administration documentation. Optimized Partners must use the [init](/user-guide/optimized-partner-api/manage-railguns#get-init) API method to acquire an activation token (`rtkn`). Business and Enterprise users should add a Railgun on the listing page, if you haven’t already. It can be named anything you like. After adding a Railgun, the token will be listed on the page and you can toggle the Railgun to ‘On.’ The token is a 32 character hash of numbers and letters. Copy this hash into the `activation.token` option in your Railgun configuration file. If your public IP and activation token are properly configured, the first time you start Railgun it will register and download a newly generated SSL certificate to encrypt traffic. To make sure that activation works properly, check your logs for a successful activation response when starting Railgun: + +```sh +$ tail -f /var/log/messages +Oct 27 22:29:41 www rg-listener: [Activation] Activation POST completed. +Oct 27 22:29:41 www rg-listener: [Activation] Assigned Railgun ID: 1 +Oct 27 22:29:41 www rg-listener: [Activation] Acquired cert from server +``` + +If there is a certificate error in the system log or during startup, ensure that the necessary certificate bundle is installed as described in [Preparing the Environment](/user-guide/set-up/preparing-environment) so that Railgun may connect securely back to Cloudflare’s activation servers. + +As an example, we are going to use domain port2408.net. The newly generated certificate is signed against the port2408.net domain and our system will automatically set your new port2408.net subdomain to resolve to the IP specified by `activation.public_ip`. You can use this hostname to test Railgun without enabling the service for all users. More details are in the [Testing Railgun](/user-guide/set-up/configuration-activation/#testing-railgun) section below. + +## Starting the service + +You should start the service in the manner that your operating system recommends. This is likely either by using the `init` script directly, or by invoking the service command: + +```sh +(GNU/Linux) +$ /etc/init.d/railgun start +Starting railgun: [ OK ] + +$ service railgun start +Starting railgun: [ OK ] +``` + +After running the init script, there should be an `rg-listener` process listening on the configured port (2408 by default). You can use netstat to make sure: + +```sh +(GNU/Linux) +$ netstat -plnt | grep 2408 +tcp 0 0 :::2408 :::* LISTEN 2981/rg-listener +``` + +Provided that your port is open to Cloudflare traffic, it’s time for testing. If you don’t see the process running, then there may be an issue with activation or your configuration. The Railgun panic log, which is written to `/var/log/railgun/panic.log` by default, may contain more information. You can also attempt to start Railgun without the `init` script to see if any errors are present at start: + +```sh +(GNU/Linux) +$ sudo -u railgun /usr/bin/rg-listener -config=/etc/railgun/railgun.conf +``` +## Testing Railgun + +Once you have configured Railgun, you can test its operation using the **Test** button on the Cloudflare dashboard found in **Speed** > **Optimization** > scroll down to Railgun > **Test**. This will indicate whether a request to your web server uses Railgun. + +The log file can also be used to monitor results. By default, we log only errors. For testing, you need to raise the `log.level` option from 0 to 5 in your Railgun configuration and then restart the service. You can then tail the logs to watch the requests being processed: + +```sh +$ tail -f /var/log/messages +Oct 27 23:35:57 www railgun[199.27.130.135:22114]: Handling new WAN connection +Oct 27 23:35:57 www railgun[199.27.130.135:22114]: Rx [0000000000... FnPing 2012-10-27 23:37:55.872617 +0000 UTC] +Oct 27 23:35:57 www railgun[199.27.130.135:22114]: Tx [0000000000... FnPong 2012-10-27 23:37:55.872617 +0000 UTC] +Oct 27 23:35:57 www railgun[199.27.130.135:22114]: Transmit time: 550us +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: Rx [ab18927f79... FnBegin ab18927f79... FnRequest HEAD http://example.com/ HTTP/1.1 188.165.194.208 ab18927f79... FnData DENone 374 ab18927f79... FnPush] +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: ab18927f79... waiting for request +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: ab18927f79... HEAD http://example.com/ HTTP/1.1 188.165.194.208 [] +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: ab18927f79... Starting connection to LAN +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: ab18927f79... connected to 192.0.43.10:80 +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: ab18927f79... Request sent to server +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: ab18927f79... waiting for response +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: ab18927f79... Response is ready +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: ab18927f79... Received response +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: ab18927f79... Forcing wantedDelta +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: ab18927f79... HTTP/1.1 301 Moved Permanently +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: Tx [ab18927f79... FnData DENone 328 ] +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: ab18927f79... completed (0 body bytes in 0.001572 seconds/0)#012 +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: ab18927f79... waiting for request +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: Transmit time: 88us +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: Tx [ab18927f79... FnPush] +Oct 27 23:36:06 www railgun[199.27.130.135:22114]: Transmit time: 48us +``` + +**Railgun will produce 5xx messages when the rg-listener service is unable to reach the origin web server.** Checking that the route between the Railgun server and the web server is clear is essential before contacting support. The easiest way of checking that is by performing a curl command from the Railgun server to the origin web server. If Railgun and the web server are both run on the same physical server, check that it allows loopback HTTP connections on ports 80 and 443 in its firewall settings. Please ensure the correct port is open and contact support if errors persist. + +## Going live + +It is recommended that you consult the [Testing Railgun](/user-guide/installation#testing-railgun) section before enabling Railgun for all visitors to your site. + +When you wish to go live, Enterprise and Business users should select the desired Railgun for your domain on the [Cloudflare Settings](https://www.cloudflare.com/a/account/my-account) page from the drop-down and then toggle the switch to ‘On’. Optimized Partners should use the [conn_set](/user-guide/optimized-partner-api/enable-and-disable-connections#get-conn_set) with `mode` set to `0` or [conn_setmode_enabled](/user-guide/optimized-partner-api/enable-and-disable-connections#get-conn_setmode_enabled) method to enable Railgun. Railgun may take up to five minutes to fully activate, after which you should see the `CF-Railgun` HTTP header present in responses from all your active Cloudflare DNS records. diff --git a/products/railgun/src/content/user-guide/set-up/index.md b/products/railgun/src/content/user-guide/set-up/index.md new file mode 100644 index 00000000000..5473cb02833 --- /dev/null +++ b/products/railgun/src/content/user-guide/set-up/index.md @@ -0,0 +1,8 @@ +--- +order: 3 +pcx-content-type: tutorial +--- + +# Installation + + \ No newline at end of file diff --git a/products/railgun/src/content/user-guide/set-up/installation-overview.md b/products/railgun/src/content/user-guide/set-up/installation-overview.md new file mode 100644 index 00000000000..dd3093e79c8 --- /dev/null +++ b/products/railgun/src/content/user-guide/set-up/installation-overview.md @@ -0,0 +1,28 @@ +--- +order: 5 +pcx-content-type: tutorial +--- + +# Installation Overview + +## Package Repository + +Railgun is available only for 64-bit systems. The best way of installing Railgun is via the [Package Repository](https://pkg.cloudflare.com/). Run the commands mentioned on the Package Repository page in order to set this up. Debian, CentOS, Red Hat Enterprise Linux, and Amazon Linux users may utilize the Railgun binary package repository. Ubuntu and Debian users will be automatically subscribed to the APT repo after installing one of the packages linked below. Other users will need to install the `cloudflare-release` RPM as described on the repository home page. Installation of that RPM will install the repository and GPG key. + +Once this has been set up, run the following command as root: + +### RPM-based + +```sh +$ yum install railgun-stable +``` + +### DEB-based + +```sh +$ apt-get install railgun-stable +``` + +## System Startup + +Installing the package will automatically add `/etc/init.d/railgun` to be started on boot on GNU/Linux. \ No newline at end of file diff --git a/products/railgun/src/content/user-guide/set-up/potential-problems.md b/products/railgun/src/content/user-guide/set-up/potential-problems.md new file mode 100644 index 00000000000..ae34121ae6c --- /dev/null +++ b/products/railgun/src/content/user-guide/set-up/potential-problems.md @@ -0,0 +1,65 @@ +--- +title: Potential problems and common issues +order: 7 +pcx-content-type: tutorial +--- + +# Potential problems + +If you notice consistent 523, 524 or other error responses, please check the [System Status Map](https://www.cloudflarestatus.com/) and [contact support](https://support.cloudflare.com/) as needed. Railgun will fall-back to direct HTTP requests if our endpoints can’t contact your Railgun daemon, but consistent error responses may indicate a system or origin server problem. When contacting support, please provide a screenshot of ```http://www.yourdomain.com/cdn-cgi/trace``` if you are able, or a [traceroute](https://support.cloudflare.com/hc/en-us/articles/200169336-How-do-I-run-a-traceroute-) to your domain so we know which datacenter your requests are hitting. You can then [pause](https://support.cloudflare.com/hc/en-us/articles/200169176-How-do-I-temporarily-deactivate-Cloudflare-) Cloudflare via the website to disable the service and resume normal website traffic. + +Railgun does not perform DNS queries when it receives a request for maximum efficiency and to prevent tampering. This means that the daemon is unaware of NAT routing or firewalls. NAT does not allow for addressing a public interface from within the associated LAN and Railgun requests will timeout and produce 502 errors. **This can be corrected by setting up a static IP mapping.** You can set that either through the hosts file for your system (usually at the path /etc/hosts) or through the `railgun-nat.conf` file in the same directory as the `railgun.conf` file. Please contact support if you require assistance with the NAT configuration file. + + +## Common issues + +**Requests to** `example.com:2083` **go to port 443** + +To run Railgun on non-standard ports you need to add the correct mapping to the `railgun-nat.conf` file. Otherwise, the connection goes to standard ports `80` or `443`. Example: + +```txt +default = 127.0.0.1 +example.com:2083 = 127.0.0.1:2083 +``` + +--- + +**Railgun is returning an HTTP 502 in its error logs** + +This commonly occurs when Railgun cannot reach your origin web server over port 443 (or port 80) within 30 seconds. Verify that the server your Railgun instance is on can connect via `telnet 443`. + +--- + +**Railgun is returning a** `connection failed 127.0.0.1:443/welcome.cloudflare.com: x509: certificate is valid for www.cloudflare.com, not welcome.cloudflare.com` **error** + +Your origin webserver should have a certificate matching its hostname. If you are on an internal network and are aware of the risks, you can set `validate.cert = 0` in `railgun.conf` to turn off certificate validation (not recommended). + +--- + +**I’m seeing** `bad Content-Length: "-1"` + +Railgun expects that all POST, PUT, PATCH (and other non-idempotent methods) requests have either a `Content-Length` header or a `Transfer-Encoding: chunked` header present. + +--- + +**There are errors containing** `memcached: connection failed` (Unix socket) **or** `dial tcp 127.0.0.1:11211: i/o timeout` (TCP) **in the logs** + +Railgun cannot connect to the memcached server. These errors should not cause visible errors, but will cause Railgun to stream (and not compress) responses. + +You should confirm that memcached is running, is accepting connections, and confirm the state of your memcached server via the memcached `stats` command. + +--- + +**How can I tell what the compression ratio for a request is?** + +`rg-diag` is installed alongside Railgun, and allows you to decode the `Cf-Railgun` header. Example: + +```sh +$ bin/rg-diag -decode="151df128a1 2.05 0.009465 0031 5360" + +Compression ratio 2.05% +Railgun version 5360 +Railgun Flag map.file used to change IP +Railgun Flag rg-sender sent dictionary +Railgun Flag rg-listener found dictionary +```**** diff --git a/products/railgun/src/content/user-guide/set-up/preparing-environment.md b/products/railgun/src/content/user-guide/set-up/preparing-environment.md new file mode 100644 index 00000000000..18b69691f7a --- /dev/null +++ b/products/railgun/src/content/user-guide/set-up/preparing-environment.md @@ -0,0 +1,29 @@ +--- +order: 4 +pcx-content-type: tutorial +--- + +# Preparing the Environment + +There are no dependencies to install Railgun. The only external requirement is a Memcached instance for Railgun to use as a cache backend. However, you should ensure that the latest CA certificate bundle is installed for your Operating System as it will be used to connect securely back to Cloudflare during activation. CentOS, Red Hat, Debian, and Ubuntu users should make sure that the `ca-certificates` package is installed and up-to-date via `yum` or `apt`. + +Users of [mod_cloudflare](https://www.cloudflare.com/resources-downloads), an Apache module which displays a visitor’s true source IP, should update their Apache configuration to include the IP of their Railgun instance as a trusted proxy. If Apache and Railgun run on the same server, the following line is needed within your Apache configuration (typically, `/etc/apache2/httpd.conf` or `/etc/httpd/httpd.conf`): + +``` +CloudFlareRemoteIPTrustedProxy 127.0.0.1 +``` + +If Railgun and Apache are on two separate machines, configure mod_cloudflare to use the source IP of Railgun. This may be on a NATed address or the public IP, depending on your network configuration. + +``` +CloudFlareRemoteIPTrustedProxy 192.168.1.100 +``` + +Railgun runs on port 2408 via TCP by default and this port will need to be open to connections from Cloudflare [IPs](https://www.cloudflare.com/ips). If you are unfamiliar with networking, please reach out to your hosting provider to determine the proper way to open the port for your environment. You can script out adding rules for software firewalls as follows (use with caution): + +```sh +$ for i in `curl https://www.cloudflare.com/ips-v4`; do ufw allow proto tcp from $i to any port 2408; done +$ for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -p tcp -s $i --dport 2408 -j ACCEPT; done +``` + +For users with very restrictive firewall egress (outbound) policies, outbound TCP port 443 will also need to be allowed for Railgun activation to function properly. In addition, you will need to allow Railgun to make outbound connections to your web server on any ports that it listens on. \ No newline at end of file diff --git a/products/railgun/wrangler.toml b/products/railgun/wrangler.toml new file mode 100644 index 00000000000..61f78086c3b --- /dev/null +++ b/products/railgun/wrangler.toml @@ -0,0 +1,14 @@ +name = "railgun" +type = "webpack" +account_id = "b54f07a6c269ecca2fa60f1ae4920c99" # cloudflare-docs.workers.dev +workers_dev = true + +[env.production] +workers_dev = false +account_id = "b54f07a6c269ecca2fa60f1ae4920c99" +zone_id = "351cf9fc660523187714fa772ad5ca49" +route = "https://developers.cloudflare.com/railgun*" + +[site] +bucket = ".docs/public/" +entry-point = ".docs/workers-site" \ No newline at end of file diff --git a/products/randomness-beacon/docs-config.js b/products/randomness-beacon/docs-config.js index cfde506f867..52192f4ccac 100644 --- a/products/randomness-beacon/docs-config.js +++ b/products/randomness-beacon/docs-config.js @@ -20,6 +20,6 @@ module.exports = { description: "Explore drand: a distributed service providing public randomness in an application-agnostic, secure, and efficient way.", author: "@cloudflare", url: "https://developers.cloudflare.com/randomness-beacon", - image: "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" + image: "https://www.cloudflare.com/img/cf-twitter-card.png" } } diff --git a/products/randomness-beacon/src/content/about/Background.md b/products/randomness-beacon/src/content/about/Background.md index c42d919216e..38f148bfd1b 100644 --- a/products/randomness-beacon/src/content/about/Background.md +++ b/products/randomness-beacon/src/content/about/Background.md @@ -1,6 +1,7 @@ --- title: Background order: 1 +pcx-content-type: concept --- # Where did it all begin? diff --git a/products/randomness-beacon/src/content/about/Drand.md b/products/randomness-beacon/src/content/about/Drand.md index 71ebdad7171..3e86042622e 100644 --- a/products/randomness-beacon/src/content/about/Drand.md +++ b/products/randomness-beacon/src/content/about/Drand.md @@ -1,6 +1,7 @@ --- title: Drand Project order: 0 +pcx-content-type: concept --- # What is drand? diff --git a/products/randomness-beacon/src/content/about/Future.md b/products/randomness-beacon/src/content/about/Future.md index fc0c90dafd2..4abb6cdad84 100644 --- a/products/randomness-beacon/src/content/about/Future.md +++ b/products/randomness-beacon/src/content/about/Future.md @@ -1,6 +1,7 @@ --- title: Future of Drand order: 2 +pcx-content-type: concept --- # What do you see as the future of this project? diff --git a/products/randomness-beacon/src/content/about/index.md b/products/randomness-beacon/src/content/about/index.md index 1926df579a9..600df558c96 100644 --- a/products/randomness-beacon/src/content/about/index.md +++ b/products/randomness-beacon/src/content/about/index.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content-type: concept --- # About Drand diff --git a/products/randomness-beacon/src/content/cryptographic-background/index.md b/products/randomness-beacon/src/content/cryptographic-background/index.md index feee3d4d46c..ff78aca5946 100644 --- a/products/randomness-beacon/src/content/cryptographic-background/index.md +++ b/products/randomness-beacon/src/content/cryptographic-background/index.md @@ -1,5 +1,6 @@ --- order: 2 +pcx-content-type: concept --- # Cryptographic Background diff --git a/products/randomness-beacon/src/content/cryptographic-background/randomness-generation.md b/products/randomness-beacon/src/content/cryptographic-background/randomness-generation.md index 042700407d2..a12e22bdd12 100644 --- a/products/randomness-beacon/src/content/cryptographic-background/randomness-generation.md +++ b/products/randomness-beacon/src/content/cryptographic-background/randomness-generation.md @@ -1,5 +1,6 @@ --- order: 1 +pcx-content-type: interim --- # Randomness Generation diff --git a/products/randomness-beacon/src/content/cryptographic-background/setup-phase.md b/products/randomness-beacon/src/content/cryptographic-background/setup-phase.md index 4e01655cfd4..762e88387df 100644 --- a/products/randomness-beacon/src/content/cryptographic-background/setup-phase.md +++ b/products/randomness-beacon/src/content/cryptographic-background/setup-phase.md @@ -1,5 +1,6 @@ --- order: 0 +pcx-content-type: interim --- # Setup Phase diff --git a/products/randomness-beacon/src/content/index.md b/products/randomness-beacon/src/content/index.md index 97f0e10de4e..3eb15983656 100644 --- a/products/randomness-beacon/src/content/index.md +++ b/products/randomness-beacon/src/content/index.md @@ -1,10 +1,10 @@ --- -title: Welcome +title: Overview order: 0 -type: overview +pcx-content-type: landing-page --- -# Cloudflare Randomness Beacon docs +# Cloudflare Randomness Beacon diff --git a/products/randomness-beacon/src/content/operator-guide/index.md b/products/randomness-beacon/src/content/operator-guide/index.md index 7043c1109a2..8bd86e210d1 100644 --- a/products/randomness-beacon/src/content/operator-guide/index.md +++ b/products/randomness-beacon/src/content/operator-guide/index.md @@ -1,5 +1,6 @@ --- order: 4 +pcx-content-type: reference --- # Operator Guide diff --git a/products/randomness-beacon/src/content/user-guide/index.md b/products/randomness-beacon/src/content/user-guide/index.md index f50511c3809..22dfb7b83e5 100644 --- a/products/randomness-beacon/src/content/user-guide/index.md +++ b/products/randomness-beacon/src/content/user-guide/index.md @@ -1,5 +1,6 @@ --- order: 3 +pcx-content-type: reference --- # User Guide diff --git a/products/registrar/docs-config.js b/products/registrar/docs-config.js index d3bf7de335e..ea64602b12f 100644 --- a/products/registrar/docs-config.js +++ b/products/registrar/docs-config.js @@ -20,6 +20,6 @@ module.exports = { description: "Welcome to Cloudflare Registrar. The first registrar you can love.", author: "@cloudflare", url: "https://developers.cloudflare.com/registrar", - image: "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" + image: "https://www.cloudflare.com/img/cf-twitter-card.png" } } diff --git a/products/registrar/src/content/_partials/_before-you-begin.md b/products/registrar/src/content/_partials/_before-you-begin.md new file mode 100644 index 00000000000..c195914fff5 --- /dev/null +++ b/products/registrar/src/content/_partials/_before-you-begin.md @@ -0,0 +1,10 @@ +## Before transferring a domain to Cloudflare + +* Ensure you have created [an account that includes your domain](https://support.cloudflare.com/hc/articles/201720164) and [changed your DNS nameservers](https://support.cloudflare.com/hc/articles/205195708) to Cloudflare. +* Disable DNSSEC by: + * Removing the DS record at your current DNS host. + * [Disabling DNSSEC](https://support.cloudflare.com/hc/articles/360006660072) in the Cloudflare dashboard. +* If initiating multiple transfers, notify your financial institution to prevent them from flagging these charges as fraudulent. +* Renew your domain if it is within 15 days of expiration. +* Unlock your domain at your current registrar. +* Do not make any changes to the Registrant contact information. Updating the Registrant contact may result in your current registrar locking the domain for 60 days. \ No newline at end of file diff --git a/products/registrar/src/content/_partials/_email-forward.md b/products/registrar/src/content/_partials/_email-forward.md new file mode 100644 index 00000000000..d644e3737fa --- /dev/null +++ b/products/registrar/src/content/_partials/_email-forward.md @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/products/registrar/src/content/_partials/_restrictions.md b/products/registrar/src/content/_partials/_restrictions.md new file mode 100644 index 00000000000..07e1a0f8e59 --- /dev/null +++ b/products/registrar/src/content/_partials/_restrictions.md @@ -0,0 +1,18 @@ +## Restrictions + +To transfer to a new registrar, your domain must meet a few requirements: + +* ICANN rules prohibit a domain from being transferred if it has been registered or previously transferred within the last 60 days or if the WHOIS Registrant contact information was modified in the last 60 days (even if redacted). +* Your account at your current registrar must be active. If your domain has expired, you may be able to transfer the domain. If the domain is in the `RedemptionPeriod` you will likely need to restore the domain first before the transfer can proceed. + + + +* Cloudflare does not currently support premium domains. Some registries designate a domain name as “premium” and charge higher wholesale rates for these domains. +* Domains that have a status of `serverHold`, `serverTransferProhibited`, `pendingDelete`, `pendingTransfer`, or `RedemptionPeriod` may not be transferred. +* Domains that have a status of `clientTransferProhibited` (Transfer Lock) will show as available for transfer. However, the Transfer Lock must be removed at your current registrar before the transfer can begin. + +If your domain is listed as available for transfer in the Cloudflare dashboard, these restrictions have already been checked. \ No newline at end of file diff --git a/products/registrar/src/content/account-options/domain-management.md b/products/registrar/src/content/account-options/domain-management.md new file mode 100644 index 00000000000..234cd8b78ed --- /dev/null +++ b/products/registrar/src/content/account-options/domain-management.md @@ -0,0 +1,42 @@ +--- +order: +pcx-content: reference +--- + +# Domain management + +You can manage your domain with Cloudflare Registrar in **Overview** on the dashboard. + +## Domain status + +When your domain is registered with Cloudflare, you can review your domain status in **Overview** > **Manage Domain** in the right-hand menu. Scroll down to **Manage domain** > **Registration** tab. Here, you can review the current expiration date and Auto-Renew status for your domain. + +## Editing WHOIS records + +Cloudflare redacts WHOIS information from your domain by default. However, we do store the authentic WHOIS record for your domain. You may edit the WHOIS contact data for any domain. To do that: + +1. Make sure you are [logged in to the Cloudflare dashboard](https://dash.cloudflare.com/login) and have selected your account and domain. +1. From **Overview**, scroll down to **Manage domain** in the right-hand menu > **Contacts**. +1. Select **Edit** in any of the contacts you previously set up. This allows you to update the contact information for the selected domain only. It will not update the contact information for other domains within the account. + +## Default Contact Data + +The first time you transfer or register a new domain, a Default Contact is created. That contact information may be used for future transfers and registrations. The contact data may be updated at any time in the dashboard. Updating the Default Contact data will not update the contact information for any domains in the account. This Default Contact data is only used to prepopulate contact information for new registrations and transfers. + +## Automatic renewal of domain + +Cloudflare Registrar enrolls your domain to auto-renew by default. Unlike other registrars, your domain will only renew at the list price set by the registry. When a domain has the auto-renew setting turned on, Cloudflare will attempt to automatically renew the domain prior to expiration. + +There is no guarantee that the renewal will succeed. Renewals may fail for various reasons, including billing failures and registry downtime. While we will make several attempts to renew, we strongly recommend you frequently review your account to ensure your domains have been renewed. + +If you decide you no longer need the domain, [disable auto-renew for your account](/account-options/renew-domains#set—up-automatic-renewals). Once disabled, your domain will not renew upon expiration. + + + +You can continue to keep your domain registered with Cloudflare for the time remaining on the expiration date. If you decide you want to keep the domain, enable auto-renew at any time prior to your expiration. + +For more details on renewals, refer to [Domain renewal](/account-options/renew-domains). \ No newline at end of file diff --git a/products/registrar/src/content/account-options/enabling-dnssec.md b/products/registrar/src/content/account-options/enabling-dnssec.md new file mode 100644 index 00000000000..a96667f9fc9 --- /dev/null +++ b/products/registrar/src/content/account-options/enabling-dnssec.md @@ -0,0 +1,30 @@ +--- +order: +title: Enabling DNSSEC +pcx-content: tutorial +--- + +# Domain Name System Security Extensions + +The domain name system (DNS) translates domain names into numeric Internet addresses. However, DNS is a fundamentally insecure protocol. It does not guarantee where DNS records come from and accepts any requests given to it. + +DNSSEC creates a secure layer to the domain name system by adding cryptographic signatures to DNS records. By doing so, your request can check the signature to verify that the record you need comes from the authoritative name server and was not altered along the way. [Read more about how DNSSEC works on cloudflare.com](https://www.cloudflare.com/dns/dnssec/how-dnssec-works/). + +## Enabling DNSSEC + +Cloudflare Registrar offers one-click DNSSEC activation for free to all customers. You will not need to set the DS record details manually. However, your domain must be using Cloudflare as the authoritative DNS provider. + +1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com/login) and select the account and domain you want to configure. +1. Navigate to **DNS**. +1. Scroll down until you reach **DNSSEC**. Select **Enable DNSSEC**. +1. You will be presented with DS record details specific to your site. You do not need to copy these or manually enter them when you are using Cloudflare Registrar. Instead, select **Confirm**. + +![Enable button image](../static/enable-button.png) + +Cloudflare will publish those DS details in the form of CDS and CDNSKEY records for a domain delegated to Cloudflare. The Cloudflare Registrar scans those records at regular intervals. When Cloudflare notices you have enabled DNSSEC, Cloudflare gathers those details and sends them to your domain’s registry. + +This process can take one to two days after you first enable DNSSEC. + +## Confirming DNSSEC + +When DNSSEC has been successfully applied to your domain, you will see a confirmed status in the DNSSEC card where you first selected **Enable**. You can also confirm this by reviewing the WHOIS information for your domain. Domains with DNSSEC will read `signedDelegation` in the DNSSEC field. \ No newline at end of file diff --git a/products/registrar/src/content/account-options/index.md b/products/registrar/src/content/account-options/index.md new file mode 100644 index 00000000000..44cc8218331 --- /dev/null +++ b/products/registrar/src/content/account-options/index.md @@ -0,0 +1,8 @@ +--- +order: 3 +pcx-content: navigation +--- + +# Account options + + diff --git a/products/registrar/src/content/account-options/renew-domains.md b/products/registrar/src/content/account-options/renew-domains.md new file mode 100644 index 00000000000..853c205cbf7 --- /dev/null +++ b/products/registrar/src/content/account-options/renew-domains.md @@ -0,0 +1,59 @@ +--- +order: +pcx-content-type: tutorial +title: Domain renewal +--- + +# Renew domains with Cloudflare Registrar + +Once you have registered a domain with Cloudflare Registrar, you can renew that domain from within the Cloudflare dashboard. + +## Set up automatic renewals + +If you want your domains to renew automatically, keep the default settings for your domain (**Auto Renew** should be set to **On**). To find this setting: + +1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com/login) and select the account and domain you want to renew. +1. From **Overview**, scroll down to **Domain Registration** and select **Manage domain**. +1. In **Registration**, make sure the toggle in **Auto Renew** is set to **On**. + +Cloudflare renews these domains automatically 30 days before their expiration date. You can also [manually renew](#renew-a-domain-manually) a domain at any time. + +If the renewal fails, you will receive an email notification and Cloudflare will try to renew the domain three additional times. If these attempts fail, you must manually renew your domain. + + + +## Renew a domain manually + +You can renew a domain at any time. To renew a domain registered with Cloudflare: + +1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com/login) and select the account and domain you want to renew. +1. From **Overview**, scroll down to **Domain Registration** and select **Manage domain**. +1. In the **Registration** > **Domain Registration** card, select **Add years**. +1. In **Renew for**, choose a number of years to renew your domain (up to 10 years). +1. Select **Renew** > **Purchase**. + +Once Cloudflare validates your payment, your domain moves to a status of **Renewal Pending**. The status changes back to **Active** after the renewal is finished. + +## Renewal notifications + +Once a domain is registered, Registrar sends the following expiration notices to the email address associated with the domain: +- A monthly email listing all domains set to renew automatically within the next 45 days. +- A monthly email listing all domains expiring in the next 60-90 days. +- A weekly email listing all domains expiring within the next month. +- A daily email listing all domains expiring in seven days. +- An email one day after a domain expires. +- An email 20 days after the expiration date. + + \ No newline at end of file diff --git a/products/registrar/src/content/account-options/transfer-out-from-cloudflare.md b/products/registrar/src/content/account-options/transfer-out-from-cloudflare.md new file mode 100644 index 00000000000..4d5ecfda1ff --- /dev/null +++ b/products/registrar/src/content/account-options/transfer-out-from-cloudflare.md @@ -0,0 +1,44 @@ +--- +order: +pcx-content: tutorial +--- + +# Transfer out from cloudflare + +Cloudflare Registrar makes it easy to transfer your domain to another registrar. Follow the instructions below to transfer your domain out from Cloudflare. + + + +## Unlocking your domain at Cloudflare + +1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com/login) and select the account and domain you want to transfer. +1. In **Overview**, scroll down to **Domain Registration** and select **Manage domain**. +1. Select **Configuration** > in the **Transfer Out** card under **Domain Management** > select **Unlock**. + + ![Domain registration dashboard screenshot](../static/start-transfer-out.png) + +1. Select **Confirm and Unlock** to confirm that you want to unlock your domain. +1. Copy the auth code (also referred to as authentication code and authorization code) generated by Cloudflare, and use at your new registrar. + +
+ + ![Authorization code generation modal](../static/auth-generated.png) + +
+ +If you lose your auth code, return to **Overview** > **Manage domain** > **Configuration**. Select **Continue** next to the **Transfer Out** option to display your auth code again. + +## Transfer to a new registrar + +1. Go to your new registrar. +1. You will be asked for the authorization code from Cloudflare (it might be called EPP in some systems). Input the code created for you from the Cloudflare dashboard. +1. Your new registrar will send the transfer request to the registry for your domain. The registry will then send it to Cloudflare. After Cloudflare receives the message, you can manually approve the transfer to initiate it immediately. +1. You will need to confirm the approval. You can also reject it at this stage. If you reject it, Cloudflare will reapply the registrar lock. +1. If you do not manually approve the transfer, the transfer will auto-approve on the fifth day after receiving the request. In either case, when your transfer out completes Cloudflare will remove the domain from your account and you will not be charged for future renewals. \ No newline at end of file diff --git a/products/registrar/src/content/cloudflare-registrar/domain-management.md b/products/registrar/src/content/cloudflare-registrar/domain-management.md deleted file mode 100644 index 93033a8ad16..00000000000 --- a/products/registrar/src/content/cloudflare-registrar/domain-management.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -order: 2 ---- - -# Domain management - -You can manage your domain with Cloudflare Registrar in the Zone Overview page of the dashboard. - --------- - -## Domain status -When your domain is registered with Cloudflare, Zone Overview will display a card that provides details about your registration. You can review your current expiration date and your autorenew status here. - --------- - -## Editing WHOIS records -Cloudflare redacts WHOIS information from your domain by default. However, we do store the authentic WHOIS record for your domain that is first set during the transfer flow. The contact information is shared across all domains in your Cloudflare account. - -You can edit the contact information for all domains in your account. To do so, navigate to the “Configurations” tab once you login to Cloudflare and before you select a zone. Under Preferences, select “Edit WHOIS” and you can modify the record. You can also reach this screen from the Domain Registration card in the dashboard Overview page of any domain registered with Cloudflare. - --------- - -## Disabling autorenew -Cloudflare Registrar enrolls your domain to AutoRenew by default. Unlike other registrars, your domain will only renew at the list price set by the registry. - -If you decide you no longer need the domain, you can disable AutoRenew for your account. Once disabled, your domain will not renew upon expiration. - -You can continue to keep your domain registered with Cloudflare for the time remaining on the expiration. If you decide you want to keep the domain, you can enable AutoRenew at any time prior to your expiration. \ No newline at end of file diff --git a/products/registrar/src/content/cloudflare-registrar/enabling-dnssec.md b/products/registrar/src/content/cloudflare-registrar/enabling-dnssec.md deleted file mode 100644 index 83663165ffd..00000000000 --- a/products/registrar/src/content/cloudflare-registrar/enabling-dnssec.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -order: 3 ---- - -# Enabling DNSSEC - -The domain name system (DNS) translates domain names into numeric Internet addresses. However, DNS is a fundamentally insecure protocol. It does not guarantee where DNS records come from and accepts any requests given to it. - -DNSSEC creates a secure layer to the domain name system by adding cryptographic signatures to DNS records. By doing so, your request can check that signature to verify that the record you need comes from the authoritative name server and was not altered along the way. You can [read more about how DNSSEC works on cloudflare.com](https://www.cloudflare.com/dns/dnssec/how-dnssec-works/). - --------- - -## Enabling DNSSEC -Cloudflare Registrar offers one-click DNSSEC enablement for free to all customers. You will not need to set the DS record details manually. However, your domain must be using Cloudflare as the authoritative DNS provider. - -To start, navigate to the “DNS” tab in the Cloudflare dashboard for your site. Beneath the cards for DNS management is a card titled “DNSSEC”. Once there, click “Enable DNSSEC”. You will be presented with DS record details specific to your site. You do not need to copy these or manually enter them when you are using Cloudflare Registrar. Instead, click “Confirm”. - -![Enable button image](../static/enable-button.png) - -Cloudflare will publish those DS details, in the form of CDS and CDNSKEY records, for a domain delegated to Cloudflare. Our Registrar will scan those records at regular intervals and, when we notice you have enabled DNSSEC, gather those details and send them to your domain’s registry. - -This process can take one to two days after you first enable DNSSEC. - --------- - -## Confirming DNSSEC -When DNSSEC has been successfully applied to your domain, you will see a confirmed status in the DNSSEC card where you first clicked “Enable”. You can also confirm by reviewing the WHOIS information for your domain. Domains with DNSSEC will read “signedDelegation” in the DNSSEC field. \ No newline at end of file diff --git a/products/registrar/src/content/cloudflare-registrar/index.md b/products/registrar/src/content/cloudflare-registrar/index.md deleted file mode 100644 index 0c0a3494dbc..00000000000 --- a/products/registrar/src/content/cloudflare-registrar/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -order: 1 ---- - -# Cloudflare registrar - -Cloudflare Registrar will only ever charge you what we pay to the registry for your domain. No markup and no surprise fees. - -![Registrar Logo](../static/registrar-color-logo.png) \ No newline at end of file diff --git a/products/registrar/src/content/cloudflare-registrar/transfer-out-from-cloudflare.md b/products/registrar/src/content/cloudflare-registrar/transfer-out-from-cloudflare.md deleted file mode 100644 index 7981a0e46c6..00000000000 --- a/products/registrar/src/content/cloudflare-registrar/transfer-out-from-cloudflare.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -order: 4 ---- - -# Transfer out from cloudflare - -Cloudflare Registrar makes it easy to transfer to another registrar. Follow the instructions below to transfer your domain out from Cloudflare. - --------- - -## Restrictions -ICANN rules prohibit a domain from being transferred if it has been transferred within the last 60 days or if the WHOIS registrant information has been modified in the last 60 days (even if redacted). - --------- - -## Unlocking your domain at Cloudflare -To begin, navigate to the Domain Overview tab in the Cloudflare dashboard. In the card for “Domain Registration” you’ll find a link to Transfer Out. When you select that link, you will unlock the domain and be provided with an authorization code. - -![Domain registration dashboard screenshot](../static/start-transfer-out.png) - -We’ll ask you to confirm this action in the next screen before we unlock your domain. - -![Unlock domain modal](../static/confirm-unlock.png) - -Cloudflare will generate an auth code for your domain in the next screen. Copy that code to use at your new registrar. - -![Authorization code generation modal](../static/auth-generated.png) - -If you lose your auth code, you can return to the overview page and select “Continue” next to the “Transfer Out” to display your auth code again. - -![Domain registration renewal screenshot](../static/restart.png) - --------- - -## Transfer to a new registrar -At your new registrar, you’ll be asked for the authorization code from Cloudflare (it might be called EPP in some systems). Input the code from the Cloudflare dashboard. Your new registrar will send the transfer request to the registry for your domain. The registry will then send it to Cloudflare. When we receive the message, you can manually approve the transfer to initiate it immediately. - -![Domain Transfer in dashboard](../static/accept-reject.png) - -You will need to confirm the approval. You can also reject it at this stage; if you reject it, we will reapply the registrar lock - -![Domain Transfer confirmation modal](../static/confirm.png) - -If you do not manually approve the transfer, Cloudflare will process the transfer on the fifth day after receiving the request. In either case, when your transfer out completes we will remove your domain’s subscription so that you are not charged at your next renewal. \ No newline at end of file diff --git a/products/registrar/src/content/domain-registration/cloudflare-custom-domain-protection.md b/products/registrar/src/content/domain-registration/cloudflare-custom-domain-protection.md deleted file mode 100644 index f4448db95c0..00000000000 --- a/products/registrar/src/content/domain-registration/cloudflare-custom-domain-protection.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -order: 4 ---- - -# Cloudflare custom domain protection - -Cloudflare offers [Custom Domain Protection](https://www.cloudflare.com/products/registrar/custom-domain-protection/) to customers with high-profile domains who need the highest level of security against domain hijacking. - --------- - -## Custom domain protection features -Custom Domain Protection offers additional safeguard features for registered domains, including: - -### Registry lock -Cloudflare applies Registry Lock, when available, to all domains registered through Custom Domain Protection. Any changes to a domain requires Cloudflare to first unlock the domain at the registry level. - -### Out-of-band authentication -All changes to domain ownership or nameserver information are verified and executed manually based on an authentication process defined by the customer. - -### No interface -Custom Domain Protection does not offer an interface to remove the possibility of domain hijack through a compromised account. - -Custom Domain Protection is only available to customers with a Cloudflare Enterprise plan. \ No newline at end of file diff --git a/products/registrar/src/content/domain-registration/index.md b/products/registrar/src/content/domain-registration/index.md deleted file mode 100644 index 6a26945b352..00000000000 --- a/products/registrar/src/content/domain-registration/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -order: 1 ---- - -# Domain registration - -![Domain Registration Overview](../static/domain-registry-process.png) - -When you register a domain, you become the owner, or registrant, for that domain for a set period of time. Now that you are the registrant, you can create an authoritative record that tells the world the nameservers for your domain. The domain name system, or DNS, uses those nameservers to direct traffic to the IP address of your server. - -When you put your site behind Cloudflare, you change your nameservers at your registry to ones we provide. Once we are responsible for your authoritative DNS, we can deliver the features that make your site faster and safer. - -Your registry keeps the authoritative record for your nameservers. Each top-level domain (TLD) has a single registry that is responsible for maintaining those records. For example, .com is a TLD. Verisign is the exclusive registry for .com. As the TLD’s registry, Verisign stores the contact information and the nameservers for every .com domain in the world. As the registrant for a domain, you can tell your domain’s registry which nameservers DNS should use. - -So where do registrars fit in this relationship? Domain registrars communicate your ownership, and subsequent changes, of a domain to the registry for that TLD. Registries trust registrars to only accept changes from the domain owner and to accurately convey that information so that the registry can update their record. While there is one registry for every TLD, hundreds of registrars are able to register a domain. \ No newline at end of file diff --git a/products/registrar/src/content/domain-registration/tlds-supported.md b/products/registrar/src/content/domain-registration/tlds-supported.md deleted file mode 100644 index a65bd0be9c7..00000000000 --- a/products/registrar/src/content/domain-registration/tlds-supported.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -order: 2 ---- - -# TLDs supported - -Cloudflare supports over 200 top-level domains (TLDs). The [full list of supported TLDs can be found on our TLD policies page](https://www.cloudflare.com/tld-policies/). - -We cannot list the wholesale cost for most TLDs in our marketing materials due to commitments in our contracts with the registries. We can, however, give you the wholesale cost at checkout when you transfer your domain. \ No newline at end of file diff --git a/products/registrar/src/content/domain-registration/whois-redaction.md b/products/registrar/src/content/domain-registration/whois-redaction.md deleted file mode 100644 index a5189be1f5e..00000000000 --- a/products/registrar/src/content/domain-registration/whois-redaction.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -order: 3 ---- - -# WHOIS redaction - -Cloudflare Registrar provides personal data redaction on WHOIS information for all registered domains. - --------- - -## What is WHOIS? -WHOIS is a standard for publishing the contact and nameserver information for all registered domains. Each registrar maintains their own WHOIS service. Anyone can query the registrar’s WHOIS service to reveal the data behind a given domain. - -However, broadcasting the registrant contact information, via the WHOIS service, can invite mountains of spam to your personal addresses. Cloudflare Registrar will be offering personal data redaction on WHOIS, that meets current ICANN guidelines, for free. - --------- - -## What is WHOIS redaction? -WHOIS redaction removes all contact information categorized as personal data from the published WHOIS record for a domain (registrant name, email address, postal address). Fields will read “Data Redacted”. The nameserver, domain lock information, and date records for a domain are still available publicly. - -Cloudflare still maintains the authoritative, unredacted, record of your WHOIS data. You can modify this information at any time in the domain overview tab of the Cloudflare dashboard. - -Note: WHOIS redaction is not the same as WHOIS Privacy. WHOIS Privacy replaces your information with proxy contact information. Redaction removes it altogether. - --------- - -## How can third parties reach registrants? -As part of the ICANN guidelines, registrars must make available a method for third parties to reach the registrant without revealing the identity of that registrant. Cloudflare has made a [form available where third parties can submit a message for a given domain on Cloudflare Registrar](https://www.cloudflare.com/abuse/form). Cloudflare will forward the message to the registrant email on file for that domain. - --------- - -## TLDs without WHOIS redaction -Some registries do not allow domains to be registered with WHOIS Redaction or WHOIS Privacy. Many of these are country TLDs (ccTLDs) like .uk. Cloudflare does not yet support TLDs that prohibit WHOIS redaction, but we will in the near future. \ No newline at end of file diff --git a/products/registrar/src/content/domain-transfers/index.md b/products/registrar/src/content/domain-transfers/index.md deleted file mode 100644 index 0e2705e2339..00000000000 --- a/products/registrar/src/content/domain-transfers/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -order: 1 ---- - -# Domain transfers - -Cloudflare Registrar will only ever charge you what we pay to the registry for your domain. No markup and no surprise fees. - -You can follow instructions in this section to transfer your domain to Cloudflare. \ No newline at end of file diff --git a/products/registrar/src/content/domain-transfers/transfer-costs.md b/products/registrar/src/content/domain-transfers/transfer-costs.md deleted file mode 100644 index 0ebb0e30c5a..00000000000 --- a/products/registrar/src/content/domain-transfers/transfer-costs.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -order: 3 ---- - -# Transfer costs - -ICANN requires that any transfer also extend the expiration date of your domain by at least one year. That’s one year from your current expiration date, not one year from the date of transfer. For example, if you transfer a domain on October 10, 2018, but it expires on March 10, 2019, your new expiration date will be March 10, 2020. - --------- - -## Domain expiration -Whenever a domain is first registered, the registrant purchases control of that domain for some number of years. For example, a domain registered on October 8, 2010 will have an expiration of October 8th on some year between 2011 and 2020. - -Transferring a domain adds time to the current expiration date. **Time purchased is never lost.** When you transfer your domain to Cloudflare, you are purchasing an additional year of registration on top of your current expiration. - --------- - -## Transfer fees -Transferring a domain adds at least one year to the registration and the registry bills for that year. For nearly all top-level domains (TLDs), the registry bills the same rate as a renewal or new registration. For example, Verisign charges $7.85 for one year purchased through new registrations, renewals, and transfers. - -ICANN fees also apply to transfers. For every year added to the expiration as part of a transfer, ICANN adds $0.18 to the total. - --------- - -## When will I be billed? -You will be billed when you input your authorization code and initiate the transfer. If your authorization code is incorrect, you can reenter the code. - --------- - -## What am I paying for as part of the transfer? -When you transfer a domain, you add one year to your expiration. If your domain does not expire until 2024, and your transfer adds time through 2025, the registries and ICANN still bill for the extension when the transfer occurs. - --------- - -## Transfers within 45 Days of renewal of an expired domain -When you transfer your domain to Cloudflare, we will automatically extend your registration by one year. However, in one specific circumstance your transfer could result in you keeping your original expiration date. - -When a domain expires the registration enters the auto-renew grace period. During that time, you can renew the domain at your registrar to avoid losing it. If your domain expires at your current registrar, you renew it, and then you transfer to Cloudflare within 45 days, the registry can restrict the addition of an extra year. - -Say you have example.com registered and it expires on December 10, 2018. You decide to renew it during the auto-renew grace period on December 20, 2018. That renewal extends the registration to December 20, 2019. You then transfer to Cloudflare on December 30, 2018. Since that transfer is within 45 days of the expiration, the registry may not add the year to your registration. When you transfer to Cloudflare or any registrar in this circumstance, your expiration can still remain December 20th, 2019. - -If a year is not added to your registration, you have effectively paid twice for the same added year. Per ICANN rules, you are entitled to request a refund at your previous registrar. \ No newline at end of file diff --git a/products/registrar/src/content/domain-transfers/transfer-faq.md b/products/registrar/src/content/domain-transfers/transfer-faq.md deleted file mode 100644 index 1b835fdd8de..00000000000 --- a/products/registrar/src/content/domain-transfers/transfer-faq.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -order: 4 ---- - -# Transfer FAQ - --------- - -## What happens to my name servers when I transfer my domain to Cloudflare? -Cloudflare Registrar only supports transfers of domains that are active on Cloudflare. Active domains on Cloudflare use nameservers assigned by Cloudflare. When you transfer your registration, your nameservers will not be modified. - --------- - -## How can I see the status of my domain transfer? -Once you initiate a domain transfer, your losing registrar has 5 days to release the domain. In most cases, they will send you an email to confirm you want to transfer. If you actively acknowledge that email (through a link or the registrar UI) they can process it immediately. - -To see the progress of your transfer, select the “Domain Registration” tab in your account or “Transfer Domains” button, both in the Account home page. Once there, you will see a list of domain transfers that are in progress. To accelerate the process, be sure to check with your old registrar how you can approve the transfer out. - -Once successful, you will receive an email from Cloudflare and be able to manage the domain in the Overview tab for that site. - --------- - -## What happens if I entered the wrong auth code? -If you input the incorrect authentication code, please return to the Domain Registration page or the Overview page for your site. You can use the available input field to reenter your authentication code. - --------- - -## Why did my transfer fail? -Domain transfers sometimes fail. We’re here to help you address what failed so that you can complete the transfer to Cloudflare. - -First, please make sure that you entered the auth code for that domain. If you need to reenter it, you can do so from the transfer launch page or the overview page for that site. - -Second, you can reattempt the transfer from the transfer launch page. - -If you can’t seem to resolve the issue, please open a support ticket and we’ll help investigate. - --------- - -## 60 day window requirement -ICANN prohibits domain transfers within 60 days of a change to the WHOIS data or registrar of a domain. If you modified your contact information, transferred registrars, or registered your domain in the last 60 days, we will be unable to process your transfer immediately. - -You can continue to leave the domain “In Progress” and we will continue to attempt to process the transfer until the 60 day window passes. \ No newline at end of file diff --git a/products/registrar/src/content/domain-transfers/transfer-to-cloudflare.md b/products/registrar/src/content/domain-transfers/transfer-to-cloudflare.md deleted file mode 100644 index 35d2653f4eb..00000000000 --- a/products/registrar/src/content/domain-transfers/transfer-to-cloudflare.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -order: 2 ---- - -# Transfer to Cloudflare - -Domain transfers tell your registry that a different registrar can now set those authoritative records for you. The relationship is based on trust. Registries only trust one registrar, at any given time, to make changes on your behalf. - -Transferring a domain to a new registrar informs the registry that they should instead trust that new registrar to modify information. The process requires some steps at both your new registrar and the one you are leaving. Each registrar handles transfers a bit differently, but in general they follow a pattern based on rules set by ICANN, the organization responsible for regulating domain registration. - --------- - -## Unlock your domain -Registrars include a lightweight safeguard to prevent unauthorized users from starting domain transfers: registrar lock. You might also see it written as domain lock. When enabled, the lock prevents any other registrar from attempting to initiate a transfer. - -Only the registrant can enable or disable this lock, typically through the administration interface of the registrar. To proceed with a transfer, you will need to remove this lock if it is enabled. - --------- - -## Remove WHOIS privacy -Certain registrars, including larger ones like GoDaddy, prohibit transfers while you have WHOIS privacy services enabled. - -### GoDaddy -Customers must remove “Private Registration” prior to the transfer or GoDaddy can cancel the transfer. - -### NameCheap -Customers must remove “WhoisGuard” from NameCheap prior to transferring the domain. - -Once your transfer to Cloudflare completes, we will redact your WHOIS information immediately. - --------- - -## Initiate your transfer -To initiate your transfer, go to the [Registrar section](https://dash.cloudflare.com/?to=/:account/domains/transfer) of your account. - -Cloudflare will display the zones available for transfer, those with transfers in progress, and sites unavailable for transfer. - -You’ll also be presented with the price for each transfer. When you transfer a domain, you are also required by ICANN to pay to extend its registration by one year from the expiration date. You can remove domains from your transfer by selecting the “x”. - -If you do not have a payment method on file, you will need to add one at this step before proceeding. - -![Cloudflare checkout screenshot](../static/checkout-page.png) - -Sites can be unavailable for a few reasons, including: - -* The site was registered in the last 60 days -* Cloudflare does not yet support the TLD - -You will not be billed at this step. Cloudflare will only bill your card when you input the auth code and confirm the contact information at the conclusion of your transfer request. - --------- - -## Input your authorization code -In the next page, you’ll need to input the authorization code for each domain you are transferring. You will also need to unlock each domain so that Cloudflare can process your request. For more information about transferring out from your current registrar, see the Transfer Instructions section. - -![Authorization input screenshot](../static/input-field.png) - --------- - -## Confirm or input your contact information -In the final stage, you will need to input the contact information for your registration. Cloudflare Registrar will redact this information by default, but we are required to collect the authentic contact information for this registration. - -You can modify the contact information, if needed, in the Overview tab for that specific account. Once you have entered the contact information, you will need to agree to the domain registration terms of service by selecting the “Confirm transfer” button. - --------- - -## Approve the transfer with your previous registrar -Once you have requested your transfer, Cloudflare will begin processing your transfer. Your previous registrar will email you to confirm your request to transfer away. Most registrars will include a link to confirm the transfer request. If you click that link, you can accelerate the transfer operation. If you do not act on the email, the registrar can wait up to five days to process the transfer to Cloudflare. - --------- - -## Transfer statuses -You can check on the status of your transfer from the Overview page for that domain in the Cloudflare dashboard. - -### Transfer in progress -Your request has been submitted by Cloudflare to your previous registrar. We are now waiting on them to confirm they have received the request. - -If this status persists more than one day, please ensure that the domain has been unlocked at your current registrar and any WHOIS privacy services have been removed. - -### Pending approval -Your current registrar has received the transfer request. They can now wait up to five days to release the domain. If you want to move faster, you can manually approve the transfer for immediate release in the UI of most registrars. - -### Transfer rejected -Your transfer has been rejected. This can occur if you cancelled the request, instead of approving it, at your current registrar. If you still wish to transfer, you can select “Retry” and initiate a new transfer request. \ No newline at end of file diff --git a/products/registrar/src/content/domain-transfers/troubleshoot-a-stalled-transfer.md b/products/registrar/src/content/domain-transfers/troubleshoot-a-stalled-transfer.md deleted file mode 100644 index cf50cd27565..00000000000 --- a/products/registrar/src/content/domain-transfers/troubleshoot-a-stalled-transfer.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -order: 5 ---- - -# Troubleshoot a stalled transfer - -Your previous registrar has five days to release the domain after a successful transfer request. If your transfer has not completed within that timeframe, something has likely gone wrong. To resolve, we recommend you check the following settings and restart the transfer - - After five days, something has stopped the transfer. We recommend you check the following details and restart the transfer. - --------- - -## Registrar lock reapplied -You have reapplied registrar lock at your current registrar since requesting the transfer. You will need to remove it again to restart. - --------- - -## Transfer rejected -Your transfer has been rejected by your previous registrar. This can be caused if you actively rejected the transfer request in an email or your registrar’s UI, or if your registrar determines the domain is not eligible for transfer. You will need to restart the transfer and approve the request or contact your current registrar. - --------- - -## Auth code invalid -Your auth code has since changed or been deprecated and we cannot complete the transfer. Please confirm the code with your current registrar again. - --------- - -## WHOIS Guard / privacy protection -Some registrars, including GoDaddy and NameCheap, can prohibit transfer requests if you have WHOIS privacy services enabled. You will need to first disable those services at your current registrar. - --------- - -## Restarting your transfer -In the Cloudflare Overview page for your domain, you can find the details of your registration in the column on the right side of the page. In that card, `Domain Registration` select the button “Cancel and Retry”. Once you initiate the retry, you will need to reenter your auth code and confirm your WHOIS information. - -Most issues with a stalled transfer can be resolved by checking these details and restarting the transfer from the UI. \ No newline at end of file diff --git a/products/registrar/src/content/faq.md b/products/registrar/src/content/faq.md new file mode 100644 index 00000000000..6d2c32fd89a --- /dev/null +++ b/products/registrar/src/content/faq.md @@ -0,0 +1,81 @@ +--- +title: Frequently asked questions +order: 4 +pcx-content-type: faq +--- + +# Frequently Asked Questions + +## After transferring my domain to Cloudflare, my domain’s expiration date changed. Why? + +ICANN requires that any transfer also extends the expiration date of your domain by at least one year — that is one year from your current expiration date, not one year from the date of transfer. For example, if you transfer a domain on October 10, 2020, but it expires on March 10, 2021, your new expiration date will be March 10, 2022. + +Whenever a domain is first registered, the registrant purchases control of that domain for some number of years — up to 10 years. For example, a domain registered on October 8, 2020 will have an expiration date of October 8th in some year between 2021 and 2030, depending on the amount of years originally purchased. + +Transferring a domain adds time to the current expiration date. Time purchased is never lost. When you transfer your domain to Cloudflare, you are purchasing an additional year of registration on top of your current expiration. + +## When will I be billed? + +You will be billed when you input your authorization code and initiate the transfer of your domain to Cloudflare. Make sure to copy / paste the code to avoid mistakes. The transfer will not initiate if the code is incorrect. + +## My domain’s registration wasn’t extended by one year after transferring to Cloudflare + +When you transfer your domain to Cloudflare, the registry will extend your registration by one year. However, in one specific circumstance your transfer could result in you keeping your original expiration date. + +When a domain expires, the registration enters the auto-renew grace period. During that time, you can renew the domain at your registrar to avoid losing it. If your domain expires at your current registrar, you renew it and then transfer to Cloudflare within 45 days, the registry can restrict the addition of an extra year. + +Say you have `example.com` registered and it expires on December 10, 2020. You decide to renew it during the auto-renew grace period on December 20, 2020. That renewal extends the registration to December 20, 2021. You then transfer to Cloudflare on December 30, 2020. Since that transfer is within 45 days of the expiration, the registry may not add the year to your registration. When you transfer to Cloudflare or any registrar in this circumstance, your expiration can still remain December 20th, 2021. + +If a year is not added to your registration, you have effectively paid twice for the same added year. Per ICANN rules, you are entitled to request a refund at your previous registrar. + +## What happens to my name servers when I transfer my domain to Cloudflare? + +Cloudflare Registrar only supports transfers of domains that are active on Cloudflare. Active domains on Cloudflare use nameservers assigned by Cloudflare. When you transfer your registration, your nameservers will not be modified. + +## How can I see the status of my domain transfer? + +Once you initiate a domain transfer, your previous registrar has five days to release the domain. In most cases, they will send you an email to confirm you want to transfer. If you actively acknowledge that email (through a link or the registrar's dashboard), they can process it immediately. + +To see the progress of your transfer, log into the Cloudflare dashboard and select your account. Then, select **Registrar** > **Transfer** to see a list of domain transfers that are in progress. To accelerate the process, be sure to check with your old registrar how you can approve the transfer out. + +Once successful, you will receive an email from Cloudflare and be able to manage the domain in the dashboard under **Overview** of that site. + +## What happens if I entered the wrong auth code? + +If you input the incorrect auth code (also referred to as authentication code and authorization code), return to the **Domain Registration** page or the **Overview** for your site. You can use the available input field to reenter your authentication code. + +## Why did my transfer fail? + +Domain transfers sometimes fail. Your account team can help you address what failed so that you can complete the transfer to Cloudflare. + +First, make sure that you entered the auth code for that domain. If you need to reenter it, you can do so from your **Account Home** > **Registrar** > **Transfer** page. + +Second, you can reattempt the transfer from the transfer launch page. + +If you cannot resolve the issue, open a support ticket or contact your account team. + +## Why am I not allowed to transfer my domain? + +ICANN prohibits domain transfers within 60 days of a change to the WHOIS data or registrar of a domain. If you modified your contact information, transferred registrars, or registered your domain in the last 60 days, Cloudflare will be unable to process your transfer immediately. + +You can leave the domain **In Progress** and Cloudflare will attempt to process the transfer until the 60-day window passes. + +## Why am I not able to start a transfer? + +If you have an unverified email address, you might experience issues when initiating a domain transfer. + +## Premium domains + +Cloudflare does not currently support premium domains. Some registries designate a domain name as “premium” and charge higher wholesale rates for these domains. + +## What Happens When a Domain Expires? + +Cloudflare currently offers a 40 day grace period for most top-level domains (TLDs). During this period you may renew/extend the domain at any time from within the dashboard but no further auto-renew attempts will be made. For the first 30 days of the grace period, the domain will continue to resolve as normal. On the 30th day after the expiration date, the domain will be suspended and a parked suspension page will be displayed. You may still renew the domain at any time during this suspension period. On the 40th day, the domain will enter the Redemption Period and will no longer resolve to any web page. The redemption period lasts for 30 days. During this time, it may be possible to restore and renew the domain. A restore fee may apply in addition to the renewal fee. Contact your account team for assistance. At the end of the 30 day redemption period, the domain will be placed in pending delete status for a period of five days, after which it will be released and made available for re-registration. The domain cannot be restored or renewed during this period. + +In summary, here is what will happen after a domain expires: + +* **Day 0:** Expiration Date. +* **Day 1 - 30:** Grace Period (domain resolves normally). +* **Day 31 - 40:** Suspension Period (domains resolves to suspension page). +* **Day 41 - 70:** Redemption Period. +* **Day 71 - 75:** Pending Delete Period. \ No newline at end of file diff --git a/products/registrar/src/content/index.md b/products/registrar/src/content/index.md index 696665b815a..f72fdf447b7 100644 --- a/products/registrar/src/content/index.md +++ b/products/registrar/src/content/index.md @@ -1,10 +1,16 @@ --- -title: Welcome +title: Overview order: 0 +pcx-content: landing-page --- -# Cloudflare registrar documentation +# Cloudflare Registrar -Cloudflare Registrar will only ever charge you what we pay to the registry for your domain. No markup. No surprise fees. +![Registrar Logo](./static/registrar-color-logo.png) -![Registrar Logo](./static/registrar-color-logo.png) \ No newline at end of file +Manage your domain with Cloudflare Registrar and add an additional layer of security to your DNS records for free. Cloudflare Registrar also offers redacted WHOIS information by default and will only charge you what is paid to the registry for your domain. No markup. No surprise fees. + + + + + \ No newline at end of file diff --git a/products/registrar/src/content/setup-domain-transfers/index.md b/products/registrar/src/content/setup-domain-transfers/index.md new file mode 100644 index 00000000000..b91c861480a --- /dev/null +++ b/products/registrar/src/content/setup-domain-transfers/index.md @@ -0,0 +1,14 @@ +--- +order: 2 +pcx-content-type: concept +--- + +import BeforeYouBegin from "../_partials/_before-you-begin.md" + +# Transfer your domain to Cloudflare + +Domain transfers tell your registry that a different registrar can now set those authoritative records for you. The relationship is based on trust. Registries only trust one registrar at any given time to make changes on your behalf. + +Transferring a domain to a new registrar informs the registry that they should instead trust that new registrar to modify information. The process requires some action steps at your new and previous registrar. Each registrar handles transfers a bit differently, but in general, they follow a pattern based on rules set by ICANN, the organization responsible for regulating domain registration. + + \ No newline at end of file diff --git a/products/registrar/src/content/setup-domain-transfers/transfer-domain-to-cloudflare.md b/products/registrar/src/content/setup-domain-transfers/transfer-domain-to-cloudflare.md new file mode 100644 index 00000000000..d266d0fa344 --- /dev/null +++ b/products/registrar/src/content/setup-domain-transfers/transfer-domain-to-cloudflare.md @@ -0,0 +1,120 @@ +--- +order: +pcx-content-type: how-to +--- + +import BeforeYouBegin from "../_partials/_before-you-begin.md" +import Restrictions from "../_partials/_restrictions.md" +import EmailForward from "../_partials/_email-forward.md" + +# How to transfer your domain to Cloudflare + +This section contains generic details on how to transfer your domain to Cloudflare from most registrars. + + + + + + + +--- + +## Set up a domain transfer + +To begin, complete the following steps in your current registrar to transfer your domain to Cloudflare. Below, you will find links for detailed transfer instructions from some of the most popular registrars: + +* [Enom](http://enom.help/outgoing) +* [GoDaddy](https://www.godaddy.com/help/transfer-my-domain-away-from-godaddy-3560) +* [Namecheap](https://www.namecheap.com/support/knowledgebase/article.aspx/258/84/what-should-i-do-to-transfer-a-domain-from-namecheap/) +* [Network Solutions](https://customerservice.networksolutions.com/prweb/PRAuth/webkm/help/article/KC-474/networksolutions) +* [Ionos by 1&1](https://www.ionos.com/help/domains/domain-transfers/#acc4514) + + +### 1. Login to your registrar account + +Log in to the registrar account where the domain is currently registered. + +### 2. Unlock the domain + +Registrars include a lightweight safeguard to prevent unauthorized users from starting domain transfers: registrar lock. You might also see it written as "domain lock." In WHOIS, it may appear as `clientTransferProhibited`. When enabled, the lock prevents any other registrar from attempting to initiate a transfer. + +Only the registrant can enable or disable this lock, typically through the administration interface of the registrar. To proceed with a transfer, remove this lock if it is enabled. + +### 3. Remove WHOIS privacy + +In most cases, domains may be transferred even if WHOIS privacy services have been enabled. However, some registrars may prohibit the transfer if the WHOIS privacy service has been enabled. + + +### 4. Request an authorization code + +Your new registrar needs to confirm with your old registrar that the transfer flow is authorized. To do that, your old registrar will provide an authorization code to you. + + + + +### 5. Initiate your transfer to Cloudflare + +Go to the **Account Home** > [**Registrar**](https://dash.cloudflare.com/?to=/:account/domains/transfer). Cloudflare will display the zones available for transfer. + +You will be presented with the price for each transfer. When you transfer a domain, you are required by ICANN to pay to extend its registration by one year from the expiration date. You can remove domains from your transfer by selecting **x**. + +If you do not have a payment method on file, add one at this step before proceeding. + +![Cloudflare checkout screenshot](../static/checkout-page.png) + +Sites can be unavailable for a few reasons, including: + +* The site was registered in the last 60 days. +* Cloudflare does not yet support the TLD. +* The domain is designated as a “premium” domain by the registry. +* The domain has a status that does not allow for a transfer. + +You will not be billed at this step. Cloudflare will only bill your card when you input the auth code and confirm the contact information at the conclusion of your transfer request. + + + +### 6. Input your authorization code + +In the next page, input the authorization code for each domain you are transferring. You also need to unlock each domain so that Cloudflare can process your request. For more information, refer to the instructions provided by your [current registrar on how to transfer your domain](/setup-domain-transfers/transfer-domain-to-cloudflare#set-up-a-domain-transfer). + +
+ +![Authorization input screenshot](../static/input-field.png) + +
+ +### 7. Confirm or input your contact information + +In the final stage of the transfer process, input the contact information for your registration. Cloudflare Registrar redacts this information by default but is required to collect the authentic contact information for this registration. It is important that you provide accurate WHOIS contact information. You may be required to verify the contact information. Failure to provide accurate information and/or failure to verify the information may result in suspension or deletion of your domain. + +You can modify the contact information, if needed: + +1. From your **Account Home**, select **Registrar**. +1. Under the **Manage** tab, select **Edit** in the **Default Contact** card. +1. Update your information. + +After entering the contact information, agree to the domain registration terms of service by selecting **Confirm transfer**. + + +### 8. Approve the transfer with your previous registrar + +Once you have requested your transfer, Cloudflare will begin processing it. Your previous registrar will email you to confirm your request to transfer. Most registrars will include a link to confirm the transfer request. If you click that link, you can accelerate the transfer operation. If you do not act on the email, the registrar can wait up to five days to process the transfer to Cloudflare. You may also be able to approve the transfer from within your current registrar dashboard. + + +## Transfer statuses + +You can check on the status of your transfer in **Account Home** > **Overview** > **Domain Registration** for your domain. Below, you can find a list of the possible transfer statuses. + +* **Transfer in progress**: Your request has been submitted by Cloudflare to your previous registrar. Cloudflare is now waiting on them to confirm they have received the request. If this status persists for more than a day (24 hours), ensure that the domain has been unlocked at your current registrar and any WHOIS privacy services have been removed. + +* **Pending approval**: Your current registrar has received the transfer request. They can now wait up to five days to release the domain. If you want to move faster, you can manually approve the transfer for immediate release in the dashboard of most registrars. + +* **Transfer rejected**: your transfer has been rejected. This can occur if you canceled the request at your current registrar instead of approving it. If you still wish to transfer, you can select **Retry** and initiate a new transfer request. \ No newline at end of file diff --git a/products/registrar/src/content/setup-domain-transfers/troubleshoot-a-stalled-transfer.md b/products/registrar/src/content/setup-domain-transfers/troubleshoot-a-stalled-transfer.md new file mode 100644 index 00000000000..990d24b24dd --- /dev/null +++ b/products/registrar/src/content/setup-domain-transfers/troubleshoot-a-stalled-transfer.md @@ -0,0 +1,61 @@ +--- +order: +pcx-content-type: reference +--- + +# Troubleshoot a stalled transfer + +Your previous registrar has five days to release the domain after a successful transfer request. If your transfer has not been completed within that time frame, something has likely gone wrong. To resolve the issue, check the following settings and restart the transfer. + +Most issues with a stalled transfer can be solved by checking the following details and restarting the transfer from your Cloudflare dashboard. + +
+Registrar lock reapplied +
+ +You have reapplied the registrar lock at your current registrar since requesting the transfer. You will need to remove it again to restart the transfer process. + +
+
+ +
+Transfer rejected +
+ +Your transfer has been rejected by your previous registrar. There are several reasons for this to happen: +* You actively rejected the transfer request in the email you received from your registrar or on your registrar’s interface. +* Your registrar determines the domain is not eligible for transfer. +* Some registrars allow customers to enable a setting to reject all transfer requests. +* In some instances, registrars may reject the transfer if they suspect malicious behavior. + +You will need to restart the transfer and approve the request or contact your current registrar to solve this issue. + +
+
+ +
+Auth code invalid +
+ +Your auth code (also referred to as authentication code and authorization code) has since changed or been deprecated, and Cloudflare cannot complete the transfer. Confirm the code with your current registrar again. To avoid mistakes, copy and paste the auth code provided by your current registrar. + +
+
+ +
+WHOIS Guard / privacy protection +
+ +Some registrars may prohibit transfer requests if you have WHOIS privacy services enabled. You need to first disable those services at your current registrar before you can proceed with the transfer process. + +
+
+ +
+Restarting your transfer +
+ +In **Overview** for your domain, find the details of your registration in the menu on the right side of the page. Under **Domain Registration**, select **Cancel and Retry**. Once you initiate the retry, reenter your auth code and confirm your WHOIS information. + +
+
\ No newline at end of file diff --git a/products/registrar/src/content/static/accept-reject.png b/products/registrar/src/content/static/accept-reject.png index 8aa2e95e69b..ec3dbc0a01a 100644 Binary files a/products/registrar/src/content/static/accept-reject.png and b/products/registrar/src/content/static/accept-reject.png differ diff --git a/products/registrar/src/content/static/auth-generated.png b/products/registrar/src/content/static/auth-generated.png index 7e2094efb63..a5704ea3ec1 100644 Binary files a/products/registrar/src/content/static/auth-generated.png and b/products/registrar/src/content/static/auth-generated.png differ diff --git a/products/registrar/src/content/static/confirm.png b/products/registrar/src/content/static/confirm.png index affd779ed2a..1dd931e7fbe 100644 Binary files a/products/registrar/src/content/static/confirm.png and b/products/registrar/src/content/static/confirm.png differ diff --git a/products/registrar/src/content/static/input-field.png b/products/registrar/src/content/static/input-field.png index 86475dd0094..2137092a220 100644 Binary files a/products/registrar/src/content/static/input-field.png and b/products/registrar/src/content/static/input-field.png differ diff --git a/products/registrar/src/content/static/start-transfer-out.png b/products/registrar/src/content/static/start-transfer-out.png index 4180d12c939..f58cdb19ff4 100644 Binary files a/products/registrar/src/content/static/start-transfer-out.png and b/products/registrar/src/content/static/start-transfer-out.png differ diff --git a/products/registrar/src/content/transfer-instructions/enom.md b/products/registrar/src/content/transfer-instructions/enom.md deleted file mode 100644 index eb71550b500..00000000000 --- a/products/registrar/src/content/transfer-instructions/enom.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -order: 2 ---- - -# Enom - -You can follow the instructions below to transfer your domain from Enom to Cloudflare. - --------- - -## Restrictions -To transfer to a new registrar, your domain must meet the following requirements. - -* ICANN rules prohibit a domain from being transferred if it has been transferred within the last 60 days or if the WHOIS contact information was modified in the last 60 days (even if redacted). -* Your account at your current registrar must be active. If your domain has expired, you may have to pay a redemption fee to renew it before you can process a transfer. -* Cloudflare does not currently support premium domains. Some registries designate a domain name as “premium” and charge higher wholesale rates for these domains. - -If it is listed as available for transfer in the Cloudflare dashboard, these restrictions have already been checked. - --------- - -## Email forwarding -Cloudflare Registrar does not currently support email forwarding. If you require email forwarding from your registrar, you will need to use a third-party forwarding service and configure your MX record in the Cloudflare DNS setting for the domain. - --------- - -## Step 1: Login to Enom -Login to the Enom account where the domain is registered. Navigate to **My Domains** from **Domains** in the navigation bar. - --------- - -## Step 2: Unlock the domain -In the **Manage Domain** menu, select **General Settings**. The settings will include a row, “Registrar-Lock” with two options: Enable and Disable. Set the Registrar-Lock to Disable. - --------- - -## Step 3: Request authorization code -Below Registrar-Lock and Auto Renew, there will be a row for “Auth Info / EPP Key”. Select “Email Auth Info to Registrant”. Enom will email your authorization code to the registrant email address. - -If you do not receive the code, please check the registrant email address listed in the domain contact information for the given domain. It might be different than your Enom account email. - --------- - -## Step 4: Transfer to Cloudflare -In the Cloudflare transfer screen, input the authorization code. Each domain will have a unique authorization code and you will need to enter each for every domain you want to transfer. - --------- - -## Step 5: Approve the transfer -Once Cloudflare processes your transfer, Enom will send an email to the domain’s registrant contact (the same address where the authorization code was emailed). The email will contain a link that you can click to immediately approve and process the transfer. If you do not click the link, the transfer will automatically approve within 5 days. \ No newline at end of file diff --git a/products/registrar/src/content/transfer-instructions/generic.md b/products/registrar/src/content/transfer-instructions/generic.md deleted file mode 100644 index 14abf5071f6..00000000000 --- a/products/registrar/src/content/transfer-instructions/generic.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -order: 3 ---- - -# Generic - -You can follow the instructions below to transfer your domain from any registrar to Cloudflare. - --------- - -## Restrictions -To transfer to a new registrar, your domain must meet the following requirements. - -* ICANN rules prohibit a domain from being transferred if it has been transferred within the last 60 days or if the WHOIS contact information was modified in the last 60 days (even if redacted). -* Your account at your current registrar must be active. If your domain has expired, you may have to pay a redemption fee to renew it before you can process a transfer. -* Cloudflare does not currently support premium domains. Some registries designate a domain name as “premium” and charge higher wholesale rates for these domains. - -If it is listed as available for transfer in the Cloudflare dashboard, these restrictions have already been checked. - --------- - -## Email forwarding -Cloudflare Registrar does not currently support email forwarding. If you require email forwarding from your registrar, you will need to use a third-party forwarding service and configure your MX record in the Cloudflare DNS setting for the domain. - --------- - -## Step 1: Login to your Registrar account -Login to the registrar account where the domain is currently registered. - --------- - -## Step 2: Unlock the domain -Registrars include a lightweight safeguard to prevent unauthorized users from starting domain transfers: registrar lock. You might also see it written as domain lock. When enabled, the lock prevents any other registrar from attempting to initiate a transfer. - -Only the registrant can enable or disable this lock, typically through the administration interface of the registrar. To proceed with a transfer, you will need to remove this lock if it is enabled. - --------- - -## Step 3: Request authorization code -Next, your new registrar needs to confirm with your old registrar that the transfer flow is authorized. To do that, your old registrar will provide an authorization code to you. You will need to input that code to complete your transfer to Cloudflare. Cloudflare will use it to confirm the transfer is authentic. - --------- - -## Step 4: Transfer to Cloudflare -In the Cloudflare transfer screen, input the authorization code. Each domain will have a unique authorization code and you will need to enter each for every domain you want to transfer. - --------- - -## Step 5: Approve the transfer -Your previous registrar will email you to confirm your request to transfer away. Most registrars will include a link to confirm the transfer request. If you click that link, you can accelerate the transfer operation. If you do not act on the email, the registrar can wait up to five days to process the transfer to Cloudflare. \ No newline at end of file diff --git a/products/registrar/src/content/transfer-instructions/godaddy.md b/products/registrar/src/content/transfer-instructions/godaddy.md deleted file mode 100644 index 1f07b9b8b75..00000000000 --- a/products/registrar/src/content/transfer-instructions/godaddy.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -order: 4 ---- - -# GoDaddy - -You can follow the instructions below to transfer your domain from GoDaddy to Cloudflare. - --------- - -## Restrictions -To transfer to a new registrar, your domain must meet the following requirements. - -* ICANN rules prohibit a domain from being transferred if it has been transferred within the last 60 days or if the WHOIS contact information was modified in the last 60 days (even if redacted). -* Your account at your current registrar must be active. If your domain has expired, you may have to pay a redemption fee to renew it before you can process a transfer. -* Cloudflare does not currently support premium domains. Some registries designate a domain name as “premium” and charge higher wholesale rates for these domains. - -If it is listed as available for transfer in the Cloudflare dashboard, these restrictions have already been checked. - --------- - -## Email forwarding -Cloudflare Registrar does not currently support email forwarding. If you require email forwarding from your registrar, you will need to use a third-party forwarding service and configure your MX record in the Cloudflare DNS setting for the domain. - --------- - -## Step 1: Login to GoDaddy -Login to the GoDaddy account where the domain is registered. Navigate to the **Domain Settings** page. - --------- - -## Step 2: Unlock the domain and remove private registration -In **Domain Settings** select the **Edit** link next to Domain lock under **Additional Settings**. Toggle the lock off. [GoDaddy’s domain unlocking instructions can be found at godaddy.com](https://www.godaddy.com/help/unlock-my-domain-410). - -Customers must also remove “Private Registration” prior to the transfer or GoDaddy can cancel the transfer. - --------- - -## Step 3: Request authorization code -While still in **Domain Settings**, also under *Additional Settings** you will need to select “Get Authorization Code”. GoDaddy will email the code to the address listed for the domain’s Administrator. [Godaddy’s Authorization code instructions can be found at godaddy.com](https://www.godaddy.com/help/get-an-authorization-code-to-transfer-my-domain-to-another-registrar-1685). - -It may take up to 24 hours for GoDaddy to email you the code. If you do not receive the code, please check the registrant email address listed in the domain contact information for the given domain. It might be different than your GoDaddy account email. - --------- - -## Step 4: Transfer to Cloudflare -In the Cloudflare transfer screen, input the authorization code. Each domain will have a unique authorization code and you will need to enter each for every domain you want to transfer. - --------- - -## Step 5: Approve the transfer -Once Cloudflare processes your transfer, GoDaddy will list the domain as “Pending Transfers Out” in the GoDaddy dashboard under **Domain Manager**. You can accelerate the transfer by accepting the transfer in the dashboard. If you do not accept it, the transfer will automatically approve within 5 days. \ No newline at end of file diff --git a/products/registrar/src/content/transfer-instructions/index.md b/products/registrar/src/content/transfer-instructions/index.md deleted file mode 100644 index a6553be0ccc..00000000000 --- a/products/registrar/src/content/transfer-instructions/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -order: 1 ---- - -# Transfer instructions - -Transferring a domain to a new registrar informs the registry that they should instead trust that new registrar to modify information. The process requires some steps at both your new registrar and the one you are leaving. Each registrar handles transfers a bit differently, but in general they follow a pattern based on rules set by ICANN, the organization responsible for regulating domain registration. - -This section contains transfer instructions for some of the largest registrars as well as generic details. - -Before transferring a domain to Cloudflare, you need to set up Cloudflare on the domain. This involves [creating an account and adding your domain](https://support.cloudflare.com/hc/articles/201720164) and [changing your DNS nameservers](https://support.cloudflare.com/hc/articles/205195708). diff --git a/products/registrar/src/content/transfer-instructions/namecheap.md b/products/registrar/src/content/transfer-instructions/namecheap.md deleted file mode 100644 index 39840a8ca81..00000000000 --- a/products/registrar/src/content/transfer-instructions/namecheap.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -order: 5 ---- - -# Namecheap - -You can follow the instructions below to transfer your domain from NameCheap to Cloudflare. - --------- - -## Restrictions -To transfer to a new registrar, your domain must meet the following requirements. - -* ICANN rules prohibit a domain from being transferred if it has been transferred within the last 60 days or if the WHOIS contact information was modified in the last 60 days (even if redacted). -* Your account at your current registrar must be active. If your domain has expired, you may have to pay a redemption fee to renew it before you can process a transfer. -* Cloudflare does not currently support premium domains. Some registries designate a domain name as “premium” and charge higher wholesale rates for these domains. - -If it is listed as available for transfer in the Cloudflare dashboard, these restrictions have already been checked. - --------- - -## Email forwarding -Cloudflare Registrar does not currently support email forwarding. If you require email forwarding from your registrar, you will need to use a third-party forwarding service and configure your MX record in the Cloudflare DNS setting for the domain. - --------- - -## Step 1: Login to Namecheap -Login to the Namecheap account where the domain is registered. Navigate to the **Domain List** page and select “Manage”. - --------- - -## Step 2: Unlock the domain and remove WhoisGuard -Select the **Sharing & Transfer** tab. In that tab, you will find a card labeled “Transfer Out”. First, click “Unlock” next to “Domain Lock”. - -Customers must remove “WhoisGuard” from NameCheap prior to transferring the domain. - --------- - -## Step 3: Request authorization code -While still on the **Sharing & Transfer** tab, click the button “Auth Code” next to “Domain Lock”. Namecheap will email the code to the email on file for your account. - --------- - -## Step 4: Transfer to Cloudflare -In the Cloudflare transfer screen, input the authorization code. Each domain will have a unique authorization code and you will need to enter each for every domain you want to transfer. - --------- - -## Step 5: Approve the transfer -Once Cloudflare processes your transfer, Namecheap will send an email to the domain’s registrant contact (the same address where the authorization code was emailed). To approve the transfer, do **not** take any action. The transfer will automatically approve within 5 days. \ No newline at end of file diff --git a/products/registrar/src/content/transfer-instructions/network-solutions.md b/products/registrar/src/content/transfer-instructions/network-solutions.md deleted file mode 100644 index 0997ef1317d..00000000000 --- a/products/registrar/src/content/transfer-instructions/network-solutions.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -order: 6 ---- - -# Network solutions - -You can follow the instructions below to transfer your domain from Network Solutions to Cloudflare. - --------- - -## Restrictions -To transfer to a new registrar, your domain must meet the following requirements. - -* ICANN rules prohibit a domain from being transferred if it has been transferred within the last 60 days or if the WHOIS contact information was modified in the last 60 days (even if redacted). -* Your account at your current registrar must be active. If your domain has expired, you may have to pay a redemption fee to renew it before you can process a transfer. -* Cloudflare does not currently support premium domains. Some registries designate a domain name as “premium” and charge higher wholesale rates for these domains. - -If it is listed as available for transfer in the Cloudflare dashboard, these restrictions have already been checked. - --------- - -## Email forwarding -Cloudflare Registrar does not currently support email forwarding. If you require email forwarding from your registrar, you will need to use a third-party forwarding service and configure your MX record in the Cloudflare DNS setting for the domain. - --------- - -## Step 1: Login to Network Solutions -Login to the Network Solutions account where the domain is registered. Navigate to the **Account Settings** page. - --------- - -## Step 2: Unlock the domain and request authorization code -In the **Details** section, select “Turn Off or Request Authorization Code” next to **Transfer Lock**. Once you hit “Continue”, you will need to acknowledge the Network Solutions’ transfer terms. - -After confirming the terms, you may be asked to complete survey questions. Once completed, click “Request Authorization Code”. You will need to select “Leave Domain Protect off” and then check the “Request Authorization Code” box. Once checked, click save. - -Network Solutions will email the code to the registrant contact email on file for your domain. - -If you do not receive the code, please check the registrant email address listed in the domain contact information for the given domain. It might be different than your GoDaddy account email. - --------- - -## Step 3: Transfer to Cloudflare -In the Cloudflare transfer screen, input the authorization code. Each domain will have a unique authorization code and you will need to enter each for every domain you want to transfer. - --------- - -## Step 4: Approve the transfer -Once Cloudflare processes your transfer, Network Solutions will send an email to the domain’s registrant contact (the same address where the authorization code was emailed). The email will contain a link that you can click to immediately approve and process the transfer. If you do not click the link, the transfer will automatically approve within 5 days. \ No newline at end of file diff --git a/products/registrar/src/content/transfer-instructions/oneandone.md b/products/registrar/src/content/transfer-instructions/oneandone.md deleted file mode 100644 index c24d25afb36..00000000000 --- a/products/registrar/src/content/transfer-instructions/oneandone.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -order: 7 ---- - -# 1&1 - -You can follow the instructions below to transfer your domain from 1&1 to Cloudflare. - --------- - -## Restrictions -To transfer to a new registrar, your domain must meet the following requirements. - -* ICANN rules prohibit a domain from being transferred if it has been transferred within the last 60 days or if the WHOIS contact information was modified in the last 60 days (even if redacted). -* Your account at your current registrar must be active. If your domain has expired, you may have to pay a redemption fee to renew it before you can process a transfer. -* Cloudflare does not currently support premium domains. Some registries designate a domain name as “premium” and charge higher wholesale rates for these domains. - -If it is listed as available for transfer in the Cloudflare dashboard, these restrictions have already been checked. - --------- - -## Email forwarding -Cloudflare Registrar does not currently support email forwarding. If you require email forwarding from your registrar, you will need to use a third-party forwarding service and configure your MX record in the Cloudflare DNS setting for the domain. - --------- - -## Step 1: Login to 1&1 -Login to the 1&1 account where the domain is registered. Navigate to the **Manage domains** page and select the domain you plan to transfer. - --------- - -## Step 2: Unlock the domain -Select the **Registration & Transfer** tab. In the section “Domain transfer lock” toggle the button to remove the registrar lock. - --------- - -## Step 3: Request authorization code -Below the “Domain transfer lock” section will be a row listed as “Change provider”. Click “Show Authorization Code”. The 1&1 dashboard will launch a pop-up with the code. - --------- - -## Step 4: Transfer to Cloudflare -In the Cloudflare transfer screen, input the authorization code. Each domain will have a unique authorization code and you will need to enter each for every domain you want to transfer. - --------- - -## Step 5: Approve the transfer -Once Cloudflare processes your transfer, 1&1 will send an email to the domain’s registrant contact (the same address where the authorization code was emailed). The email will contain a link that you can click to immediately approve and process the transfer. If you do not click the link, the transfer will automatically approve within 5 days. \ No newline at end of file diff --git a/products/registrar/src/content/why-choose-cloudflare/custom-domain-protection.md b/products/registrar/src/content/why-choose-cloudflare/custom-domain-protection.md new file mode 100644 index 00000000000..1201d9fdf98 --- /dev/null +++ b/products/registrar/src/content/why-choose-cloudflare/custom-domain-protection.md @@ -0,0 +1,14 @@ +--- +order: +pcx-content: reference +--- + +# Cloudflare Custom Domain Protection + +Cloudflare offers [Custom Domain Protection](https://www.cloudflare.com/products/registrar/custom-domain-protection/) to customers with a Cloudflare Enterprise plan and high-profile domains who need the highest level of security against domain hijacking. + +Custom Domain Protection offers additional safeguard features for registered domains, including: + +* **Registry lock**: Cloudflare applies Registry Lock, when available, to all domains registered through Custom Domain Protection. Any changes to a domain requires Cloudflare to first unlock the domain at the registry level. +* **Out-of-band authentication**: All changes to domain ownership or nameserver information are verified and executed manually based on an authentication process defined by the customer. +* **No interface**: Custom Domain Protection does not offer an interface, to remove the possibility of domain hijack through a compromised account. \ No newline at end of file diff --git a/products/registrar/src/content/why-choose-cloudflare/index.md b/products/registrar/src/content/why-choose-cloudflare/index.md new file mode 100644 index 00000000000..95122f3f439 --- /dev/null +++ b/products/registrar/src/content/why-choose-cloudflare/index.md @@ -0,0 +1,19 @@ +--- +order: 1 +title: Why choose Cloudflare +pcx-content: concept +--- + +# Domain registration + +![Domain Registration Overview](../static/domain-registry-process.png) + +When you register a domain, you become the owner, or registrant, for that domain for a set period of time. Now that you are the registrant, you can create an authoritative record that tells the world the nameservers for your domain. The domain name system, or DNS, uses those nameservers to direct traffic to the IP address of your server. + +When you put your site behind Cloudflare, you change your nameservers at your registry to the ones Cloudflare provides. Once Cloudflare is responsible for your authoritative DNS, Cloudflare can deliver the features that make your site faster and safer. + +Your registry keeps the authoritative record for your nameservers. Each top-level domain (TLD) has a single registry that is responsible for maintaining those records. For example, `.com` is a TLD. Verisign is the exclusive registry for `.com`. As the TLD’s registry, Verisign stores the contact information and the nameservers for every `.com` domain in the world. As the registrant for a domain, you can tell your domain’s registry which nameservers a DNS resolver should use. + +Where do registrars fit in this relationship? Domain registrars communicate your ownership, and subsequent changes, of a domain to the registry for that TLD. Registries trust registrars to only accept changes from the domain owner and to accurately convey that information so that the registry can update their record. While there is one registry for every TLD, hundreds of registrars are able to register a domain. + +Beyond this, Cloudflare also offers you services such Domain Name System Security Extensions, custom domain protection, and WHOIS redaction. \ No newline at end of file diff --git a/products/registrar/src/content/why-choose-cloudflare/top-level-domains-supported.md b/products/registrar/src/content/why-choose-cloudflare/top-level-domains-supported.md new file mode 100644 index 00000000000..e758c9dc205 --- /dev/null +++ b/products/registrar/src/content/why-choose-cloudflare/top-level-domains-supported.md @@ -0,0 +1,10 @@ +--- +order: +pcx-content: reference +--- + +# Top Level Domains supported + +Cloudflare supports over 200 top-level domains (TLDs). The full list of supported TLDs [can be found on our TLD policies page](https://www.cloudflare.com/tld-policies/). + +Cloudflare cannot list the wholesale cost for most TLDs in our marketing materials due to commitments in our contracts with the registries. Cloudflare can, however, give you the wholesale cost at checkout when you transfer your domain. \ No newline at end of file diff --git a/products/registrar/src/content/why-choose-cloudflare/whois-redaction.md b/products/registrar/src/content/why-choose-cloudflare/whois-redaction.md new file mode 100644 index 00000000000..e16148c0c11 --- /dev/null +++ b/products/registrar/src/content/why-choose-cloudflare/whois-redaction.md @@ -0,0 +1,45 @@ +--- +order: +pcx-content: reference +--- + +# WHOIS redaction + +Cloudflare Registrar provides personal data redaction on WHOIS information, if permitted by the registry. + +WHOIS is a standard for publishing the contact and nameserver information for all registered domains. Each registrar maintains their own WHOIS service. Anyone can query the registrar’s WHOIS service to reveal the data behind a given domain. + +However, broadcasting the registrant contact information via the WHOIS service can cause spam mail to be delivered to your personal addresses. Cloudflare Registrar offers personal data redaction on WHOIS for free, that meets current ICANN guidelines. + +Cloudflare’s WHOIS service can be found at https://rdap.cloudflare.com/. Select **WHOIS** as the search type. + +## What is WHOIS redaction? + +WHOIS redaction removes most contact information categorized as personal data (registrant name, email address, postal address) from the published WHOIS record for a domain. Fields will read “Data Redacted”. The nameserver, domain lock information, and date records for a domain are still available publicly. The following fields will continue to show in WHOIS: + +* Registrant State/Province +* Registrant Country. + +Cloudflare still maintains the authoritative, unredacted, record of your WHOIS data. You can modify this information at any time in. To access it: + +1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com/login) and select your account and domain. +1. Select **Registrar**. +1. Under **Manage** > **Default Contact**, select **Edit** to update your information. + + + +Some registries do not allow domains to be registered with WHOIS Redaction or WHOIS Privacy. Many of these are country TLDs (ccTLDs), like `.uk.` Cloudflare does not yet support TLDs that prohibit WHOIS redaction, but will in the near future. + +## What is RDAP? + +RDAP (Registration Data Access Protocol) is a new standard for querying domain contact and nameserver information for all registered domains. This new protocol offers some advantages over WHOIS, including standardized data access, support for internationalization, and secure access controls. RDAP is intended to eventually replace WHOIS. However, Cloudflare currently provides both WHOIS and RDAP search capability. + +Cloudflare’s RDAP service can be found at https://rdap.cloudflare.com/. Select **RDAP** as the search type. + +## How can third parties reach registrants? + +As part of the ICANN guidelines, registrars must make available a method for third parties to reach the registrant without revealing the identity of that registrant. Cloudflare has made a [form available where third parties can submit a message for a given domain on Cloudflare Registrar](https://www.cloudflare.com/abuse/form). Cloudflare will forward the message to the registrant email on file for that domain. \ No newline at end of file diff --git a/products/rules/docs-config.js b/products/rules/docs-config.js index 5cb0afc022b..d727165c7cd 100644 --- a/products/rules/docs-config.js +++ b/products/rules/docs-config.js @@ -20,6 +20,6 @@ module.exports = { description: "Create rules that adjust incoming HTTP requests at the edge.", author: "@cloudflare", url: "https://developers.cloudflare.com/rules", - image: "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" + image: "https://www.cloudflare.com/img/cf-twitter-card.png" } } diff --git a/products/rules/src/content/index.md b/products/rules/src/content/index.md index 55999586d7d..0cca82a645e 100644 --- a/products/rules/src/content/index.md +++ b/products/rules/src/content/index.md @@ -3,13 +3,13 @@ pcx-content-type: landing-page order: 1 --- -# Welcome +# Overview -With Rules you can manage the following types of rules: +With Rules, you can manage the following types of rules: -- **Page Rules** - Allow you to control which Cloudflare settings trigger on a given URL. Learn about Page Rules in the [Support KB](https://support.cloudflare.com/hc/articles/218411427). +* **Page Rules** — Allow you to control which Cloudflare settings trigger on a given URL. Learn about Page Rules in the [Support KB](https://support.cloudflare.com/hc/articles/218411427). -- [**Transform Rules**](/transform) - Allow you to make adjustments to incoming requests at the edge before they go through any other Cloudflare products. +* [**Transform Rules**](/transform) — Allow you to adjust the URI path, query string, and HTTP headers of incoming requests at the edge.