シンプルなネットワークブリッジをRubyで作ってみた。
動作確認した環境
- Raspberry Pi 4 Model B+
- Raspberry Pi OS Lite, Release date: December 2nd 2020
- Ruby 2.7
使い方
以下のように記述して、sudo で実行
require_relative "lib/simple_bridge" br = SimpleBridge::Bridge.new("eth0", "eth1") br.run
できること
- 2つのネットワークインターフェース間でパケットを転送する
できないこと
- MACアドレスの学習
参考にした実装
Ruby Raw Socket on Linux (ruby 1.9.3, linux x86_64) · GitHub
感想
Rubyで低レベルのプログラミングはなかなかサンプルも少ないし、難しい…。 PacketFuのようなパケットキャプチャツールの実装も覗いてみたが、ネットワークデバイスを操作する部分はCで実装していた。 多分、その方が色々細かい部分は実装しやすいのだと思う。 とはいえ、Rubyの書きやすさは捨てがたい&Rubyで低レイヤプログラミングしてみたらどんなもんだろうという試みでもあったので、とりあえず簡易実装までは完遂できてよかった。