升级至Debian Stretch后Exim拒绝处理虚拟域名问题
解决Debian Stretch下Exim4虚拟域名别名失效问题
这是典型的Debian版本升级后Exim4配置逻辑变化导致的问题——从Jessie到Stretch,Exim4版本从4.84升级到了4.89,默认配置的本地域名识别规则做了不少调整,直接导致你之前的dc_other_hostnames配置不再生效。下面是一步步的排查和修复方案:
1. 先确认配置是否真的包含了你的别名域名
首先检查自动生成的Exim配置里,alias.domain.com是否被纳入本地域名列表:
grep "domainlist local_domains" /var/lib/exim4/config.autogenerated
如果输出里找不到alias.domain.com,说明你的dc_other_hostnames配置没被正确解析到最终运行的配置里,这就是问题的核心。
2. 修正update-exim4.conf.conf的格式
打开/etc/exim4/update-exim4.conf.conf,重点检查dc_other_hostnames字段的格式:
- 多个域名要用空格或分号分隔(别用逗号)
- 确保引号包裹正确,比如正确的写法:
dc_other_hostnames='alias.domain.com;your-other-virtual-domain.com'
3. 重新生成配置并重启Exim4
保存配置后,执行以下命令让新配置生效:
update-exim4.conf systemctl restart exim4
4. 若仍不生效,手动强制添加本地域名
有时候Stretch的Exim4默认配置会忽略dc_other_hostnames的部分条目,这时可以在自定义配置里强制声明:
编辑/etc/exim4/conf.d/main/00_local_settings,添加一行:
local_domains = +local_domains : alias.domain.com
之后再次执行update-exim4.conf和重启服务。
5. 验证修复效果
运行exim -bt hibak@alias.domain.com,如果返回类似以下结果,说明配置已经生效:
hibak@alias.domain.com router = localuser, transport = local_delivery
为什么Jessie没问题?
Jessie的Exim4会直接把dc_other_hostnames的所有域名无条件加入local_domains,但Stretch版本为了配置安全,调整了生成逻辑,部分场景下需要更明确的配置声明才能生效。
内容的提问来源于stack exchange,提问作者P.Péter
相关产品推荐
相关产品推荐

