NAT を natd から ipfw nat に変えたシステムにおいて、ある日、ある特定の宛先にメールが送信できない事象が発生。STARTTLS 後にエラーが出ています。
XXX XX XX:XX:XX mail sm-mta[89339]: STARTTLS=client, relay=xxxx.xxxx.xxxx.xxxx.xxxx., version=TLSv1.2, verify=FAIL, cipher=ECDHE-RSA-AES256-GCM-SHA384, bits=256/256 XXX XX XX:XX:XX mail sm-mta[89339]: STARTTLS: write error=syscall error (-1), errno=13, get_error=error:00000000:lib(0):func(0):reason(0), retry=99, ssl_err=5 XXX XX XX:XX:XX mail sm-mta[89339]: 32D6W9Qv073007: SYSERR(root): timeout writing message to xxxx.xxxx.xxxx.xxxx.xxxx.: Permission denied Mar XX XX:XX:XX mail sm-mta[89339]: 32D6W9Qv073007: to=<xxxxxx@xxxx.xxxx>, delay=00:00:06, xdelay=00:00:03, mailer=esmtp, pri=4200197, relay=xxxx.xxxx.xxxx.xxxx.xxxx. [XXX.XXX.XXX.XXX], dsn=4.0.0, stat=Deferred
しかも、Permission denied とは。
どうやらipfwがパケットをドロップしている模様。しかし、送信できる宛先がほとんどで、ipfw ルールも間違っていないはず。
そこで、ipfw の man を見てみると以下の記述が…
IPFW(8) man page
Due to the architecture of libalias(3), ipfw nat is not compatible with the TCP segmentation offloading (TSO). Thus, to reliably nat your network traffic, please disable TSO on your NICs using ifconfig(8).
確かに ipfw nat を使っているので TSO4 を無効にしたところ、パケットドロップが解消されました。
ifconfig vtnet0 -tso4
マニュアルは隅々まで読まないといけませんね…