自作で仮想ネットワークソフトウェアを作りたかった…!

僕は前までZeroTierを使ってたんですけど、使いづらいし制限は多いし!
じゃあ自分で作ろうと思ったんです
まあPC側は簡単なんですよ
でも使うもテストもスマホだから、こういう奴って
んでスマホのアプリを作るとなるとこの前のJava書けないからAndroidフレームワーク作るみたいな話に繋がるわけですが
なにせAIハーネスをまともに使える課金を今はしていないんです
だからといってそのままフレームワークのソースを全部出してって言ったらシミュレーターのhtml出してきたり
ちゃんとエミュレーターじゃなくて実ソースを書けって言ったのにこれですよ
色々付け加えたらソース出してくれましたが、直感で色々不足してるなって思ったんです
これが失敗したということはAndroidアプリの制作が自分の力では不可能になることを意味します。
一応PC側ではP2Pの常時接続規則は構築したし、P2Pやらネットワークを作るソフトのバインディングライブラリはあるし、本当にできなくはないわけ
今すぐにAndroid側も作れるけど、それを使うためのスマホ版は作れないし、何よりこのシステムは1:多のプロジェクトなわけで、PC単体のテストは無理なんです
なので、本当に後少しってところ!
マジでね
本当に…
AndroidがJavaなんか使うからー

えまじか。つくってんのかー
Windows版だけでもあれば…

あ、構築されてるのは構想ですよ
制作にあり得なくはないけど技術力的な関門がある

ohhh(ダメージくらったConbi Fan)

プロジェクト「仮想ネットワークシステム」の構想

本書はこのプロジェクトの技術的詳細の構想を表現するものである。
このプロジェクトを達成するためには、いくつかコンポーネントが必要である

  • 複数ピアによる常時接続
  • ネットワークシステムのルーティング
  • ネットワークのクライアント

1. 複数ピアによる常時接続

ピア同士はP2Pによって接続されており、中央サーバーが存在しません。
そのため、ネットワークの変更を検出し、変更された場合にそのスマホに登録されたすべてのピアに再度自分のIPを取得できます。
あるいは送信先と送信元どちらも変更されて全く情報か取れない場合、同一Wi-Fiにいる、あるいはBluetoothを用いて通信に必要なデータを取得します。
また、接続の開始は最初のピアの登録時に時刻が設定されており、その時刻に双方がUDPホールパンチを行います。
また、設定の開始後に次の接続の時刻を設定します。(接続は基本常に確立されるもの)
そして、接続中にその時刻を超えた場合、新たな時刻を送信し合います。
あるいは、接続の時刻になったときに相手がオフラインのとき、接続は確立されず、次の時刻も設定されていません。
この時、同じようにBLEやWi-Fiがある場合はそれで時刻を確認し合いますが、それらの圏内にいない場合はDHTを用いて時刻を共有します。DHTに登録されるデータは相手の公開鍵で暗号化されるため、相手以外にはわかりません。
そしてその情報は追加で自分の秘密鍵で署名された署名が含まれています。
プロトコルはQUICで、双方の確認にmTLSを使用します。
そして、直接そのピアに接続できない場合、代替ピアというものを使用します。
代替ピアは代わりに接続し、BluethoothやWi-Fi、あるいはP2Pで接続を試みますが、基本的にこのシステムのピアは分散した独立ネットワークが複数ある仕組みなのであまり意味はない可能性もあります(その場合の暗号化はTLSでE2Eな暗号化です。)

2. ネットワークシステムのルーティング

パケットを適切に必要なピアへ転送するために、各ピアはIPからそのピアへのテーブルを持っています。
クライアントによってソケットが開かれた場合、このテーブルを用いてIPをピアIDに変換し、コンポーネント1の常時接続で相手に適切な情報を送信して別のストリームを開始します。