内网穿透-ngrok/cpolar

方案 1:一键临时外网访问(最快,1 分钟搞定,无需注册)

用ngrok(老牌内网穿透工具,官方维护,稳定),虚拟机里直接执行以下命令:

复制代码
# 下载并启动ngrok,直接穿透8080端口
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list && sudo apt update && sudo apt install ngrok -y && ngrok http 8080

执行后终端会输出外网访问地址,格式如下:

复制代码
Forwarding  https://xxxx-xx-xx-xx-xx.ngrok-free.app -> http://localhost:8080

直接把这个https 开头的地址 发给外网的人,输入密码123456就能访问,无需其他配置!

方案 2:长期稳定外网访问(免费,需简单注册,无宕机)

用cpolar(国内友好的内网穿透工具,免费版足够个人使用),3 步搞定,比 FRP 简单 10 倍:

1.1 安装cpolar

在Ubuntu上打开终端,执行命令

首先,我们需要安装curl:

复制代码
sudo apt-get install curl
步骤 2:官网注册并配置 token
  1. 浏览器打开:https://www.cpolar.com/(免费注册,10 秒搞定)

  2. 登录后复制页面上的Authtoken

  3. 虚拟机执行(替换成token):

    复制代码
    cpolar authtoken 你的Authtoken
步骤 3:一键启动穿透 8080 端口
复制代码
cpolar http 8080

终端会输出2 个外网地址 (http/https 都有),直接发给别人就能访问,密码还是123456。


核心前提(先确认)

  1. code-server 已在容器内正常运行,监听端口是 8080(可通过 docker-compose logs dev-box 确认);
  2. cpolar 已安装且配置好 Authtoken(若没配,先执行 cpolar authtoken 你的token);
  3. 操作在你的 Ubuntu 虚拟机(宿主机)执行,不是容器内

实例:

步骤 1:确认 code-server 本地可访问

先确保宿主机能访问 code-server,避免穿透后无法访问:

复制代码
# 宿主机执行,测试 8080 端口是否通
curl http://localhost:8080

✅ 输出类似 <!DOCTYPE html> 或 401 Unauthorized(需要密码)都说明端口通;❌ 若提示 Connection refused,先重启 code-server 容器:

复制代码
cd /home/gaoyu/docker_dev_env
docker-compose restart dev-box

步骤 2:启动 cpolar 穿透 code-server

方式 1:临时穿透(简单,重启后地址会变,适合临时访问)

复制代码
# 直接穿透 8080 端口(http协议)
cpolar http 8080

执行后终端会输出 2 个外网地址,格式如下(复制即可用):

复制代码
Forwarding  http://xxxx-xx-xx-xx-xx.cpolar.io:12345 -> http://localhost:8080
Forwarding  https://xxxx-xx-xx-xx-xx.cpolar.io:12345 -> http://localhost:8080

方式 2:后台穿透(稳定,重启不中断,适合长期访问)

复制代码
# 后台启动 cpolar,日志输出到文件(避免终端关闭失效)
nohup cpolar http 8080 > /home/gaoyu/cpolar_code_server.log 2>&1 &

# 查看后台进程是否运行(有输出则成功)
ps -ef | grep cpolar | grep -v grep

查看穿透地址(从日志中提取):

复制代码
cat /home/gaoyu/cpolar_code_server.log

步骤 3:外网访问 code-server

1. 直接访问穿透地址

把 cpolar 输出的 http/https 地址发给外网的人,例如:

复制代码
# 外网访问地址(替换成实际地址)
https://xxxx-xx-xx-xx-xx.cpolar.io:12345
密码:123456(配置的 code-server 密码)

2. 关键验证(确保能访问)

  • 浏览器访问该地址 → 输入密码 123456 → 进入 code-server 界面即成功;
  • 若提示 502 Bad Gateway:
    1. 检查 code-server 容器是否运行:docker-compose ps dev-box;
    2. 重启 cpolar:kill -9 $(pgrep cpolar) && nohup cpolar http 8080 > cpolar.log 2>&1 &。

进阶:配置 cpolar 固定地址(免费,避免地址频繁变)

免费版 cpolar 默认每次重启地址会变,可申请固定二级域名,步骤如下:

  1. 登录 cpolar 官网:https://www.cpolar.com/ → 「仪表盘」→ 「预留」;

  2. 选择「HTTP 隧道」→ 填写:

    • 预留名称:code-server(自定义);
    • 地区:China VIP(选国内节点,速度快);
  3. 点击「保留」→ 复制生成的「预留域名」(如 code-server.cpolar.cn);

  4. 用固定域名启动 cpolar:

    复制代码
    # 替换成你的预留域名
    nohup cpolar http -subdomain code-server 8080 > cpolar.log 2>&1 &
  5. 外网访问地址固定为:https://code-server.cpolar.cn(永久不变)。


常用运维命令(管理 cpolar)

操作需求 命令
查看 cpolar 日志 tail -f /home/gaoyu/cpolar_code_server.log
停止 cpolar kill -9 $(pgrep cpolar)
重启 cpolar kill -9 $(pgrep cpolar) && nohup cpolar http 8080 > cpolar.log 2>&1 &
设置 cpolar 开机自启(可选) echo "nohup cpolar http 8080 > /home/gaoyu/cpolar.log 2>&1 &" >> /etc/rc.local && chmod +x /etc/rc.local

关键避坑点

  1. 端口冲突 :若 8080 被占用,穿透 code-server 容器的宿主机映射端口(比如你之前用的 8080:8080,则穿透 8080;若改了端口,比如 8888:8080,则穿透 8888);
  2. 安全问题 :外网访问时,把 code-server 密码改成复杂的(如 P@ssw0rd123!),避免被恶意访问;
  3. 容器网络 :若 code-server 用了 host 网络模式,穿透 8080 端口;若用 bridge 模式,穿透宿主机映射的端口(如 8080)。

总结

  1. 核心命令 :cpolar http 8080(临时)/ nohup cpolar http 8080 > log 2>&1 &(后台);
  2. 访问方式 :cpolar 输出的 http/https 地址 + code-server 密码;
  3. 长期使用:申请 cpolar 固定域名,避免地址频繁变化。

✅ 关键注意事项(避坑)

  1. 方案 1(ngrok) :免费版地址每次重启会变,适合临时让别人访问(比如几小时 / 半天);

  2. 方案 2(cpolar) :免费版可申请固定外网地址 (无需额外付费),适合长期对外访问;

  3. 两个方案启动后,虚拟机终端不能关闭 (关闭则穿透失效),想后台运行可加nohup,比如:

    复制代码
    # cpolar后台运行(方案2)
    nohup cpolar http 8080 > cpolar.log 2>&1 &
    # ngrok后台运行(方案1)
    nohup ngrok http 8080 > ngrok.log 2>&1 &
  4. 访问时如果提示安全警告,直接点「高级 / 继续访问」即可(内网穿透工具的正常现象)。

相关推荐
cpolar技术支持2 天前
网关加 gzip,同时开启 chunked,下载回来的包解不开:把两层编码的解压顺序与长度核对做成只读页
python·http·网络编程·socket·内网穿透
承渊政道5 天前
新增一台服务器时还要重新装Nginx?Ansible只改hosts目标列表,同一份Playbook继续执行
运维·nginx·ansible·内网穿透·cpolar
cpolar技术支持9 天前
磁盘明明没满,服务却写不进去?做个 inode 与分区占用只读报表页,cpolar 给异地同事看
linux·内网穿透·cpolar·inode·运维排障
承渊政道12 天前
极空间部署Portainer实战:Docker Socket、9000端口、容器管理与固定地址访问
运维·docker·容器·内网穿透·cpolar·portainer
SoStraw12 天前
没有公网IP怎么远程SSH?设备只装 p2pssh-server,File2File 一键连回去
ssh·内网穿透·远程ssh·webrpc·无公网ip·file2file·p2pssh
cpolar技术支持13 天前
把配置发出去怕带出密钥?先把含凭据配置转成脱敏只读快照,用 cpolar 给同事核对差异
运维·python·内网穿透·cpolar·配置脱敏
cpolar技术支持14 天前
端口被谁占了、这台机上开了哪些监听?本机起一个端口占用只读清单,cpolar 给异地同事远程看谁在监听
运维·python·内网穿透·cpolar·端口占用
todoitbo15 天前
本来只想给内网开个口子,Natapp 却多给了一道防护
前端·javascript·vue.js·内网穿透·网络防护·natapp
ZeroNews内网穿透17 天前
内网穿透公网暴露防护:边缘网关 IP 黑白名单运维实践
运维·网络协议·tcp/ip·内网穿透·api安全·企业网络安全·运维实践
云泽80817 天前
ESXi+飞牛NAS实战:N5105小主机一机多用还能远程管理
esxi·虚拟化·内网穿透·小主机·飞牛nas·n5105