1.概要説明
VLANを構築し、ネットワークの仕組みの理解に役立てようという趣旨です。
極力GUIによる操作で直感的に構築していこうと思います。
本格的なものではございません。
ホスト(Windows11)内に3つのゲストVM(Ubuntu)を作成し、そのうちの1つをサーバー(VM-server)として構築します。ホスト・サーバー間は仮想化ソフトのブリッジアダプターを用いることにより、サーバーはホストが接続するインターネットへと接続可能な状態とします。その他のゲストVM(VM-1,VM-2)2つは仮想化ソフトの内部ネットワークを用いてサーバーに接続するクライアントVMとし、それぞれVLANによって異なる論理ネットワーク(vlan1,vlan2)として構築します。また、内部ネットワークからはインターネットに接続できないような構成とします。インストール作業に必要な時のみ、アダプターの設定を適宜変更するなどして、一時的にインターネットに接続します。
本稿ではなるべくGUIによる操作を中心として、ネットワーク学習へのハードルを下げたいという狙いのもと、GUIによる大まかな操作等を中心に説明します。とはいえ、最低限WindowsやLinuxのコマンドについて理解はある前提で進めていきます。
下記のサイトが大いに参考になりました。二番煎じな部分もあるかと思いますが、こういったことをやる人は基本的にCUIによる操作に慣れていると思いますので、あえてGUIでやってみるという趣旨になります。
2.ホスト側のネットワーク状況の確認
ホスト(windows11)
ipconfigで「IPv4アドレス」「サブネットマスク」 「デフォルトゲートウェイ」の値を確認します。
C:\Users\user>ipconfig
Wireless LAN adapter Wi-Fi:
接続固有の DNS サフィックス . . . . .:
IPv6 アドレス . . . . . . . . . . . .:
一時 IPv6 アドレス. . . . . . . . . .:
リンクローカル IPv6 アドレス. . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.xxx.xxx
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .:
192.168.xxx.xxx
サブネットマスクをプレフィックス値に換算し、計算ツール等を用いて、ネットワークの範囲を求めます。
※ちなみに私の例では、ホストはスマートフォンからのテザリングネットワークに接続しているため、リセットごとにIPアドレスが変化します。ホストを通じてネットに接続するので、ホストのネットワーク設定が変わる場合は注意が必要です。
使用する予定のIPアドレスにpingを打ちます。以下のように、到達できない場合はそのアドレスは使用されていないことを意味します。つまり、空いているので、サーバー用の固定アドレスとして使えます。
C:\Users\user>ping 192.168.xxx.xxx
192.168.xxx.xxx に ping を送信しています 32 バイトのデータ:
192.168.xxx.xxx からの応答: 宛先ホストに到達できません。
192.168.xxx.xxx の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
以下のようにpingを打って応答し、パケットにも損失がない場合は、正常に通信していることを意味し、アドレスをすでに使用しているデバイスが存在することを意味するため、そのアドレスを別の機器が使用することはできません。
C:\Users\user>ping 192.168.xxx.xxx
192.168.xxx.xxx に ping を送信しています 32 バイトのデータ:
192.168.xxx.xxx からの応答: バイト数 =32 時間 =6ms TTL=64
192.168.xxx.xxx の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 6ms、平均 = 2ms
タイムアウトの場合はネットワークの範囲外になりますのでそのアドレスは使えません。
先ほど調べたネットワークの範囲が使用可能なアドレスの範囲になります。
C:\Users\user>ping 192.168.xxx.xxx
192.168.xxx.xxx に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
192.168.xxx.xxx の ping 統計:
パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、
このようにして、固定IPとして使用可能なアドレスを調べていき、そのアドレスを次項のVM-serverに設定していきます。
3.VM-serverの設定
VLANとnetwork-manager-gnome(nm-connection-editor)をインストールします。
sudo apt update
sudo apt upgrade
sudo apt install vlan
sudo apt install network-manager-gnome
VM-serverに接続されたブリッジアダプターはホストと通信をします。また、インターネットの入口にもなります。
VM-serverに接続された内部ネットワークは外部からは接続することができません。
少し複雑な言い方になりますが、あくまでもVMを起動し、VM-serverとして操作し適切な設定を行うことで、内部ネットワークに接続することができます。
内部ネットワークは2つ使用します。
内部ネットワークの中でさらにVLANを利用し、別のセグメントとして論理的に切り分けるためです。
そうすることで、VM-2 VM-3間は通信が不可能な状態にすることができます。
ただし、内部ネットワークとして、それぞれVM-server VM-1間、VM-server VM-2間は接続できるようにする必要があるため、それぞれ割り当てを「内部ネットワーク」、名前を「mynetwork01」などとしています。
今回の場合だと、「内部ネットワーク」の名前はすべて同じにしなければいけません。
名前が異なった場合はpingを打ったときに経路を発見することができなくなります。
高度な設定はできませんが、Ubuntuの標準では画面右上の設定から簡単なネットワークの設定を行うことができます。
簡単といっても、ipアドレスを固定化したり、基本的なことはできます。
VLANの設定はここからはできないようなので、この部分の設定は特に変更することはなく、いったんこの画面を閉じることにします。
これは設定後の画面になってしまいますが、画面右上の設定から、virtualboxの設定どおりEthernetが3つあることを確認します。
ブリッジアダプターであるenp0s3に対して、固定IPを設定します。
ここで先程ホスト側で確認したデフォルトゲートウェイとDNSを設定することで、同じネットワークにあるデバイスとして認識され、アドレスを(もちろんホストとは異なるものに)設定することで固定IP化します。
ネットワークの設定が済んだら、ネットワークの設定を再読込し、ipアドレスが変わっているか確認します。
ホスト側からVM-server側にpingを打って、またVM-server側からホスト側にpingを打って通信ができるか確認します。
sudo systemctl restart NetworkManager
ip a
4.VM-1,VM-2と内部ネットワークの設定
次に内部ネットワークアダプタの設定を行います。
といっても、ここからは設定を行わずに先ほどインストールしたnetwork-manager-gnome(nm-connection-editor)を利用して設定を行います。
「高度な」で検索すると高度なネットワーク設定のツール(nm-connection-editor)を開くことができます。
日本語が入力できない場合は画面右上のIMEバーを確認すると良いです。
このようにVLANの設定を行いました。
VLAN ID で論理的にセグメントを切り分けていることと、親インターフェースがそれぞれ別のものを利用していることに注意してください。
今回の内部ネットワークの場合、DNSとゲートウェイは空欄となります。
ネットワーク設定を再読み込みすることで、アドレスが固定化されます。
sudo systemctl restart NetworkManager
ip a
この時点では内部ネットワークの接続先がないので、まだ接続することはできません。
4.VM-1とVM-2の設定
こちらもそれぞれアップデートし、VLANとnetwork-manager-gnome(nm-connection-editor)をインストールします。
sudo apt update
sudo apt upgrade
sudo apt install vlan
sudo apt install network-manager-gnome
基本的にはVM-serverと同様の手順でVLANを設定していきます。
ネットワーク設定を再読み込みすることで、アドレスが固定化されます。
sudo systemctl restart NetworkManager
ip a
VM-1からpingをVM-2に対して打ってみると、ネットワークに届かないことが確認できます。
VM-1 VM-server間、VM-2 VM-server間はそれぞれ通信可能です。
まとめ
いかがでしょうか?私自身、実際に構築しながら記事を書きましたが、改めて理解が不十分だった点もいろいろあり、非常に勉強になりました。
余談ですが、私はいったん自宅サーバーという謎の沼にハマってから、VMの構築に至っています。その次の段階としてコンテナがあると思いますが、物理から入らないと感覚的な理解には至らないのではないかと私の経験則が申しております。余計な一言でしたね。
何かの足しになれば幸いです。