XMPPの新しい生活。 ブロックできないメッセンジャーを作ります







P2Pメッセンジャーを企業から独立させるという考え方は新しいものではありませんが、そのための新しいプロトコルとクライアントアプリケーションの開発は、非常に費用と時間がかかるプロセスです。 しかし、すべてがすでに考え抜かれ、長い間洗い流されてきた古き良きXMPPを使用するとどうなるでしょうか?







しかし、これは本当のピアツーピアではない、とあなたは言う、XMPPはそれ自身のサーバーとドメインが動作する必要がある。 これはそうですが、ローカルホストでサーバーを起動し、I2P仮想ネットワークの隠しサービスを使用して他のユーザーのサーバーと通信できます。 I2Pを使用すると、ホスティングでドメインの費用を支払う必要がなくなり、 犯罪のオンライン監視から通信を保護できます







したがって、以下を取得します。









実装に進みましょう...







I2Pをインストールしてサーバートンネルを作成する



このガイドでは、軽量C ++ i2pdクライアントをI2Pルーターとして使用します。 インストール手順はドキュメントに記載されています







インストール後、サーバーI2Pトンネルを作成します。これは、XMPPサーバーが世界中で利用できる仮想アドレスです。 tunnels.confファイル 、次の行を追加します。







[prosody-s2s] type=server host=127.0.0.1 port=5269 inport=5269 keys=prosody.dat [prosody-c2s] type=server host=127.0.0.1 port=5222 inport=5222 keys=prosody.dat
      
      





ローカルホストでのみ使用する場合は、prosody-c2sセクションを省略できます。 i2pdを再起動して設定を適用します。 I2P tunnels



ページのWebコンソールhttp://127.0.0.1:7070/で、作成されたトンネルのI2Pアドレスを探しています。













ログを掘り下げることで、新しいトンネルのb32アドレスを見つけることもできます。







 grep "New private keys file" /var/log/i2pd/i2pd.log | grep -Eo "([a-z0-9]+).b32.i2p" | tail -n1
      
      





このxxx.b32.i2pアドレスを保存します。これはXMPPサーバーのドメインになります。







XMPPサーバーをインストールして構成する



XMPPサーバーとして韻律を使用します。これは最も軽量で、I2Pを介して作業するための既製のモジュールがあります。 インストールは公式ドキュメントに記載されています ; Ubuntuでは、 apt install prosody



は基本的に行われます。







mod_darknet



を機能させるには、lua bit32ライブラリmod_darknet



必要です。 luaバージョンが5.2未満の場合(ほとんどの場合)、 apt install lua-bit32



を実行します。







mod_darknet



モジュールをインストールします。 韻律は、Socks5 i2pdサーバーを介して発信接続を行う必要があります。 このファイルをprosodyモジュールディレクトリ、通常は/usr/lib/prosody/modules



ダウンロードします







次に、config /etc/prosody/prosody.cfg.luaを編集します。 xxx.b32.i2p



を自分のアドレスに置き換えます。







 interfaces = { "127.0.0.1" }; admins = { "admin@xxx.b32.i2p" }; modules_enabled = { "roster"; "saslauth"; "tls"; "dialback"; "disco"; "posix"; "private"; "vcard"; "ping"; "register"; "admin_adhoc"; "darknet"; }; modules_disabled = {}; allow_registration = false; darknet_only = true; c2s_require_encryption = true; s2s_secure_auth = false; authentication = "internal_plain"; -- On Debian/Ubuntu daemonize = true; pidfile = "/var/run/prosody/prosody.pid"; log = { error = "/var/log/prosody/prosody.err"; "*syslog"; } certificates = "certs"; VirtualHost "xxx.b32.i2p"; ssl = { key = "/etc/prosody/certs/xxx.b32.i2p.key"; certificate = "/etc/prosody/certs/xxx.b32.i2p.crt"; }
      
      





韻律を設定する最後の手順は、暗号化証明書を生成することです。 nixでは、次のように行われます。







 openssl genrsa -out /etc/prosody/certs/xxx.b32.i2p.key 2048 openssl req -new -x509 -key /etc/prosody/certs/xxx.b32.i2p.key -out /etc/prosody/certs/xxx.b32.i2p.crt -days 3650 chown root:prosody /etc/prosody/certs/*.b32.i2p.{key,crt} chmod 640 /etc/prosody/certs/*.b32.i2p.{key,crt}
      
      





prosodyサーバーを再起動して設定を適用します。







ここで少し余談が必要です。 I2Pネットワークでは、すべての接続はエンドツーエンド暗号化で暗号化されます。ここでは、追加の暗号化は不要であると思われます。 しかし、実際には、プレーンテキストを使用するようにすべてのプログラムを構成しようとするよりも、キーを生成する方が簡単であることがわかりました。 あなたは試すことができますが、私はあなたに警告しました。







アカウントの作成とクライアントの接続



管理者アカウントを追加します。







 prosodyctl adduser admin@xxx.b32.i2p
      
      





次に、XMPPクライアント(たとえば、 Pidgin )を構成します。













ローカルホストに接続する場合、クライアント設定でサーバー127.0.0.1ポート5222への接続を示します。













I2P経由でサーバーにリモートで接続する場合、Socks5プロキシ設定で127.0.0.1:4447を指定します。













すべてが正しく行われた場合、他のユーザーをI2Pフェデレーションに追加して対応できます。 I2P内のサーバーに対応するように、通常のインターネット上の既存のサーバーを構成することもできます。 これを行うには、他のすべてのユーザーが自分の構成にドメインの韻律マッピングを追加する必要があります。 例えば、これは私がi2p.rocks



サーバーと通信するためにi2p.rocks



方法です:







 darknet_map = { ["i2p.rocks"] = "ynkz7ebfkllljitiodcq52pa7fgqziomz4wa7tv4qiqldghpx4uq.b32.i2p"; ["muc.i2p.rocks"] = "ynkz7ebfkllljitiodcq52pa7fgqziomz4wa7tv4qiqldghpx4uq.b32.i2p"; }
      
      





それだけです。 ハッピーチャット!








All Articles