1. 什么是内网穿透
内网穿透是一种网络技术,允许外部网络(如互联网)访问处于内网或局域网中的设备和服务。通常情况下,局域网中的设备由于NAT(网络地址转换)或防火墙的存在,无法直接从外部网络访问。内网穿透技术通过建立一个连接通道,使外部网络能够"穿透"这些限制,直接访问内部网络的资源。
2. 需要内网穿透的场景
- 开发测试:开发人员在本地开发的应用需要被外部用户或客户端测试
- 远程访问:远程访问家庭或办公室内的设备(如NAS、监控摄像头等)
- 演示展示:在外部展示内网中运行的网站或应用
- 临时服务部署:无需购买公网IP即可对外提供服务
- 微服务调试:微服务架构中,需要外部服务调用本地开发的服务
- IoT设备管理:远程管理位于内网的物联网设备
3. 内网穿透常见实现方式
在Ubuntu + Docker环境下,以下是几种常见的内网穿透实现方式:
3.1 Frp (Fast Reverse Proxy)
Frp是一个流行的开源内网穿透工具,支持TCP、UDP、HTTP、HTTPS等协议。
Docker部署示例:
# 服务端(需要部署在有公网IP的服务器上)
docker run --restart=always --network host -d -v /path/to/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps
# 客户端(部署在内网设备上)
docker run --restart=always --network host -d -v /path/to/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc
frps.ini配置示例:
[common]
bind_port = 7000
token = your_token_here
frpc.ini配置示例:
[common]
server_addr = your_server_ip
server_port = 7000
token = your_token_here
[web]
type = http
local_port = 8080
custom_domains = your.domain.com
3.2 Ngrok
Ngrok是一款简单易用的内网穿透工具,提供免费和付费版本。
Docker部署示例:
docker run -it -e NGROK_AUTHTOKEN=your_auth_token -p 4040:4040 ngrok/ngrok http 8080
3.3 Cloudflare Tunnel (原Argo Tunnel)
Cloudflare提供的安全隧道服务,可以安全地将内部服务暴露到互联网。
Docker部署示例:
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run