我正在使用Nagios插件check_email_delivery来监控电子邮件,并在某些情况下检查软件状态。我们现在将所有内部邮件服务器移动到 Office 365,并发现以下命令:
./check_imap_receive_epn -H outlook.office365.com -U user@example.com -P password --ssl -s SUBJECT -s $ARG1$ -w 1200 -c 1800
结果:
IMAP RECEIVE CRITICAL - Could not connect to outlook.office365.com port 993: IO::Socket::INET6 configuration failederror:00000000:lib(0):func(0):reason(0) at ./check_imap_receive_epn line 93.
然而!将别名解析为 IP 地址似乎有效。例:
./check_imap_receive_epn -H 157.56.239.201 -U user@example.com -P password --ssl -s SUBJECT -s $ARG1$ -w 1200 -c 1800
结果是:
IMAP RECEIVE OK - 5 seconds, 1 found, 1 deleted
我认为问题在这里引起:
my $socket = IO::Socket::SSL->new(PeerAddr=>"$imap_server:$imap_port", %ssl_args);
$imap_server
未正确解析的地方。有什么建议吗?>.<</p>
因为安装了IO::Socket::INET6 IO::Socket::SSL将使用此作为基类。IO::Socket::INET6首先尝试获取IPv6地址(例如DNS AAAA记录),而ping等通常只尝试IPv4(IPv6通常有一个ping6)。因此,如果您的IPv6设置被破坏,您可能无法使用仅IPv4工具意识到这一点。请检查:
- 挖掘 outlook.office365.com AAAA - 这应该给你IPv6地址。如果你没有IPv6,它应该根本不提供任何记录和NOERROR,但一些损坏的解析器会返回NXDOMAIN。
- 如果您获得IPv6地址,请尝试连接到它,例如perl -MIO::Socket::INET6 -e 'IO::Socket::INET6->new("[2a01:111:f400:9800::6]:993") 或者死 $!'如果您收到错误,则您的IPv6设置已损坏,例如,即使您无法通过IPv6访问主机,解析器也会返回IPv6记录