クイックガイド
- FRR のインストール
- BGPd などの有効化
- I/F の設定
はじめに
この記事は前回の続きです。前回はこちら。
BGPやOSPFを触ってみたい! というNW初心者の方には、シミュレーターを使って文字通りガチャガチャやるのをオススメしています。
だってシミュレーターは壊しても間違っても全く問題無し!
BGP 運用をやっていて少しでも間違うと世界に晒されることもあるので、毎回ドキドキです
シミュレーターは 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
とします。
インストール
公式サイトの記載の通り、インストールしていきましょう。
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
セットアップ
sudo vim /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
に変更すると有効化することができます。
結構多くのプロトコルに対応しているんですね!
systemctl enable frr # 自動起動を有効化
sudo systemctl restart frr
sudo systemctl status frr # ステータス確認。「q」で抜ける
Status を確認すると、BGPなどがちゃんと有効化されたようです!
[QDG3Y-BY5TN] bgpd state -> up : connect succeeded
[QDG3Y-BY5TN] ospfd state -> up : connect succeeded
I/F 準備
ここでは、図のような簡単な構成にすることをゴールにします。
インターフェースの設定
このあとのプロトコルを設定するために、インターフェースを上げてアドレスを付与します。
まずは 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
の名前が違う時は、手元の名前に変えてください。
sudo vim /etc/netplan/99-test.yaml
99-test
という部分は適当な名前なので変えても構いません。
新しいファイルなので、下記を記載してください。
network:
ethernets:
enp0s9:
addresses:
- 172.16.0.1/24
lo:
addresses:
- 10.0.0.100/32
version: 2
これで各インターフェースにIPアドレスを設定することができます。
なお、再起動しても維持されます。
netplanは最初のうちは分かりづらいですが、公式ドキュメントのサンプルを眺めておけば、雰囲気は掴めると思います。
他にも設定できるので見てみてください。
終わったら反映して確認します。
sudo chmod 500 /etc/netplan/99-test.yaml
sudo netplan apply # 反映
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台の方も同様にアドレスを変えて設定しておきます。
sudo vim /etc/netplan/99-test.yaml
network:
ethernets:
enp0s9:
addresses:
- 172.16.0.2/24
lo:
addresses:
- 10.0.0.200/32
version: 2
sudo chmod 500 /etc/netplan/99-test.yaml
sudo netplan apply # 反映
設定検証
できたら、Ubuntu1 に戻りpingを送ってみます。
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に正しくアドレスが設定されていることがわかります。
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が正しくやり取りされていることがわかります。
図のようにつながった Ubuntu1 と 2 が正しく通信できることがわかったので、いよいよBGPなどを設定していきます。
もしpingができなかったときは以下を確認してみてください。
- 2台とも IP アドレスが正しく設定されていること
- 2台とも I/F が Up していること
- Virtualbox の設定を確認し、2台とも
- アダプター2 有効にチェックが入っている
-
内部ネットワーク
になっていること - ネットワークの名前の値が Ubuntu1 と 2 で同じであること
転送設定
最後に、フォワーディング設定を有効化しておきます。
sudo vim /etc/sysctl.conf
でファイルを編集します。
以下の2行の冒頭にある # を外せばOKです。
- #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台とも終われば完了です。
次回はこちら: