いつからか、メールが送信できなくなっていたので暫定対処した

Pocket

いつの日からかLogwatchのメールがエラーになって届かなくなった。たぶん、Ubuntu14をdo-release-upgradeでUbuntu16にしたタイミングからのような気がする(もしくは、YAMAHA RTX1210のファームウェアアップデートしてからかも)。

とりあえず暫定対処が出来たので、備忘録として記す。ちゃんとした対応方法が分かったら続編を書くかも。

エラーログには次のように書かれている。

Host or domain name not found. Name service error for name=risaiku.net type=A: Host not found, try again

いやいや、WEBサイトが見れているのであり得ない。
サーバに入ってdigしてみる。

dig risaiku.net a

; <<>> DiG 9.10.3-P4-Ubuntu <<>> risaiku.net a
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: FORMERR, id: 52199
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; WARNING: EDNS query returned status FORMERR - retry with '+noedns'

;; QUESTION SECTION:
;risaiku.net.                   IN      A

;; Query time: 0 msec
;; SERVER: ***.***.***.***
;; WHEN: Sat May 27 19:48:03 JST 2017
;; MSG SIZE  rcvd: 29

確かに。なんか警告が出て取れない。

+noednsオプション付けて実行しろと言っているので、そうしてみる。

dig risaiku.net a +noedns

; <<>> DiG 9.10.3-P4-Ubuntu <<>> risaiku.net a +noedns
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1658
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;risaiku.net.                   IN      A

;; ANSWER SECTION:
risaiku.net.            3600    IN      A       ***.***.***.***

;; Query time: 23 msec
;; SERVER: ***.***.***.***
;; WHEN: Sat May 27 19:13:36 JST 2017
;; MSG SIZE  rcvd: 45

取れた。

どうもDNS絡みっぽい。

メールを送信しているサーバはDHCPを使うように構成されている。DHCPはYAMAHAのルーターRTX1210の機能を使っている。どうもこのルーターのDNS機能がEDNSに対応していないっぽい?軽く調べた感じでは公式な文章は見つけられなかった。

たぶん、サーバからDNSサーバへのパケットサイズが大き過ぎるんだろうけど、おおざっぱに調べた感じではUbuntu側で設定できる項目は見当たらない。BINDの方なら設定がありそうなんだけど。Logwatchの送信先は固定なので、ダメ元でhostsに送信先ドメインとIPアドレスを登録してみたけどやっぱりダメ。そもそもドメイン名をちゃんと解決できるようにしておきたい。/etc/resolve.confに書いたところでDHCPからの値に更新されてしまう。

結論としては、こうした。

cat /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.8.8

という事で、ちょっと格好悪いけどGoogle Public DNSをお借りることにした。

resolve.confはこうなる。

cat /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 <<RTX1210のIPアドレス>>
nameserver 8.8.8.8

これだと、結局digは”EDNS query returned status FORMERR”のままなんだけど、sendmailコマンドはちゃんと成功するようになって、Logwatchも届くようになった。

…いや、これだとYAMAHAのルーターをDHCPサーバーに使っている他の端末が全体的に怪しいことになってしまうので全然解決していないな。ただ、メール送信以外は不思議と困っていないので、しばらくはこれで逃げることが出来る。

2017/6/2 追記

DNSリカーシブサーバ機能を使っているのだが、どうも大きなレコードを扱えないようだ。YAMAHAの公式サイトのFAQに次の記載を発見。

DNSリカーシブサーバ機能を使うとアドレスが引けなくなる

DNSには、比較的小さなレコードをUDPによって配送する方法と、 大きなレコードをTCPで配送する方法とがあります。 DNSの問い合わせを行う場合には、まずUDPによって配送を試してみて、 それでうまくいかない場合にはTCPに切り替えるようになっています。 ほとんどの場合は、UDPで配送できてしまいますが、 ごくまれに1つのIPアドレスに20以上もの名前がついているような場合もあり、 そのような時にはTCPでの配送となります。

RTシリーズのDNSリカーシブサーバ機能は、UDPによる配送にしか対応していません。 ほとんどの場合はこれで問題ありませんが、ごくまれにレコードが大きくなって、 TCPによる配送に切り替わってしまうと、 それを扱えないためにアドレスが引けないということが起こります。 このような場合は、RTシリーズのDNSリカーシブサーバ機能を使わないように して下さい。

http://www.rtpro.yamaha.co.jp/RT/FAQ/TCPIP/dns-recursive-server.html

RTX1210のDNSリカーシブサーバ機能はおまけ位に考えておいた方が良いかも知れない。

とりあえずはDNSのレコードサイズが大きいのが原因の模様。問題の発端は、DNSにDKIMかSPFのレコードを登録したタイミングか、Ubuntu16にアップグレードしたタイミングのどちらかのような気が。

もうちょっとスッキリしないので、何かわかればまた追記するかも。

Pocket

コメントを残す

メールアドレスが公開されることはありません。