IPFW+NATではまった話

投稿者: | 2023年3月13日

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

マニュアルは隅々まで読まないといけませんね…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です