Open ddddddO opened 1 month ago
いやどうやって実装進めよう ホストとゲストのコンテナで packemon のディレクトリマウントすればいけるか あとeBPF プログラムがコンテナで実行できるかどうか
以下は、ホスト側 WSL2 の ubuntu で実行
$ tmux (セッションは縦に分割した方がいいかも)
$ docker run -it -v /home/ddddddo/github.com/ddddddO:/home/ddddddO --privileged sphalerite1313/frr /bin/bash
$ curl -OL https://go.dev/dl/go1.23.2.linux-amd64.tar.gz
$ rm -rf /usr/local/go && tar -C /usr/local -xzf go1.23.2.linux-amd64.tar.gz
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
$ source ~/.bashrc
$ cd /home/ddddddO/packemon
$ go run cmd/packemon/*.go # packemon の Monitor 起動
# 別ターミナル(セッション)で
$ docker ps
$ docker exec -it <起動中の上のコンテナID> /bin/bash
$ nslookup github.com # 上のコンテナの packemon(Monitor) に DNS のログが表示される
$ cd /home/ddddddO/packemon/
$ go run cmd/packemon/*.go --send # packemon の Generator 起動で、適当なパケットとばすと、上のコンテナの Monitor にログ出る。なので、Monitor・Generator の実行は大丈夫そう
上の sphalerite1313/frr で、ホスト側で編集した packemon のコードが反映され実行できたので、すぐに挙動確認できるので、開発は楽に進められそう
BGP の設定 以下コマンドを、sphalerite1313/frr のコンテナ2台立ち上げて実施する(https://www.infraexpert.com/study/bgpz06.html の「BGPの設定例」を参考)
$ tcpdump -i eth0 -s 0 -w /home/ddddddO/packemon/cmd/debugging/bgp/bgp.pcap port 179
$ ip address # eth0 の ipアドレスを控えて、対向の neighbor コマンドで指定
$ sed -i.org 's/bgpd=no/bgpd=yes/' /etc/frr/daemons
$ /etc/init.d/frr start &
$ vtysh
# conf t
(config)# router bgp 1 # 対向は、「router bgp 2」とかに変えて実行
(config-router)# neighbor 172.17.0.3 remote-as 2
(config-router)# do show ip bgp nei 172.17.0.3 # 以下実行しなくても、「BGP state = Established」になっていた
(config-router)# neighbor 172.17.0.3 ebgp-multihop 255
$ ip address # eth0 の ipアドレスを控えて、対向の neighbor コマンドで指定
$ sed -i.org 's/bgpd=no/bgpd=yes/' /etc/frr/daemons
$ /etc/init.d/frr start &
$ vtysh
# conf t
(config)# router bgp 2
(config-router)# neighbor 172.17.0.2 remote-as 1
(config-router)# do show ip bgp nei 172.17.0.2 # 以下実行しなくても、「BGP state = Established」になっていた
(config-router)# neighbor 172.17.0.2 ebgp-multihop 255
以下はローカルではなくインターネットの。メモ程度のもの IPアドレスからAS番号検索: https://develop.tools/ip-asn/ AS番号リスト: https://www.nic.ad.jp/ja/ip/as-numbers.txt
BGP 試せる環境を tinet で構築できるようにするメモ
また、Docker DesktopのWSL Integrationが有効化されたインスタンスには対応していません。無効にしたインスタンスで実行するようにしてください。
とのこと。ref: https://www.sbcr.jp/support/4815617814/ WSL2 の ubuntu の環境は、docker 落としてきたもの使うようにする
docker install
$ curl -fsSL https://get.docker.com | sh
BGP なコマンド以下の記事に載ってるのが、デバッグに使えそう https://zenn.dev/microsoft/articles/azure-route-server-frrouting
Monitor は、各ルーティングプロトコルのパースができればいい ただ、Generator をどうするか?ルーティングプロトコルは大体1パケットと言うよりか、一連のやり取りができた方が面白そう(BGP なら、open/keepalive/updateのフロー)
以下2パターン出来る感じにしたい