Email

Sendmail 和 nslookup 解析問題

  • January 15, 2015

在我的 Ubuntu 伺服器上,我一直試圖通過安裝 sendmail 來讓 PHP mail() 函式工作(我也安裝了 postfix,但我放棄了)。但是,當我嘗試發送郵件時,它會在隊列中出現以下錯誤/var/log/mail.log

sm-mta[xxx]: gethostbyaddr(x.x.x.x) failed: x

當我執行nslookup(例如nslookup gmail.com)它說它無法解決並且連接超時。在花了一整天時間並嘗試了各種事情之後,我決定將我的域的名稱伺服器放入我的介面文件中,如下所示:https ://askubuntu.com/a/331636

這緩解了我遇到的問題,nslookup但我在嘗試發送郵件時仍然在日誌中收到相同的錯誤,除了我的公共 IP 地址沒有顯示,只有私人 IP 地址。例如

sm-mta[xxx]: gethostbyaddr(178.x.x.x) failed: x # public IP error not showing anymore
sm-mta[xxx]: gethostbyaddr(10.x.x.x) failed: x # private IP error still showing

我已經查看了很多關於此的文件,但我仍然不確定我做錯了什麼。我已經檢查了 sendmail 正在使用埠 25。由於我只發送郵件,我是否需要擔心有關我伺服器的 MX 的 DNS 記錄?


/etc/resolv.conf:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 2001:4860:4860::8844
nameserver 2001:4860:4860::8888
nameserver 8.8.8.8

/etc/dhcp/dhclient.conf:

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

#send host-name "andare.fugue.com";
send host-name = gethostname();
#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
#send dhcp-lease-time 3600;
#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, time-offset, routers,
   domain-name, domain-name-servers, domain-search, host-name,
   dhcp6.name-servers, dhcp6.domain-search,
   netbios-name-servers, netbios-scope, interface-mtu,
   rfc3442-classless-static-routes, ntp-servers,
   dhcp6.fqdn, dhcp6.sntp-servers;
#require subnet-mask, domain-name-servers;
#timeout 60;
#retry 60;
#reboot 10;
#select-timeout 5;
#initial-interval 2;
#script "/etc/dhcp3/dhclient-script";
#media "-link0 -link1 -link2", "link0 link1";
#reject 192.33.137.209;

#alias {
#  interface "eth0";
#  fixed-address 192.5.5.213;
#  option subnet-mask 255.255.255.255;
#}

#lease {
#  interface "eth0";
#  fixed-address 192.33.137.200;
#  medium "link0 link1";
#  option host-name "andare.swiftmedia.com";
#  option subnet-mask 255.255.255.0;
#  option broadcast-address 192.33.137.255;
#  option routers 192.33.137.250;
#  option domain-name-servers 127.0.0.1;
#  renew 2 2000/1/12 00:00:01;
#  rebind 2 2000/1/12 00:00:01;
#  expire 2 2000/1/12 00:00:01;
#}

etc/hosts:

# Your system has configured 'manage_etc_hosts' as True.
# As a result, if you wish for changes to this file to persist
# then you will need to either
# a.) make changes to the master file in /etc/cloud/templates/hosts.tmpl
# b.) change or remove the value of 'manage_etc_hosts' in
#     /etc/cloud/cloud.cfg or cloud-config from user-data
127.0.1.1 domain.name
127.0.0.1 localhost.localdomain localhost
178.x.x.x domain.name

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

據我所知,您只想發送郵件。在這種情況下,您不能為伺服器設置 MX 記錄,因為您的郵件伺服器不對任何域負責。

如果我理解您的問題,您真的只想要一個中繼您的郵件的 MTA。

為此目的設置一個成熟的郵件伺服器是多餘的。所以首先這裡有一些選擇: https ://unix.stackexchange.com/questions/1449/lightweight-outgoing-smtp-server

如果您想擁有一個真正的郵件伺服器,最好使用後綴: https ://askubuntu.com/questions/457003/setting-up-a-send-only-mail-server

但是,您的 DNS 問題可能與此無關。

當然,最好是可以解析伺服器上使用的所有 IP 和主機名。要實現這一點,您需要一個用於本地地址(和名稱)的本地名稱伺服器,它將任何其他請求轉發到其他名稱伺服器。

但可能有更簡單的方法:郵件伺服器執行的 DNS 查找應該取決於郵件發送者和接收者域。你應該檢查一下,如果這些是正確的,並且只限制自己的名字,那是可以解決的。也許您已將 From-address 配置為指向某個本地定義的域?

要對此進行調試,您可以嘗試先從命令行發送郵件,然後在此工作後立即轉到 PHP-mailer。

來自隊列的範例郵件將有助於檢查這一點。

您能否發布 netstat -natp 的輸出?只是為了查看 sendmail 綁定到哪些 IP 地址。

我知道這個答案並不完整,但在這一點上我能說的就這麼多了。

引用自:https://serverfault.com/questions/656709