Proxmox架构下Docker部署RoundCube无法连接MailCow VM的IMAP登录问题
配置服务器碰到这种连接拒接的问题真的很闹心!先理清楚你的现有架构,方便一步步排查问题:
当前服务器架构
- Hetzner根服务器,搭载Proxmox虚拟化平台
- OPNSense虚拟机:负责处理所有入站流量,仅放行Proxmox的SSH和8006端口
- MailCow虚拟机:通过OPNSense的NAT映射所有邮件服务所需端口
- Docker虚拟机:运行各类业务容器,内置Caddy反向代理处理SSL证书
- 负责将外部请求重定向到MailCow虚拟机的Web服务
遇到的具体问题
你尝试在Docker主机上部署RoundCube,想要连接到MailCow虚拟机的IMAP服务,但登录时持续报错:
errors:
IMAP Error: Login failed for e@mail.com against mail.host.name from 10.0.10.10 (X-Forwarded-For: 1.2.3.4). Could not connect to mail.host.name:143: Connection refused in /var/www/html/program/lib/Roundcube/rcube_imap.php on line 211 (POST /?_task=login&_action=login)
已确认的排查结果
你已经验证MailCow虚拟机到Docker虚拟机的IP直连是正常的,结合现有信息,给你几个针对性的排查方向:
反向测试Docker侧到MailCow的连通性
在Docker虚拟机(或者直接进入RoundCube容器内部)执行命令:nc -zv mail.host.name 143,确认是否能正常连接到MailCow的IMAP端口。如果容器内部连不通,要检查容器的网络模式(比如是host模式还是桥接模式),以及容器自身的iptables规则是否拦截了出站请求。检查MailCow的IMAP服务监听地址
登录MailCow虚拟机,查看dovecot(IMAP服务)的配置,确认它不是仅监听127.0.0.1,而是绑定了虚拟机的内部IP(如10.0.x.x段)或者0.0.0.0。可以用命令ss -tulpn | grep 143查看端口的监听绑定情况。排查虚拟机间的防火墙规则
虽然OPNSense处理了外部流量,但Proxmox宿主机的虚拟机防火墙、Docker虚拟机的本地防火墙,是否拦截了143端口的跨子网访问?需要确认Docker所在子网到MailCow子网的143端口是开放状态。校验RoundCube的配置准确性
检查RoundCube的config.inc.php配置文件,确认IMAP服务器地址是否填写了MailCow的内部IP(而非外部域名)。如果使用外部域名,要确保Docker虚拟机的DNS能正确解析mail.host.name到MailCow的内部IP,避免走外部NAT链路导致连接失败。
备注:内容来源于stack exchange,提问作者FMK

