Networking:内网穿透

tlin82大约 2 分钟networkingnetworkingvpnCloudflare

什么是内网穿透

内网穿透,指的是将内网端口暴露到公网。由于防火墙的限制,或者普遍的 NAT 宽带接入方式,大多用户没有属于自己的公网 IP,因此其它用户无法访问其设备上对外开放的服务(例如 Web 服务器,或者比较常见的案例是 Minecraft 服务器)。过去有许多常见的内网穿透解决方案(例如花生壳、Ngrok、frp 及一系列衍生自 frp 的服务等),而 Cloudflare Tunnel 的免费开放,又为我们提供了一种看起来不错的新选择。内网穿透,指的是将内网端口暴露到公网。

方法和工具

主要有这么几种。

  • CloudFlare Tunnel
  • FRP
  • Zerotier

Cloudflare Tunnel

先决条件

需要把DNS域名托管在CloudFalre

Updates

(2023/10/12) Cloudflare Tunnel默认使用QUIC协议,在墙内经常连不上Cloudflare边缘服务器网络。可以尝试改成http2或是ipv6。具体参考: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide/local/local-management/arguments/open in new window

  • 以下是使用http2
/usr/bin/cloudflared --protocol http2 \
--no-autoupdate tunnel run \ 
--token ***
  • 以下是使用ipv6
docker run -d --network host --name=cloudflared \ 
--restart unless-stopped cloudflare/cloudflared:latest \
tunnel --edge-ip-version=6 --protocol=auto \ 
--region=us --no-autoupdate run \
--token ********************

大致步骤

  • 申请免费的CloudFlare账户
  • 内网服务器要安装cloudflared软件
  • 创建CloudFlare Tunnel。

创建Tunnel有2种方式:

  • remotely-managed tunnel。可以Cloudflare Tunnel新建向导生成的配置命令则是remoted-managed
  • local-managed tunnel. 需要在本地安装cloudflare tunnel代理,登录然后新建tunnel.

frp

frp 是一个开源项目,专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

前提条件

需要一台ECS云主机,有公网IP

Github项目

https://github.com/fatedier/frp/blob/dev/README_zh.mdopen in new window

文档位置

https://gofrp.org/docs/open in new window