私のUbuntuサーバーでは、sendmailをインストールしてPHP mail()関数が機能するようにしています(Postfixもインストールしていますが、あきらめました)。メールを送信するには、次のエラーでキューに入れられます/var/log/mail.log
:
sm-mta[xxx]: gethostbyaddr(x.x.x.x) failed: x
nslookup
を実行したとき(例:nslookup gmail.com
)解決できなかったため接続がタイムアウトしました。これに1日を費やしてさまざまなことを試した後、ドメインのネームサーバーをインターフェースファイルに次のように配置することにしました。 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
とにかく実際のメールサーバーが必要な場合は、postfixをお勧めします。 https://askubuntu.com/questions/457003/setting-up-a-send-only-mail-server
ただし、DNSの問題はおそらくこれとは無関係です。
もちろん、サーバーで使用されているすべてのIPとホスト名を解決できることが望ましいです。これを実現するには、他の要求を他のネームサーバーに転送するローカルアドレス(および名前)用のローカルネームサーバーが必要です。
しかし、もっと簡単な方法があるかもしれません:メールサーバーが実行するDNSルックアップは、メールの送信者と受信者のドメインに依存する必要があります。それらが正しいかどうかを確認し、名前に制限するだけで解決できます。たぶん、ローカルで定義されたドメインを指すようにFrom-addressを設定しましたか?
これをデバッグするには、最初にコマンドラインからメールを送信し、これが機能したらすぐにPHPメーラーに移動してみます。
キューからのメールの例は、これを確認するのに役立ちます。
そして、netstat -natpの出力を投稿してください。 sendmailがバインドされているIPアドレスを確認するだけです。
この答えは完全ではないことは知っていますが、これは現時点で言えることです。
あなたが書くように、それは機能しなければなりませんでした。
user1316146も正しいです。gethostbyaddrは、IPの逆引きを行っています。これは、メールの送信には必要ありません。私の意見では、問題はここにはありません。
私は、あなたは単に騒々しいネットワークを持っているか、本当に信頼できないローカルDNSを持っていると思います。 sendmailを設定して、そのターゲットアドレスをより積極的に何度も取得しようとする必要がありました。
または、ローカルキャッシングのみのバインドをインストールして、このような問題をより明確にする必要があります。
または、より堅牢なmtaを試してみてください。postfixは良い方法です。
gethostbyaddrは逆DNSを実行しているため、問題のIPアドレスに対してPTRレコードを設定する必要があります。また、そのアドレス範囲をパブリックアドレスに委任する必要があります。
ボックスのDNSとして8.8.8.8を使用している場合、10.0.0.0/8ネットワークのPTRレコードを取得することはできません。
メールサーバーは送信者のホスト名を判別して、送信されたHELOメッセージと比較しようとするため、この検索は通常、サーバーに送信されるメールに対してのみ行われます。
ちなみに、メールを送信しようとしているだけの場合、Ubuntu環境ではデフォルトのPostfix構成が完全に機能します。