originがAサーバの投稿を、Bサーバの人がリノートして、それを見てCサーバの人がリノートした場合、
1. Cサーバ→Bサーバの通信は発生する?
2. Cサーバ→Aサーバの通信は発生する?
3. Bサーバ→Aサーバの通信は発生する?
4. AサーバがCサーバをブロックしていた場合、AサーバはCサーバの人がリノートしたことを知ることができる?

@kussy_tessy 署名付きリクエスト(Fetch)しか受け付けない設定のサーバと、自由にFetchできるサーバで異なります。

BサーバからAnnounceアクティビティがフォロワーおよび対象の投稿のAサーバに配送される

Aサーバは、自分のサーバに対象投稿があるので、Announceアクティビティをリノートやブーストとして解釈し、自分のサーバの投稿主にリノート・ブーストされたよって通知します。

Cサーバにフォロワーがいた場合、もともと対象の投稿を受け取っていれば、Announceアクティビティをリノートやブーストとして解釈するだけです。

もともと対象の投稿を受け取っていなかった場合、Announceアクティビティで指し示されている対象投稿をFetchする処理が入り、これに成功すればリノートやブーストとして解釈されます。

Fetchの際、Mastodonでは、どのアクターがリクエストしているのか署名します。

AサーバがCサーバをブロックしている場合、署名つきのリクエストであればブロック対象サーバがリクエストしてきていることを知ることができるので、これを拒否できますが、実際にその判定を行うかどうかはサーバの設定によります。

MastodonではAuthorized Fetchです。

@kussy_tessy ほんで、署名を要求されていない場合はリノート・ブーストできます。

このとき、Cサーバから対象の投稿のサーバであるAサーバへAnnounceアクティビティが飛びます。

AサーバはCサーバをブロックしていれば、これを受け付けずに捨てるハズです。そうすると、Aサーバの対象の投稿主は、リノート・ブーストの通知を受け取ることができない、ということになるかと思います。

ブロックが期待通りの効果を発揮するためには、Aサーバが署名付きリクエストを必須としてCサーバからのリクエストを拒否する必要があります。

しかし、署名付きを必須とすると、署名付きリクエストを行わないサーバから何もFetchできなくなったり、連合リレーに参加できなくなるので、通常は必須に設定されていません。


Aの人「a」
Bの人「aをブーストする」
B鯖→各鯖「aをannounceしたで」
A鯖「分かった」
C鯖「aってどれ?」
→知ってたわ
 C鯖→A鯖「aをannounceしたで」
→なにそれ? fetchするわ
 C鯖→A鯖「aください」
ってやりとりが発生するって理解で合ってますか?

で、このとき署名付きを必須とすると、
C鯖→A鯖「aください」
A鯖「あんた誰?知らん」
となりブースト失敗。
署名付きでも、A鯖がC鯖をブロックしていた場合
C鯖「C鯖です。aをください」
A鯖「嫌だ」
となりブースト失敗になるってことですか?

フォロー

@kussy_tessy たぶんそれであってる。

あとは、ブロックされているC鯖の立場で、署名つけたりつけなかったりのリクエストをA鯖に実際に投げてみるとわかるかと思います。

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。