Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ルーティングプロトコルを実装したい #68

Open
ddddddO opened this issue Oct 13, 2024 · 5 comments
Open

ルーティングプロトコルを実装したい #68

ddddddO opened this issue Oct 13, 2024 · 5 comments

Comments

@ddddddO
Copy link
Owner

ddddddO commented Oct 13, 2024

@ddddddO
Copy link
Owner Author

ddddddO commented Oct 13, 2024

いやどうやって実装進めよう
ホストとゲストのコンテナで 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の設定例」を参考)

  • 立ち上げた直後、どちらかのコンテナに入って、以下を実行してパケットをキャプチャしておく。後で Wireshark で見る用。
$ tcpdump -i eth0 -s 0 -w /home/ddddddO/packemon/cmd/debugging/bgp/bgp.pcap port 179

BGP ルータA(コンテナ)

$ 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

BGP ルータB(コンテナ)

$ 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

@ddddddO
Copy link
Owner Author

ddddddO commented Oct 13, 2024

@ddddddO
Copy link
Owner Author

ddddddO commented Oct 17, 2024

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

@ddddddO
Copy link
Owner Author

ddddddO commented Oct 17, 2024

BGP なコマンド以下の記事に載ってるのが、デバッグに使えそう
https://zenn.dev/microsoft/articles/azure-route-server-frrouting

@ddddddO
Copy link
Owner Author

ddddddO commented Oct 19, 2024

Monitor は、各ルーティングプロトコルのパースができればいい
ただ、Generator をどうするか?ルーティングプロトコルは大体1パケットと言うよりか、一連のやり取りができた方が面白そう(BGP なら、open/keepalive/updateのフロー)

以下2パターン出来る感じにしたい

  • ルーティングプロトコルの各種類で単発でパケット送信できる
  • ルーティングプロトコルの一連のやり取りができる

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant