ESXi内のルーティングに必須!VyOSで仮想ルーター構築
ESXi内でのルーティングを VyOS というソフトウェアルーターを使って実現する方法をお伝えします。
この記事は アイソルート Advent Calendar 2020 5日目の記事です。
こんにちは。プラットフォームソリューショングループのsuzuki.koです。
私はESXiを使って日々検証環境を構築していますが、その中でも必須の機器が 仮想ルーター です。
仮想ルーターの構築をマスターすることで、検証環境のネットワーク構成を 自由自在に操れる ようになります。
今回はソフトウェアルーターである VyOS を使って、ESXi内でルーティングを行う方法をお伝えします。
目次
VyOSとは
先ほどから名前を出している VyOS とは、オープンソースのネットワークオペレーティングシステムです。
今回はルーターとして利用しますが、他にもたくさんの機能があるようです。
Linuxベースで開発されているようですが、ネットワーク機器のような操作感で設定することできます。
詳しくは構築パートで紹介します。
なぜVyOSが必要なのか
私は検証環境の構築にESXiを利用しています。
ESXiとは仮想マシンを複数立ち上げることのできるハイパーバイザーですが、 内部でルーティングをする機能を持っていません 。
そのためVLANを超えた通信を行うためには、ルーティング機能を持つ仮想マシンを立ち上げる必要があります。
そしてこの「ルーティング機能を持つ仮想マシン」としてVyOSが必要になるというわけです。
仮想ルーター構築準備
それではさっそくVyOSでルーターを構築していきましょう。
前提としてVMの立ち上げ、IP設定、GW設定などは完了し、ルーターを設定すればpingによる疎通は可能な状態であるとします。
動作環境
検証環境の作成にはESXi、を利用します。各種バージョンは以下の通りです。
- ハイパーバイザ
- VMware ESXi 6.7.0 Update 2 (build-13006603)
- 仮想ルーター
- VyOS 1.3-rolling-202002180217
- Client
- CentOS Linux release 8.2.2004 (Core)
- Server
- CentOS Linux release 8.2.2004 (Core)
VyOSは最新版の1.3を使っていますが、本格的に使う場合はLTSの1.2系を使った方がいいかもしれません。
ネットワーク構成
今回のネットワーク構成はこちらです。
そして
- Step1:Client (192.168.10.10) からServer (192.168.20.200) へpingが成功すること。
- Step2:Client (192.168.10.10) からインターネット上のGoogle (8.8.8.8)に対してpingが成功すること。
というところを目標に構築していこうと思います。
イメージのインストール
VyOSを立ち上げたらまずやらなければいけないことが イメージのインストール です。
isoファイルからbootしている状態でも、設定や利用が可能なのですが、再起動をすると 全ての設定が消えてしまいます 。
悲しいことにならないように、忘れず最初にイメージのインストールを行ってください。
セットアップに必要な質問をいくつかされるので適当な答えを入力しましょう。
install image
インストールが完了したら再起動しておきます。
reboot
初期設定の確認
初期の設定とステータスを確認します。
確認にはciscoコマンドによく似た「show 〇〇」というコマンドを使います。
初期config (※ダブルクリックすると全文が確認できます。)
vyos@vyos:~$ show configuration interfaces { ethernet eth0 { } loopback lo { } } system { config-management { commit-revisions 100 } console { device ttyS0 { speed 115200 } } host-name vyos login { user vyos { authentication { encrypted-password **************** plaintext-password **************** } } } ntp { server 0.pool.ntp.org { } server 1.pool.ntp.org { } server 2.pool.ntp.org { } } syslog { global { facility all { level info } facility protocols { level debug } } } }
インターフェース
vyos@vyos:~$ show interfaces Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down Interface IP Address S/L Description --------- ---------- --- ----------- eth0 - A/D eth1 - A/D eth2 - A/D lo 127.0.0.1/8 u/u ::1/128
ルーティングテーブル
vyos@vyos:~$ show ip route ※まだ何も表示されない Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, f - OpenFabric,
ClientからServerへのルーティング
- Step1:Client (192.168.10.10) からServer (192.168.20.200) へpingが成功すること。
となるよう構築を行います。
インターフェースにIPを振るだけのシンプルなものです。
構築
まず設定モードに入ります。
vyos@vyos:~$ configure vyos@vyos# ← 設定モードの表記
setコマンドでアドレスを付与してあげます。ついでにコメントも記述します。
vyos@vyos# set interfaces ethernet eth1 address 192.168.10.10/24 vyos@vyos# set interfaces ethernet eth1 description Client vyos@vyos# set interfaces ethernet eth2 address 192.168.20.200/24 vyos@vyos# set interfaces ethernet eth2 description Server
設定を保存します。
vyos@vyos# commit vyos@vyos# save
これで設定完了です。確認してみましょう
config (※ダブルクリックすると全文が確認できます。)
vyos@vyos:~$ show configuration interfaces { ethernet eth0 { } ethernet eth1 { address 192.168.10.10/24 description Client } ethernet eth2 { address 192.168.20.200/24 description Server } loopback lo { } } system { config-management { commit-revisions 100 } console { device ttyS0 { speed 115200 } } host-name vyos login { user vyos { authentication { encrypted-password **************** plaintext-password **************** } } } ntp { server 0.pool.ntp.org { } server 1.pool.ntp.org { } server 2.pool.ntp.org { } } syslog { global { facility all { level info } facility protocols { level debug } } } }
インターフェース
vyos@vyos:~$ show interfaces Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down Interface IP Address S/L Description --------- ---------- --- ----------- eth0 - A/D eth1 192.168.10.10/24 u/u Client eth2 192.168.20.200/24 u/u Server lo 127.0.0.1/8 u/u ::1/128
ルーティングテーブル
vyos@vyos:~$ show ip route C>* 192.168.10.0/24 is directly connected, eth1, 00:08:10 C>* 192.168.20.0/24 is directly connected, eth2, 00:08:10
疎通確認
Clientからpingで疎通確認を行います。
[root@Client ~]# ping 192.168.10.200 PING 192.168.10.200 (192.168.10.200) 56(84) bytes of data. 64 bytes from 192.168.10.200: icmp_seq=1 ttl=64 time=0.219 ms 64 bytes from 192.168.10.200: icmp_seq=2 ttl=64 time=0.192 ms 64 bytes from 192.168.10.200: icmp_seq=3 ttl=64 time=0.184 ms 64 bytes from 192.168.10.200: icmp_seq=4 ttl=64 time=0.193 ms
疎通が取れていることが確認できますね。
ClientからInternetへのルーティング
では次に
- Step2:Client (192.168.10.10) からインターネット上のGoogle (8.8.8.8)に対してpingが成功すること。
となるよう構築を行います。
この時忘れてはいけないのが、 NAT の設定を行うことです。
NATとは
NAT(Network Address Translation)とはルーターなどで IPアドレスを変換する技術 です。
インターネットと通信するときにローカルIPをグローバルIPに変換するというのが一番メジャーな利用ポイントでしょう。
ルーティングという技術には 来た道を戻るという機能が含まれていない ため、
IPアドレスを変換しなければインターネット上に出た通信は 帰ってくることができません 。
同じ理屈で今回の 検証環境のInternetルーター はClientのいる 192.168.10.0/24に通信を返すことができない ため、
VyOSで 192.168.10.0/24 → 10.0.0.100 となるようにNATする必要があります。
構築
では上記NATも踏まえて設定していきます。
設定モードに入ります。
vyos@vyos:~$ configure vyos@vyos# ← 設定モードの表記
setコマンドでアドレスの設定を行います。今回はDHCPで取得します。
vyos@vyos# set interfaces ethernet eth0 address dhcp vyos@vyos# set interfaces ethernet eth0 description Internet
NAT設定を行います。
vyos@vyos# set nat source rule 1 outbound-interface eth0 vyos@vyos# set nat source rule 1 source address 192.168.10.0/24 vyos@vyos# set nat source rule 1 translation address masquerade
設定を保存します。
vyos@vyos# commit vyos@vyos# save
これで設定完了です。確認してみましょう
config (※ダブルクリックすると全文が確認できます。)
vyos@vyos:~$ show configuration interfaces { ethernet eth0 { address dhcp description Internet } ethernet eth1 { address 192.168.10.10/24 description Client } ethernet eth2 { address 192.168.20.200/24 description Server } loopback lo { } } nat { source { rule 1 { outbound-interface eth0 source { address 192.168.10.0/24 } translation { address masquerade } } } } system { config-management { commit-revisions 100 } console { device ttyS0 { speed 115200 } } host-name vyos login { user vyos { authentication { encrypted-password **************** plaintext-password **************** } } } ntp { server 0.pool.ntp.org { } server 1.pool.ntp.org { } server 2.pool.ntp.org { } } syslog { global { facility all { level info } facility protocols { level debug } } } }
インターフェース
vyos@vyos:~$ show interfaces Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down Interface IP Address S/L Description --------- ---------- --- ----------- eth0 10.0.0.100/8 u/u Internet eth1 192.168.10.10/24 u/u Client eth2 192.168.20.200/24 u/u Server lo 127.0.0.1/8 u/u ::1/128
ルーティングテーブル
vyos@vyos:~$ show ip route S>* 0.0.0.0/0 [210/0] via 10.0.0.254, eth0, 00:02:28 C>* 10.0.0.0/8 is directly connected, eth0, 00:02:28 C>* 192.168.10.0/24 is directly connected, eth1, 00:08:10 C>* 192.168.20.0/24 is directly connected, eth2, 00:08:10
疎通確認
pingで疎通確認を行います。
[root@Client ~]# ping 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=114 time=5.08 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=114 time=5.36 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=114 time=5.07 ms 64 bytes from 8.8.8.8: icmp_seq=4 ttl=114 time=5.45 ms
こちらも疎通が取れていますね!
設定後Config
最後に設定後のConfig全文を展開しておきます。
参考にしてください。(※ダブルクリックすると全文が確認できます。)
vyos@vyos:~$ show configuration interfaces { ethernet eth0 { address dhcp description Internet } ethernet eth1 { address 192.168.10.10/24 description Client } ethernet eth2 { address 192.168.20.200/24 description Server } loopback lo { } } nat { source { rule 1 { outbound-interface eth0 source { address 192.168.10.0/24 } translation { address masquerade } } } } system { config-management { commit-revisions 100 } console { device ttyS0 { speed 115200 } } host-name vyos login { user vyos { authentication { encrypted-password **************** plaintext-password **************** } } } ntp { server 0.pool.ntp.org { } server 1.pool.ntp.org { } server 2.pool.ntp.org { } } syslog { global { facility all { level info } facility protocols { level debug } } } }
vyos@vyos:~$ show configuration commands set interfaces ethernet eth0 address 'dhcp' set interfaces ethernet eth0 description 'Internet' set interfaces ethernet eth1 address '192.168.10.10/24' set interfaces ethernet eth1 description 'Client' set interfaces ethernet eth2 address '192.168.20.200/24' set interfaces ethernet eth2 description 'Server' set interfaces loopback lo set nat source rule 1 outbound-interface 'eth0' set nat source rule 1 source address '192.168.10.0/24' set nat source rule 1 translation address 'masquerade' set service ssh set system config-management commit-revisions '100' set system console device ttyS0 speed '115200' set system host-name 'vyos' set system login user vyos authentication encrypted-password '' set system login user vyos authentication plaintext-password '' set system ntp server 0.pool.ntp.org set system ntp server 1.pool.ntp.org set system ntp server 2.pool.ntp.org set system syslog global facility all level 'info' set system syslog global facility protocols level 'debug'
さいごに
今回はVyOSの構築についてお伝えしました。
これで自由なセグメント帯、IPアドレスで検証環境を作成できるようになりましたね。
お客様の環境をできる限り再現して事前検証を入念に行うことで、より品質の高い成果物を作成することができます。
このような地道な準備を怠らずに、信用されるエンジニアになっていきたいですね!
明日の記事は watanabe.t さんによる AWSで基本的なWebアプリを構築するときのアーキテクチャ3パターンです、お楽しみに!