神奈川県公立高校ネット出願システムのGmail到達性問題、Gmailへの送信を直接SMTP・IPv6で行おうとしていた可能性を考察してみた

# はじめに
神奈川県ネット出願システムのGmailへのメール到達性問題は、さまざまな情報があり、いろいろ推測されています。そんな中8/29[^1],30[^2]と日経の記事が掲載され、こんなことがあったなと思いだしたタイミングで[自分が管理するVPSサーバでこれまで届いていたGmailへのメールがエラー](#自分が管理するサーバでこれまで届いていたgmailへのメールがエラー)になりました。このエラーについて考えていたところ、神奈川県ネット出願システムのGmailへのメール到達性問題で、これまでの推測でおそらく大きく取り上げられていない **「Gmailへの送信を直接SMTP・IPv6で行おうとしていたことが最初の原因の可能性」** に気づき、考察してみました。

[^1]: [システム障害報告書を独自入手、神奈川県教育委員会「Gmail届かない問題」の全貌] https://xtech.nikkei.com/atcl/nxt/column/18/02929/082700001/
[^2]: 詳細判明した神奈川県の高校入試ネット出願トラブル、専門家が指摘する3つの不備 https://xtech.nikkei.com/atcl/nxt/column/18/02929/082800003/index.html

# 考察の結果
現時点では、考察の結果、意図的かそうでないかは不明だが、出願システムのサーバからGmailへの送信を直接SMTP・IPv6で行おうとしていたことが最初の原因の可能性は十分ある。と推測しています。

:::note info
結果、サーバがIPv6対応しておりIPv6でSMTP送信が可能であったため、IPv4のみの対応のメールサーバには送信できたが、IPv6にも対応のGmailだけなにかしらの理由で送信できない状況になった。GmailだけIPv6利用という他のドメインと違う状況がとなり、外部から原因を推測しようにも、困難な状況となった。と推測。
:::

:::note warn
ご指摘・コメント大歓迎です。
:::

# 出願システムのサーバがGmailへの送信を直接SMTP・IPv6で行おうとしていた可能性の考察
- 出願システムのサーバで動作していたMTAはpostfixと推測されており、postfixのデフォルト設定ならば、デュアルスタックのサーバの場合送信時IPv6を優先
- 送信時にローカルのpostfixを利用していたかは不明（ライブラリ等で直接SMTPを行っていた可能性もある）
- Amazon EC2,VPCはIPv4とIPv6 の両方のアドレス設定プロトコルをサポート
- [Gmailのメール受信サーバはIPv4とIPv6両方に対応](#gmailのメール受信サーバはipv4とipv6両方に対応)
- [Gmail以外のほとんどのメール受信サーバはIPv6対応でない](#gmail以外のほとんどのメール受信サーバはipv6対応でない)
- Amazon SESを最初から利用していたかは不明（利用していなかった場合、出願システムのEC2から直接送信で、IPv6を利用した可能性は高い）
- Amazon SESはIPv4のみ対応で、IPv6の対応メールサーバ(Gmail)は出願システムのEC2サーバから直接送信した可能性（そのようにpostfixを設定できるか等は現時点未確認）
- 出願システムのEC2サーバのGmailへの送信時にIPv6のアドレスを使っていたとしても、そのメールを受信できたGmailのメールのヘッダを確認以外で、そのIPv6アドレスを外部から知ることは困難（同様に使用送信プログラムが何かを知ることも困難）
- GmailへのIPv6でのメール送信でのトラブルは、原因はさまざまだが、以前から最近まで割とある
  - https://www.illucit.com/en/allgemein/gmail-and-ipv6
  - https://yeri.be/gmail-google-apps-ipv6/
  - http://tanguy.ortolo.eu/blog/article109/google-ipv6-smtp-restrictions
  - https://blog-y.core-arata.co.jp/2014/02/02/1145/
  - https://www.very-cute.net/wp/191/
  - https://qiita.com/KoriCori/items/ce30aecf38c85c3afc01
  - https://forum.howtoforge.com/threads/ipv6-and-gmail-problems.64675/
  - https://community.mailcow.email/d/3360-messages-not-delivered-to-gmail-over-ipv6
  - https://x.com/umeyon/status/1750333792911491310
- GmailへのSMTP over IPv6で即時送れなかった原因は以下のような点が想定できる
  - IPv6が global IPでないなどで、タイムアウト・キュー保留
  - IPv6の逆引き・正引き不一致/ Forward Confirmed Reverse DNS(FCrDNS)満たさずでブロック
  - SPFにIPv6含まれずでブロック
  - IPレピュテーションによるブロック
- MXの値をIPv4アドレスで記述したのは、ドメイン名を指定してIPv6アドレスで送受信されることを避けたかったことが理由の可能性
- [自分が管理するサーバでこれまで届いていたGmailへのメールがエラー](#自分が管理するサーバでこれまで届いていたgmailへのメールがエラー)

---
以下補足データ

# Gmailのメール受信サーバはIPv4とIPv6両方に対応
```:Gmail
$ dig gmail.com mx +short
20 alt2.gmail-smtp-in.l.google.com.
40 alt4.gmail-smtp-in.l.google.com.
10 alt1.gmail-smtp-in.l.google.com.
30 alt3.gmail-smtp-in.l.google.com.
5 gmail-smtp-in.l.google.com.

$ dig gmail-smtp-in.l.google.com. any +short
2404:6800:4008:c06::1a
2404:6800:4008:c06::1b
64.233.188.27
64.233.188.26

$ dig alt1.gmail-smtp-in.l.google.com. any +short
2607:f8b0:4023:c0b::1a
2607:f8b0:4023:c0b::1b
142.250.141.26
142.250.141.27

(他略）
```


# Gmail以外のほとんどのメール受信サーバはIPv6対応でない
yahoo.co.jpやAmazon SESを含め現在はほとんどのメール受信サーバがIPv4のみ
```:Yahoo
$ dig yahoo.co.jp mx +short
10 mx1.mail.yahoo.co.jp.
10 mx2.mail.yahoo.co.jp.
10 mx5.mail.yahoo.co.jp.
10 mx3.mail.yahoo.co.jp.

$ dig mx1.mail.yahoo.co.jp. any +short
124.83.237.248
202.93.77.241
202.93.77.240
124.83.237.249
```
```:Amazon SES
$ dig feedback-smtp.ap-northeast-1.amazonses.com any +short
18.178.226.103
18.178.46.176
3.115.130.245
```


# 自分が管理するサーバでこれまで届いていたGmailへのメールがエラー
該当のサーバは、レンタルVPSサーバ。IPv4,IPv6 デュアルスタックでSendmailを動作させ、IPv4,IPv6両方の25番ポートで送受信に対応させている。SPF(IPv4,IPv6),DKIM,DMARC設定済み。逆引きもIPv4,IPv6共に同じホスト名でFCrDNS対応で設定済み。
Gmailのメール受信サーバはすべてデュアルスタックのため、該当サーバでGmailへはIPv6で送信していた際にエラー（現在はIPv6での送信を取り止め）

```: /var/log/maillog(一部略)
Sep  7 10:51:33 host sendmail[10654]: 4871pU6f010429: to=<(userA)@gmail.com>, relay=gmail-smtp-in.l.google.com. [IPv6:2404:6800:4008:c01:0:0:0:1a], dsn=2.0.0, stat=Sent ★成功
Sep  7 10:51:33 host sendmail[10654]: 4871pU6f010429: done; delay=00:00:01, ntries=1
Sep  7 10:51:33 host sendmail[10652]: 4871pU6e010429: to=<(userB)@gmail.com>, relay=gmail-smtp-in.l.google.com. [IPv6:2404:6800:4008:c00:0:0:0:1a], dsn=2.0.0, stat=Sent ★成功
Sep  7 10:51:33 host sendmail[10652]: 4871pU6e010429: done; delay=00:00:01, ntries=1
Sep  7 10:51:33 host sendmail[10648]: 4871pU6c010429: to=<(userC)@example.jp>, relay=aspmx.l.google.com. [IPv6:2404:6800:4008:c1b:0:0:0:1a], dsn=2.0.0, stat=Sent ★成功
Sep  7 10:51:33 host sendmail[10648]: 4871pU6c010429: done; delay=00:00:01, ntries=1
Sep  7 10:51:33 host sendmail[10656]: 4871pU6g010429: to=<(userD)@gmail.com>, relay=gmail-smtp-in.l.google.com. [IPv6:2404:6800:4008:c01:0:0:0:1a], dsn=5.0.0, stat=Service unavailable ★エラー
Sep  7 10:51:33 host sendmail[10656]: 4871pU6g010429: 4871pX4p010656: DSN: Service unavailable
```

```: エラーメール
   ----- Transcript of session follows -----
... while talking to gmail-smtp-in.l.google.com.:
>>> DATA
<<< 550-5.7.1 [2001:2e8:XXX:X:X:X:X:X] The IP you're using to send mail is not
<<< 550-5.7.1 authorized to send email directly to our servers. Please use the SMTP
<<< 550-5.7.1 relay at your service provider instead. For more information, go to
<<< 550 5.7.1  https://support.google.com/mail/?p=NotAuthorizedError 98e67ed59e1d1-2dadc1029a2si2719855a91.132 - gsmtp
554 5.0.0 Service unavailable
Reporting-MTA: dns; (host)
Received-From-MTA: DNS; (host)
Arrival-Date: Sat, 7 Sep 2024 10:51:32 +0900

Final-Recipient: RFC822; (userD)@gmail.com
Action: failed
Status: 5.7.1
Remote-MTA: DNS; gmail-smtp-in.l.google.com
Diagnostic-Code: SMTP; 550-5.7.1 [2001:2e8:68c:0:2:1:0:4] The IP you're using to send mail is not
Last-Attempt-Date: Sat, 7 Sep 2024 10:51:33 +0900
```

- ログだけではエラー詳細がわからず、エラーメールの内容をみないとエラー詳細がわからない状況
  - ただ、エラー詳細を見ても、対処法は不明
- Google Postmaster Tools では該当日付（前後含む）は以下の通り
  - 認証(SPF,DKIM,DMARC)：成功率100%
  - IP レピュテーション：IPv6が表示されない
  - 配信エラー：0%
  - 迷惑メール フィードバック ループ：0%
- 該当ドメインは、Gmailに5000通以上送信している判定のはず
- 引き続きIPv4では届くがIPv6はエラーとなる状況