Loading
BLOG 開発者ブログ

2020年12月5日

ESXi内のルーティングに必須!VyOSで仮想ルーター構築

ESXi内でのルーティングを VyOS というソフトウェアルーターを使って実現する方法をお伝えします。

この記事は アイソルート Advent Calendar 2020 5日目の記事です。

 

 

こんにちは。プラットフォームソリューショングループのsuzuki.koです。

私はESXiを使って日々検証環境を構築していますが、その中でも必須の機器が 仮想ルーター です。

仮想ルーターの構築をマスターすることで、検証環境のネットワーク構成を 自由自在に操れる ようになります。

今回はソフトウェアルーターである VyOS を使って、ESXi内でルーティングを行う方法をお伝えします。

 
 

目次

 
 

VyOSとは

先ほどから名前を出している VyOS とは、​オープンソースのネットワークオペレーティングシステムです。

今回はルーターとして利用しますが、他にもたくさんの機能があるようです。

 

https://www.vyos.io/

ISOダウンロード

 

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パターンです、お楽しみに!

 
 
 

suzuki.koのブログ