部署 Nginx Proxy Manager 实现 IPv4 访问 IPv6 服务

本教程适用于以下场景

  •  让仅支持 IPv4 的用户/网络环境
  •  通过云主机的反向代理,透明访问纯 IPv6 的服务
  •  全程保持 IPv4 正常使用,不干扰原有网络

技术实现原理

  • IPv4 用户 → 访问云主机域名(A记录解析到IPv4)
  • 云主机 NPM → 通过 IPv6 连接目标服务(如 [2409:8a28::1]:3000
  • 数据返回 → 云主机将 IPv6 响应转换为 IPv4 返回给用户

适用条件

  • 云主机需具备 双栈网络(IPv4 + IPv6)
  • 目标服务已配置 IPv6 可达性(且允许云主机访问)
  • 测试环境:腾讯云Ubuntu 24.04

一、Docker 安装优化

1. 一键安装Docker
# 使用阿里云镜像加速(腾讯云暂未在官方脚本支持)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
sudo systemctl enable --now docker
2. 配置腾讯云镜像加速
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com"
  ]
}
EOF
3. 验证 Docker 是否运行

docker --version
sudo docker run hello-world

二、Nginx Proxy Manager 部署(Host 网络模式)

端口说明

  • 管理界面:81(无需映射,直接使用宿主机端口)
  • HTTP/HTTPS:80/443(自动绑定)
docker run -d \
  --name=npm \
  --network=host \          # 关键!直接使用宿主机网络
  -v npm_data:/data \       # 配置持久化
  -v npm_letsencrypt:/etc/letsencrypt \  # 证书持久化
  --restart unless-stopped \
  chishin/nginx-proxy-manager-zh:latest

三、防火墙与安全组配置

  1. 腾讯云安全组规则(控制台操作):
    • 放行入方向:TCP:80,443,81
  2. 添加本地防火墙
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 81 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT

四、访问与初始化

  1. 登录管理界面
    • 地址:http://<云服务器IP>:81
    • 默认账号:admin@example.com / changeme (首次登录需修改)
2. 验证 IPv6 连通性

# 在宿主机测试
ping6 2409:8a28:d14:28f0:6325:xxxx:xxxx:xxxx
curl -v http://[2409:8a28:d14:28f0:6325:xxxx:xxxx:xxxx]:3000

五、配置 IPv4 到 IPv6 反向代理

  1. 添加代理规则
    • 域名speed.xxx.com(需提前解析到云主机IPv4)
    • 协议http
    • 目标地址[2409:8a28:d14:28f0:6325:xxxx:xxxx:xxxx](必须带方括号)
    • 端口3000
    • 高级选项:勾选「支持 WebSockets」
  2. SSL 证书(可选):
    • 在「SSL」选项卡中选择「Let’s Encrypt」自动申请证书

六、故障排查指南

问题现象 解决方案
管理界面无法访问 检查 docker ps 是否运行,安全组/防火墙是否放行 81 端口
502 Bad Gateway 1. 确认目标 IPv6 地址格式正确(带方括号)
2. 测试宿主机到目标的连通性
SSL 证书申请失败 确保域名已解析且 80 端口未被占用