🎉

Open vSwitchとVyosでオンプレで良くある環境の構築

2023/10/22に公開

前回に引き続き、Open vSwitchとVyosのお話です。
前回よりもう少し、面白みのある環境を作りたくて、ネットで調べながら作りました。
何年振りかぐらいにNATの設定もして、楽しかったです。

前提

  • 環境は前回同様OCIの無料インスタンス
  • 事前にOpen vSwitchとVyosのインストールは設定済み

構成図

めちゃくちゃ見づらいですけど、vyos1の下にvswitchが2台ぶら下がっており、それぞれのvswitch配下に1台づつcentosのサーバがくっついてる感じです。

|Internet|-->|vyos1|
          |-->|vswitch1| (192.168.10.0/24)
                        |->|centos1|
          |-->|vswitch2| (192.168.10.0/24)
                        |->|centos2|

スイッチを2台作成

sudo ovs-vsctl add-br vswitch1
sudo ovs-vsctl add-br vswitch2

ルータを作成

sudo docker run -d --name vyos1 --privileged -v /lib/modules:/lib/modules 2stacks/vyos:1.2.0-rc11 /sbin/init

ルータとスイッチを繋げる

ルータのI/FにIPアドレスも設定しておく

$ sudo ovs-docker add-port vswitch1 eth1 vyos1 --ipaddress=192.168.10.1/24
$ sudo ovs-docker add-port vswitch2 eth2 vyos1 --ipaddress=192.168.20.1/24

centosサーバの作成

$ sudo docker run -d --net=none --privileged --name centos1 centos /sbin/init
$ sudo docker run -d --net=none --privileged --name centos2 centos /sbin/init

centosサーバにIPアドレスを設定

$ sudo ovs-docker add-port vswitch1 eth0 centos1 --ipaddress=192.168.10.2/24
$ sudo ovs-docker add-port vswitch2 eth0 centos2 --ipaddress=192.168.20.2/24

centosサーバにデフォルトゲートウェイを設定

$ sudo docker exec -it centos1 ip route add default via 192.168.10.1
$ sudo docker exec -it centos2 ip route add default via 192.168.20.1

この状態であれば、centos間でPingの疎通はOKだが、インターネットへでることができない。

vyos1にてNATの設定を行う

$ sudo docker exec -it vyos1 /bin/vbash
vbash-4.1# su - minion
minion@b6e50a404a6b:~$
minion@b6e50a404a6b:~$ configure
[edit]
minion@b6e50a404a6b# set interfaces loopback lo address 1.1.1.1/32
[edit]
minion@b6e50a404a6b# set nat source rule 1 translation address masquerade
[edit]
minion@b6e50a404a6b# set nat source rule 1 source address 192.168.0.0/16
[edit]
minion@b6e50a404a6b# set nat source rule 1 outbound-interface eth0
[edit]
minion@b6e50a404a6b# set nat source rule 1 description 'nat global 1'
[edit]
minion@b6e50a404a6b# commit
[edit]
minion@b6e50a404a6b# save
Saving configuration to '/config/config.boot'...
Done
[edit]
minion@b6e50a404a6b# exit
exit
minion@b6e50a404a6b:~$ exit
logout
vbash-4.1# exit
exit

centosから8.8.8.8へPingを疎通ができることを確認

$ sudo docker exec -it centos2 ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=2.31 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.308/2.308/2.308/0.000 ms
$

centosのパッケージ更新とVimのインストール

$ sudo docker ps
CONTAINER ID   IMAGE                     COMMAND        CREATED         STATUS         PORTS     NAMES
5400eb8f3211   centos                    "/sbin/init"   5 minutes ago   Up 5 minutes             centos2
db5ca48165f6   centos                    "/sbin/init"   6 minutes ago   Up 6 minutes             centos1
b6e50a404a6b   2stacks/vyos:1.2.0-rc11   "/sbin/init"   7 minutes ago   Up 7 minutes             vyos1
$ sudo docker exec -it db5ca48165f6 bash
[root@db5ca48165f6 /]# sed -i -e 's/^mirrorlist/#mirrorlist/g' -e 's/^#baseurl=http:\/\/mirror/baseurl=http:\/\/vault/g' /etc/yum.repos.d/CentOS-*repo
[root@db5ca48165f6 /]# dnf  update -y
[root@db5ca48165f6 /]# dnf install vim -y
[root@db5ca48165f6 /]# dnf install which -y
Last metadata expiration check: 0:02:28 ago on Sun 22 Oct 2023 02:52:25 AM UTC.
Package which-2.21-16.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@db5ca48165f6 /]# which vim
/usr/bin/vim
[root@db5ca48165f6 /]#

まとめ

無料でここまでの環境作れちゃうのすごすぎない?!?!
一昔前までオンプレの環境構築するのに、ハードやら電源やらで準備すらハードル高かったですけど
ものの数十分でここまで作れちゃうのは技術の進歩に圧倒的感謝ですね。

Discussion