Open vSwitch と Docker でネットワークの勉強 #
マスタリングTCP/IPを一通り読んだので,実際にIPv4ネットワークがどのように動作しているのか手を動かしながら確認したいと思いました. 本記事で作成するネットワークでは,仮想ルータ4台に手作業でルーティングテーブルを設定することで,それぞれに対してパケットを送受信できることを目指しました. 今回はルーティングテーブルの手動設定を初めて体験したいという軽い気持ちで始めたため,ルータ+L2スイッチの実機を用意することは考えずに,仮想環境で実行します.
環境 #
- Apple M1 Mac(ホストマシン)
- UTM: VM(仮想マシン)を立ち上げるソフトウェア
- Linux上で動作検証したかったため
- Ubuntu 18.04 Server
- Docker
CentOS7 on docker
のルーティングテーブルを用いてルーティングを行う
- Open vSwitch
- オープンソースの仮想スイッチソフトウェア
ネットワーク構成図 #
今回作成したいネットワーク構成図
静的ルーティングの設定 #
Dockerコンテナ内でルーティングテーブルの設定を行う.
ip route add [ネットワーク部の指定] via [転送先IPの指定] dev [デバイス名]
docker exec router1 ip route add 10.0.3.0/24 via 10.0.1.2 dev eth0 # router1->router4(10.0.3.2)
docker exec router2 ip route add 10.0.4.0/24 via 10.0.3.2 dev eth1 # router2->router3(10.0.4.1)
docker exec router3 ip route add 10.0.1.0/24 via 10.0.2.1 dev eth0 # router3->router2(10.0.1.2)
docker exec router4 ip route add 10.0.2.0/24 via 10.0.4.1 dev eth1 # router4->router1(10.0.2.1)
docker exec router1 ip route add 10.0.4.0/24 via 10.0.2.2 dev eth1
docker exec router2 ip route add 10.0.2.0/24 via 10.0.1.1 dev eth0
docker exec router3 ip route add 10.0.3.0/24 via 10.0.4.2 dev eth1
docker exec router4 ip route add 10.0.1.0/24 via 10.0.3.1 dev eth0
Githubリポジトリ #
OVSのブリッジ作成スクリプトとDockerfile
https://github.com/takashimakazuki/ovs-network
詰まった点 #
- vyOSを使いたかったがARMマシンに対応したDockerコンテナの作成方法がわからなかったため断念→CentOSのコンテナを利用
- CentOSをルータとして動作させるために
ip_forward
機能を有効にする必要があったdocker run --sysctl net.ipv4.ip_forward=1
- router1とrouter4の間でpingによる疎通確認をするためには,ICMPパケットの往路 (router1->router4) と復路 (router4->router1) の両方のルーティングルールを設定する必要がある.これを片方だけルールを設定して疎通確認をしようとしたため,pingが通らずに頭を抱えていた.