跳转到内容
搜索文档

配置隧道

最后更新 查看 MarkdownAgent 设置

Cloudflare 为您的账户分配一个 IPv4 任播地址,用作您网络路由器的隧道目的地。您可以在 Cloudflare 仪表板中的 Address Space(地址空间) > Leased IPs(租用的 IP) 下找到此地址。要请求额外的端点地址,请联系您的账户团队。

Cloudflare 通过从许多全球分布的数据中心的多个节点播发您的端点 IP,来自动处理其网络上的故障。若要处理您网络上的故障,请配置来自独立路由器的两条隧道。

开始之前

在创建隧道之前,请确保您拥有以下信息:

  • Cloudflare 端点地址:分配给您账户的任播 IP 地址。您可以在 Cloudflare 仪表板中的 Address Space(地址空间) > Leased IPs(租用的 IP) 下找到它。
  • 客户端点 IP:在 Cloudflare 代表您宣告的前缀之外的、公共互联网可路由的 IP 地址(通常由您的 ISP 提供)。如果使用 Cloudflare Network Interconnect 或对于 IPsec 隧道(除非您的路由器使用 ID_IPV4_ADDR 类型的 IKE ID),则不需要此地址。
  • 接口地址:来自 RFC 1918 私有 IP 空间(10.0.0.0/8172.16.0.0/12192.168.0.0/16)或 169.254.240.0/20/31(推荐)或 /30 子网。

将流量接入 Cloudflare 的方式

GRE 和 IPsec 隧道

您可以使用 GRE 或 IPsec 隧道将流量接入 Magic Transit,并通过 Cloudflare 仪表板或 API 进行设置。如果您使用 API,您需要您的账户 IDAPI 密钥

在 GRE 和 IPsec 之间进行选择

功能 GRE IPsec
加密
身份验证 预共享密钥 (PSK)
设置复杂度 较简单 需要 PSK 交换
最适合 受信任的网络、CNI 连接 面向互联网且需要加密的连接

有关这两种隧道类型的技术要求的更多信息,请参阅 隧道和封装(Tunnels and encapsulation)

IPsec 支持的密码算法

有关完整列表,请参阅IPsec 支持的密码算法。IPsec 隧道仅支持因特网密钥交换版本 2 (IKEv2)。

防重放保护

如果您使用 Magic Transit 和任播 IPsec 隧道,我们建议禁用防重放保护。Cloudflare 默认禁用此设置。然而,对于不支持禁用该功能的设备(包括 Cisco Meraki、Velocloud 和 AWS VPN Gateway),您可以通过 API 或 Cloudflare 仪表板启用它。

有关此主题的更多信息,请参阅 防重放保护(Anti-replay protection),或参阅 添加 IPsec 隧道 以了解如何启用此功能。

Network Interconnect (CNI)

除了 GRE 和 IPsec 隧道外,您还可以使用 Network Interconnect (CNI) 将流量接入 Magic Transit。有关更多信息,请参阅 Network Interconnect (CNI)

添加隧道

  1. 转到 Connectors(连接器) 页面。
Go to Connectors ↗
  1. IPsec/GRE tunnels(IPsec/GRE 隧道) 选项卡中,选择 Create a tunnel(创建隧道)
  2. Add tunnels(添加隧道) 页面上,选择 GRE tunnel(GRE 隧道)IPsec tunnel(IPsec 隧道)
  1. Name(名称) 中为您的隧道起一个描述性的名称。此名称必须是唯一的,不能包含空格或特殊字符,并且不能与其他隧道共享。
  2. (可选)Description(描述) 中为您的隧道提供描述。
  3. IPv4 Interface address(IPv4 接口地址) 中,输入隧道的内部 IP 地址以及接口的前缀长度(/31/30)。这用于在 Cloudflare 端通过隧道路由流量。建议使用 /31 子网,因为它能最有效地利用 IP 地址空间。

展开下方对应您隧道类型的章节以完成配置:

GRE tunnel

  1. Customer GRE endpoint(客户 GRE 端点) 中,输入您的路由器的公共 IP 地址。如果您使用物理或虚拟连接(例如 Cloudflare Network Interconnect),则不需要此值,因为 Cloudflare 会提供它。

  2. Cloudflare GRE endpoint(Cloudflare GRE 端点) 中,输入分配给您账户的其中一个任播地址。您可以在 Leased IPs 中找到它们。

  3. (可选) 保留 TTLMTU 的默认值,或根据您的网络进行自定义。

  4. (可选) 配置健康检查设置。展开以下内容以了解有关每个选项的更多信息:

    健康检查选项

    • 隧道健康检查(Tunnel health checks):默认启用。如果您禁用隧道健康检查,即使隧道工作正常,它们在您的隧道健康仪表板中也会显示为 100% 关闭(down)。Cloudflare 会继续通过该隧道路由流量,但无法检测隧道是否关闭。您必须建立自己的系统来检测关闭的隧道,因为 Cloudflare 无法就已关闭的隧道向您发出警告。有关更多信息,请参阅 隧道健康检查
    • 健康检查频率(Health check rate):如果保持启用隧道健康检查,请为您的隧道选择健康检查频率。可用选项包括 Low(低)、Medium(中)和 High(高)。
    • 健康检查类型(Health check type):默认为 Reply 并创建 ICMP(互联网控制消息协议)回复。如果您的防火墙因认为该数据包是攻击而将其丢弃,请将此选项更改为 Request,这将创建一个 ICMP 请求。有关更多信息,请参阅 隧道健康检查
    • 健康检查方向(Health check direction):对于 Magic Transit,默认设置为 unidirectional。有关更多细节,请参阅双向与单向健康检查
    • 健康检查目标(Health check target):隧道的客户侧。此字段仅在 Health check direction(健康检查方向) 设置为 Unidirectional 时可见。
  5. (可选) 我们建议在正式添加隧道之前对其进行测试。要测试隧道,请选择 Test tunnels(测试隧道)

  1. 要添加多个隧道,请为每个新隧道选择 Add GRE tunnel(添加 GRE 隧道)
  1. 在添加隧道信息后,选择 Add tunnels(添加隧道)
  1. (可选)如果您希望在您的网络与 Cloudflare 之间动态交换路由,请选择 Allow BGP (Border Gateway Protocol) peering(Beta)。此功能需要 Unified Routing(Beta)
    对于路由频繁变化的环境或需要自动故障转移的情况,推荐使用 BGP。有关更多信息,请参阅 配置 BGP 路由

IPsec tunnel

  1. (可选)Customer endpoint(客户端点) 中,输入您的路由器的公共 IP 地址。仅在您的路由器使用 ID_IPV4_ADDR 类型的 IKE ID 时才需要此值。

  2. Cloudflare endpoint(Cloudflare 端点) 中,输入分配给您账户的其中一个任播地址。您可以在 Leased IPs 中找到它们。

  3. (可选) 配置健康检查设置。展开以下内容以了解有关每个选项的更多信息:

    健康检查选项

    • 隧道健康检查(Tunnel health checks):默认启用。如果您禁用隧道健康检查,即使隧道工作正常,它们在您的隧道健康仪表板中也会显示为 100% 关闭(down)。Cloudflare 会继续通过该隧道路由流量,但无法检测隧道是否关闭。您必须建立自己的系统来检测关闭的隧道,因为 Cloudflare 无法就已关闭的隧道向您发出警告。有关更多信息,请参阅 隧道健康检查
    • 健康检查频率(Health check rate):如果保持启用隧道健康检查,请为您的隧道选择健康检查频率。可用选项包括 Low(低)、Medium(中)和 High(高)。
    • 健康检查类型(Health check type):默认为 Reply 并创建 ICMP(互联网控制消息协议)回复。如果您的防火墙因认为该数据包是攻击而将其丢弃,请将此选项更改为 Request,这将创建一个 ICMP 请求。有关更多信息,请参阅 隧道健康检查
    • 健康检查方向(Health check direction):对于 Magic Transit,默认设置为 unidirectional。有关更多细节,请参阅双向与单向健康检查
    • 健康检查目标(Health check target):隧道的客户侧。此字段仅在 Health check direction(健康检查方向) 设置为 Unidirectional 时可见。
  4. 如果您还没有预共享密钥:

    1. 选择 Add pre-shared key later(稍后添加预共享密钥)
    2. (可选) 我们建议在正式添加隧道配置之前对其进行测试。要测试隧道,请选择 Test tunnels(测试隧道)
    3. 选择 Add tunnels(添加隧道)
    4. Cloudflare 仪表板将加载您已配置的隧道列表。您刚刚创建的 IPsec 隧道会显示一个警告三角形图标,表示它尚未起作用。选择 Edit(编辑)
    5. 选择 Generate a new pre-shared key(生成新的预共享密钥) > Update and generate a pre-shared key(更新并生成预共享密钥)。将该密钥保存到安全的位置,然后选择 Done(完成)
  5. 如果您已经有了预共享密钥:

    1. 选择 Use my own pre-shared key(使用我自己的预共享密钥)
    2. 将您的密钥粘贴到 Your pre-shared key(您的预共享密钥) 中。
    3. (可选) 我们建议在正式添加隧道之前对其进行测试。要测试隧道,请选择 Test tunnels(测试隧道)
    4. 选择 Add tunnels(添加隧道)
  6. (可选) 如果您的设备不支持禁用防重放保护,请启用 Replay protection(重放保护)。有关更多信息,请参阅 防重放保护(Anti-replay protection)

  1. 要添加多个隧道,请为每个新隧道选择 Add IPsec tunnel(添加 IPsec 隧道)
  1. 在添加隧道信息后,选择 Add tunnels(添加隧道)
  1. (可选)如果您希望在您的网络与 Cloudflare 之间动态交换路由,请选择 Allow BGP (Border Gateway Protocol) peering(Beta)。此功能需要 Unified Routing(Beta)
    对于路由频繁变化的环境或需要自动故障转移的情况,推荐使用 BGP。有关更多信息,请参阅 配置 BGP 路由

GRE tunnel

通过 API 创建一个 POST 请求以创建 GRE 隧道。

Required API token permissions

At least one of the following token permissions is required:
  • Magic WAN Write
  • Magic Transit Write
Create a GRE tunnelbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/magic/gre_tunnels" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "<TUNNEL_NAME>",
		"description": "<TUNNEL_DESCRIPTION>",
		"interface_address": "<INTERFACE_ADDRESS>",
		"cloudflare_gre_endpoint": "<CLOUDFLARE_ENDPOINT>",
		"customer_gre_endpoint": "<CUSTOMER_ENDPOINT>"
	}'
{
  "errors": [
    {
      "code": 1000,
      "message": "message"
    }
  ],
  "messages": [
    {
      "code": 1000,
      "message": "message"
    }
  ],
  "result": {
    "gre_tunnels": [
      {
        "cloudflare_gre_endpoint": "<IP_ADDRESS>",
        "customer_gre_endpoint": "<IP_ADDRESS>",
        "interface_address": "<INTERFACE_CIDR>",
        "name": "<TUNNEL_NAME>",
        "description": "<TUNNEL_DESCRIPTION>",
        "health_check": {
          "direction": "unidirectional",
          "enabled": true,
          "rate": "low",
          "type": "reply"
        },
        "mtu": 0,
        "ttl": 0
      }
    ]
  },
  "success": true
}

IPsec tunnel

  1. 通过 API 创建一个 POST 请求以创建 IPsec 隧道。

    请注意,在此示例中,防重放保护默认是禁用的。如果您使用的设备不支持禁用此功能,您可以通过在每个 IPsec 隧道中设置 "replay_protection": true 标志来启用它。如果您已经创建了 IPsec 隧道,请使用 PUT 请求 对其进行更新。有关此主题的更多信息,请参阅 防重放保护(Anti-replay protection)

    Required API token permissions

    At least one of the following token permissions is required:
    • Magic WAN Write
    • Magic Transit Write
    Create an IPsec tunnelbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/magic/ipsec_tunnels" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "<TUNNEL_NAME>",
    		"description": "<TUNNEL_DESCRIPTION>",
    		"interface_address": "<INTERFACE_ADDRESS>",
    		"cloudflare_endpoint": "<CLOUDFLARE_ENDPOINT>",
    		"customer_endpoint": "<CUSTOMER_ENDPOINT>"
    	}'
    {
    	"errors": [
    		{
    			"code": 1000,
    			"message": "message"
    		}
    	],
    	"messages": [
    		{
    			"code": 1000,
    			"message": "message"
    		}
    	],
    	"result": {
    		"ipsec_tunnels": [
    			{
    				"id": "<IPSEC_TUNNEL_ID>",
    				"interface_address": "<INTERFACE_CIDR>",
    				"name": "<TUNNEL_NAME>",
    				"cloudflare_endpoint": "<IP_ADDRESS>",
    				"customer_endpoint": "<IP_ADDRESS>",
    				"description": "<TUNNEL_DESCRIPTION>",
    				"health_check": {
    					"direction": "unidirectional",
    					"enabled": true,
    					"rate": "low",
    					"type": "reply"
    				},
    				"psk_metadata": {},
    				"replay_protection": false
    			}
    		]
    	},
    	"success": true
    }

    请注意隧道 id 的值。我们将使用它来生成预共享密钥 (PSK)。

  2. 创建一个 POST 请求以生成 PSK。请使用您从上一个命令中获得的隧道 id 值。

    Required API token permissions

    At least one of the following token permissions is required:
    • Magic WAN Write
    • Magic Transit Write
    Generate Pre Shared Key (PSK) for IPsec tunnelsbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/magic/ipsec_tunnels/$IPSEC_TUNNEL_ID/psk_generate" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
    {
    	"result": {
    		"ipsec_id": "<IPSEC_ID>",
    		"ipsec_tunnel_id": "<IPSEC_TUNNEL_ID>",
    		"psk": "<PSK_CODE>",
    		"psk_metadata": {
    			"last_generated_on": "2025-03-13T14:28:47.054317925Z"
    		}
    	},
    	"success": true,
    	"errors": [],
    	"messages": []
    }

    请记录您的 psk 值。

  3. 创建一个 PUT 请求以使用 PSK 更新您的 IPsec 隧道。

    curl "https://api.cloudflare.com/client/v4/accounts/%7Baccount_id%7D/magic/ipsec_tunnels/%7Bipsec_tunnel_id%7D" \
    	--request PUT \
    	--json '{
    		"psk": "<PSK_VALUE>"
    	}'
{
  "result": {
    "modified": true,
    "modified_ipsec_tunnel": {
      "id": "<IPSEC_ID>",
      "interface_address": "<IPSEC_CIDR>",
      "created_on": "2025-03-13T14:28:21.139535Z",
      "modified_on": "2025-03-13T14:33:26.09683Z",
      "name": "<TUNNEL_NAME>",
      "cloudflare_endpoint": "<IP_ADDRESS>",
      "customer_endpoint": "<IP_ADDRESS>",
      "remote_identities": {
        "hex_id": "",
        "fqdn_id": "",
        "user_id": ""
      },
      "psk_metadata": {
        "last_generated_on": "2025-03-13T14:28:47.054318Z"
      },
      "description": "<TUNNEL_DESCRIPTION>",
      "health_check": {
        "enabled": true,
        "target": "",
        "type": "reply",
        "rate": "mid",
        "direction": "unidirectional"
      }
    }
  },
  "success": true,
  "errors": [],
  "messages": []
}
  1. 使用第 3 步中的 psk 值在您的设备上配置 IPsec 隧道。

配置双向健康检查

双向健康检查适用于 GRE 和 IPsec 隧道。For Magic Transit this option defaults to unidirectional。

您可以通过 API 使用 "bidirectional" 或 "unidirectional" 来更改此设置:

curl "https://api.cloudflare.com/client/v4/accounts/%7Baccount_id%7D/magic/ipsec_tunnels/%7Bipsec_tunnel_id%7D" \
	--request PUT \
	--json '{
		"health_check": {
				"direction": "bidirectional"
		}
	}'
{
  "result": {
    "modified": true,
    "modified_ipsec_tunnel": {
      "id": "<IPSEC_ID>",
      "interface_address": "<IPSEC_CIDR>",
      "created_on": "2025-03-13T14:28:21.139535Z",
      "modified_on": "2025-03-13T14:33:26.09683Z",
      "name": "<TUNNEL_NAME>",
      "cloudflare_endpoint": "<IP_ADDRESS>",
      "customer_endpoint": "<IP_ADDRESS>",
      "remote_identities": {
        "hex_id": "",
        "fqdn_id": "",
        "user_id": ""
      },
      "psk_metadata": {
        "last_generated_on": "2025-03-13T14:28:47.054318Z"
      },
      "description": "<TUNNEL_DESCRIPTION>",
      "health_check": {
        "enabled": true,
        "target": "",
        "type": "reply",
        "rate": "mid",
        "direction": "bidirectional"
      }
    }
  },
  "success": true,
  "errors": [],
  "messages": []
}

双向与单向健康检查

为了检查隧道的健康状况,Cloudflare 会向您的网络发送由 ICMP(互联网控制消息协议)回复数据包组成的健康检查探测。Cloudflare 需要接收到这些探测,以判断您的隧道是否健康。

对于 Magic Transit(直接服务器返回,DSR),Cloudflare 默认使用 单向(unidirectional) 健康检查,而对于 Cloudflare WAN,则默认使用 双向(bidirectional) 健康检查。然而,通过互联网向 Cloudflare 路由单向 ICMP 回复数据包有时会受到中间网络设备(如状态防火墙)的丢弃。具有出口流量的 Magic Transit 客户可以将此设置修改为双向。

如果您是具有出口流量的 Magic Transit 客户,请参阅 Magic Transit 出口流量,以了解创建与 Cloudflare 的成功连接时需要考虑的技术方面的更多信息。

旧版双向健康检查

对于使用具有公共 IP 范围的旧版健康检查系统的客户,Cloudflare 建议:

  • 将隧道健康检查目标 IP 地址配置在 172.64.240.252/30 前缀范围内。
  • 应用基于策略的路由,匹配源 IP 地址等于配置的隧道健康检查目标(例如 172.64.240.253/32)的数据包,并将它们通过隧道路由回 Cloudflare。

后续步骤

现在您已经设置了隧道端点,您需要配置路由以引导流量通过 Cloudflare。您有两个路由选项:

  • 静态路由:最适合路由很少发生变化的简单且稳定的网络。您需要手动定义每条路由。
  • BGP 对等互连:最适合路由频繁变化、有多个前缀的动态环境,或当您需要自动故障转移时。这需要在创建期间在您的隧道上启用 BGP。

有关这两个选项的详细说明,请参阅 配置路由

故障排除

如果您遇到隧道问题:

这篇文档对您有帮助吗?