0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】FRRで OSPFやBGPのシミュレーションをするための準備

Last updated at Posted at 2024-12-12

クイックガイド

  1. FRR のインストール
  2. BGPd などの有効化
  3. I/F の設定

はじめに

この記事は前回の続きです。前回はこちら。

BGPやOSPFを触ってみたい! というNW初心者の方には、シミュレーターを使って文字通りガチャガチャやるのをオススメしています。

だってシミュレーターは壊しても間違っても全く問題無し!
BGP 運用をやっていて少しでも間違うと世界に晒されることもあるので、毎回ドキドキです:innocent:

シミュレーターは GNS3 が有名ですが、今回は FRR を使いたいと思います!

FRRとは?

FRRouting とは、Linuxなどで稼働するルーティングプロトコルスイート(≒セット)であり、オープンソースで提供されているものです。
要するに、OSPF とか BGP がフリーで手っ取り早く試せます。

同じくオープンソースなものとして Vyos があります。
個人的には Vyos もオススメなのですが、残念ながら Vyos は arm アーキテクチャ、つまり Apple silicon な M1, M2, M3,... チップでは動かないのです...1
(頑張れば動くらしい)

そこでApple Silicon な MacBook に FRR を導入し、OSPFやBGP を動かすまでをやってみたいと思います。今回はその準備です。

Virtual Box のインストール 〜 Ubuntu VMを複数立ち上げる

長くなりすぎたので、前記事に書いています。
よかったらどうぞ。

FRR セットアップ

作成したUbuntu(2台)にSSHで接続しておきます。
1台目はUbuntu1とします。

インストール

公式サイトの記載の通り、インストールしていきましょう。

Ubuntu1
curl -s https://deb.frrouting.org/frr/keys.gpg | sudo tee /usr/share/keyrings/frrouting.gpg > /dev/null
FRRVER="frr-stable"
echo deb '[signed-by=/usr/share/keyrings/frrouting.gpg]' https://deb.frrouting.org/frr \
     $(lsb_release -s -c) $FRRVER | sudo tee -a /etc/apt/sources.list.d/frr.list

sudo apt update && sudo apt install -y frr frr-pythontools

セットアップ

Ubuntu1
sudo vim /etc/frr/daemons

を実行し、有効化するプロトコルを指定します。

/etc/frr/daemons
bgpd=yes  # bgp を有効化するならyesに
ospfd=yes  # ospf を有効化するならyesに
ospf6d=no
ripd=no
ripngd=no
isisd=no
pimd=no
pim6d=no
ldpd=no
nhrpd=no
eigrpd=no
babeld=no
sharpd=no
pbrd=no
bfdd=no
fabricd=no
vrrpd=no
pathd=no

vtysh_enable=yes  # yes になっていることを確認
zebra_options="  -A 127.0.0.1 -s 90000000"
mgmtd_options="  -A 127.0.0.1"
bgpd_options="   -A 127.0.0.1"
ospfd_options="  -A 127.0.0.1"

コメントの通り、no -> yes に変更すると有効化することができます。
結構多くのプロトコルに対応しているんですね!

Ubuntu1 反映
systemctl enable frr # 自動起動を有効化
sudo systemctl restart frr
sudo systemctl status frr  # ステータス確認。「q」で抜ける

Status を確認すると、BGPなどがちゃんと有効化されたようです!

Ubuntu1(status ログ)
[QDG3Y-BY5TN] bgpd state -> up : connect succeeded
[QDG3Y-BY5TN] ospfd state -> up : connect succeeded

I/F 準備

image001

ここでは、図のような簡単な構成にすることをゴールにします。

インターフェースの設定

このあとのプロトコルを設定するために、インターフェースを上げてアドレスを付与します。
まずは ip addr コマンドを実行してインターフェースを確認します。

ip addr(一部省略)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo

2: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:**:**:*** brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic enp0s8
   
3: enp0s9: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 08:00:27:**:**:** brd ff:ff:ff:ff:ff:ff

ここでは、

  • lo はループバックインターフェース
  • enp0s8 は前回 Virtualbox で設定したNAT
  • enp0s9 は前回 Virtualbox で設定した内部ネットワーク

です。NATは apt update などインターネットに出るために利用しています。
内部ネットワークは、ゲストVM同士だけが通信できる特別なネットワークです。ホストとは隔絶されています。

ループバックと内部ネットワークのインターフェース(I/F)にアドレスを設定し、上げます。
netplan を使います。

以下、enp0s9の名前が違う時は、手元の名前に変えてください。

ubuntu1
sudo vim /etc/netplan/99-test.yaml

99-testという部分は適当な名前なので変えても構いません。
新しいファイルなので、下記を記載してください。

/etc/netplan/99-test.yaml
network:
  ethernets:
    enp0s9:
      addresses:
        - 172.16.0.1/24
    lo:
      addresses:
        - 10.0.0.100/32
  version: 2

これで各インターフェースにIPアドレスを設定することができます。
なお、再起動しても維持されます。

netplanは最初のうちは分かりづらいですが、公式ドキュメントのサンプルを眺めておけば、雰囲気は掴めると思います。
他にも設定できるので見てみてください。

終わったら反映して確認します。

ubuntu1
sudo chmod 500 /etc/netplan/99-test.yaml
sudo netplan apply  # 反映
ip addr(一部省略)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
    inet 10.0.0.100/32 scope global lo
  
2: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic enp0s8

3: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 172.16.0.1/24 scope global enp0s9

アドレスがついて、State UP になっていることがわかります。
もう1台の方も同様にアドレスを変えて設定しておきます。

ubuntu2
sudo vim /etc/netplan/99-test.yaml
/etc/netplan/99-test.yaml
network:
  ethernets:
    enp0s9:
      addresses:
        - 172.16.0.2/24
    lo:
      addresses:
        - 10.0.0.200/32
  version: 2
ubuntu2
sudo chmod 500 /etc/netplan/99-test.yaml
sudo netplan apply  # 反映

設定検証

できたら、Ubuntu1 に戻りpingを送ってみます。

ubuntu1
ping 172.16.0.1 # 自分自身

PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=0.105 ms
^C

↑ ここでは自分のI/Fに正しくアドレスが設定されていることがわかります。

ubuntu1
ping 172.16.0.2 # ubuntu2あて
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=64 time=3.44 ms
64 bytes from 172.16.0.2: icmp_seq=2 ttl=64 time=1.13 ms
^C

↑ ここではUbuntu1 -> Ubuntu2 へpingが正しくやり取りされていることがわかります。

image001

図のようにつながった Ubuntu1 と 2 が正しく通信できることがわかったので、いよいよBGPなどを設定していきます。

もしpingができなかったときは以下を確認してみてください。

  1. 2台とも IP アドレスが正しく設定されていること
  2. 2台とも I/F が Up していること
  3. Virtualbox の設定を確認し、2台とも
    1. アダプター2 有効にチェックが入っている
    2. 内部ネットワークになっていること
    3. ネットワークの名前の値が Ubuntu1 と 2 で同じであること

転送設定

最後に、フォワーディング設定を有効化しておきます。
sudo vim /etc/sysctl.conf でファイルを編集します。

以下の2行の冒頭にある # を外せばOKです。

/etc/sysctl.conf
- #net.ipv4.ip_forward=1
- #net.ipv6.conf.all.forwarding=1
+ net.ipv4.ip_forward=1
+ net.ipv6.conf.all.forwarding=1

完了したら、下記を実行して反映します。

sudo sysctl -p

2台とも終われば完了です。

次回はこちら:

  1. https://support.vyos.io/support/solutions/articles/103000096284-platform-support

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?