まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:vmware

【前回の復習と今回の目的】
前回のブログエントリで VirtualBox 内の閉域ネットワーク上に VM (下図の VM1)を作る手順を紹介しました:
2025020101

今回は下図の VM0 に相当するような、インターネット接続ルータとなるサーバーを VirtualBox 内に作る手順を紹介します。閉域ネットワークだけなら構築は簡単ですが、インターネット接続ができないので OS やアプリケーションの導入がかなり面倒になります。一方、これができると VPC っぽい感じの便利な(というか不便でない)環境が使えるようになり、VM0 や VM1 だけでなく、この内部ネットワークに繋がる全てのサーバーのアウトバウンド・インターネット接続が可能になります:
2025020102


というわけで、今回のブログエントリでは上図の VM0 に相当するようなルーターを VirtualBox で作る手順を紹介します。


【VirtualBox でルータを作る】
上手の VM0 に相当するルータを作ろうとすると、少なくとも2つの NIC (内部ネットワークに接続されるものと、インターネットに繋がる回線に接続されるもの)が必要になり、これらの間でルーティングを実装する必要があります。

というわけで、VirtualBox の VM でも2つの NIC を有効にする必要があります。VM 作成時に(作成してシャットダウン後でも構いません)、ネットワークのアダプター設定を変更します。まずアダプター1(上図での eth0)は普通に intnet の内部ネットワークに接続する設定にします:
2025020201


その上でアダプター2(上図での eth1)も有効化し、割り当て種類をインターネットに接続できるものにします。「NAT」か「ブリッジアダプター」になりますが、今回は設定がより簡単な「NAT」にしました:
2025020202


そして VM を起動し、NIC のアダプター名を確認します。仮にアダプター1が eth0 、アダプター2が eth1 であったと仮定します:
# nmcli device
DEVICE  TYPE      STATE      CONNECTION
eth0    ethernet  connected  eth0
eth1    ethernet  connected  eth1
  :


まず eth0 の設定は IP アドレス(10.10.0.1)以外は前回と同様です。内部ネットワークである intnet(10.10.0.0/24)に接続して動くような設定を行います:
# nmcli con add ifname eth0 con-name eth0 type ethernet eth0 をインターフェースとして追加

# nmcli con mod eth0 connection.autoconnect yes OS起動時に自動接続

# nmcli con mod eth0 ipv4.addresses 10.10.0.1/24 IPv4アドレスとネットマスク

# nmcli con mod eth0 ipv4.method manual 手動設定であることを明示

# nmcli con mod eth0 ipv4.dns 10.10.0.10 DNSサーバー

# nmcli con up eth0 ここまでの設定を有効化

ここからが今回の肝になる部分です。インターネットに NAT で接続する側である eth1 の設定を以下のようにします:
# nmcli con add ifname eth1 con-name eth1 type ethernet eth1 をインターフェースとして追加

# nmcli con mod eth1 connection.autoconnect yes OS起動時に自動接続

# nmcli con up eth1 ここまでの設定を有効化


これで2つのネットワークアダプターそれぞれの設定を行いました。最後にこの2つのアダプター間で IP フォワーディングと IP マスカレードによるルーティングを行うための設定を追加します:
(/etc/sysctl.conf に "net.ipv4_forward=1" を追加)

# sysctl -p

# iptables-save 現在の iptables 設定を確認(何も表示されないことを確認)

# iptables -A FORWARD -j ACCEPT ポートフォワーディングを有効化

# iptables -t nat -s 10.10.0.0/24 -A POSTROUTING -j MASQUERADE NAT による IP マスカレードを有効化

これで閉域ネットワークだった intnet 内からインターネットを使えるようにするためのルータ VM0 が準備できました。

ここまでできたら、後は intnet 内の VM(例えば VM1)のデフォルトゲートウェイを VM0 に指定し、インターネット用の DNS を追加設定するだけです。VM1 で以下を実行してデフォルトゲートウェイを VM0 に設定します:
# nmcli con mod eth0 ipv4.gateway 10.10.0.1 デフォルトゲートウェイを VM0 に指定

# nmcli con up eth0 ここまでの設定を有効化

最後に VM1 から DNS 含めてインターネットに接続できることを確認します。下の例では "www.ibm.com" というインターネット上のホスト名を指定して、IP アドレス解決ができ、ping も通ることを確認しています:
# ping www.ibm.com

PING e7817.dscx.akamaiedge.net (23.35.121.153) 56(84) bytes of data.
64 bytes from a23-35-121-153.deploy.static.akamaitechnologies.com (23.35.121.153): icmp_seq=1 ttl=54 time=11.6 ms
64 bytes from a23-35-121-153.deploy.static.akamaitechnologies.com (23.35.121.153): icmp_seq=2 ttl=54 time=24.6 ms
  :

閉域ネットワーク内に作った VM1 がインターネットルータとなる VM0 を経由して外部に接続できるようになったことが確認できました。





ブロードコム社による VMWare のライセンス変更の影響もあって、なんとなく「仮想環境として VMWare を選びにくい」心理になっているのは自分だけじゃないと思ってます。事実、自分は昨年のプロジェクトにおける検証環境として仮想環境が必要だったのですが、自社も扱っている VMWare を選ぶことに躊躇して、結局使いませんでした。。

問題は「VMWare を使わないとして、じゃあ何を使う?」です。もちろん VMWare の便利さ(複数サーバーで1つの環境を構築できるのはリソース管理の視点で便利ですよね)も理解しているし、「使う側の慣れ(別の環境だと慣れるまでが不安)」の問題もあるので、なんでもいいというわけにはいかないことは理解しています。

そこまで理解した上で、自分は昨年1年間を通じて Oracle の VirtualBox を使う機会が数度ありました。もともと個人所有の(PC-DOS や OS/2 資産を残しておくための)仮想環境として使っていたこともあったのですが、単に「VM を起動するだけ」の使い方しかしていませんでした(ネットワーク周りなどは全然・・)。そんな自分も業務を通じて1年間使ってきたこともあり、ある程度理解が深まったと思うので、今年はそのアウトプットを行っていこうと思います:
2025012101


まず最初は「VirtualBox 内で VPC(Virtual Private Cloud) っぽい環境を作る」手順を数度に分けて紹介していこうと考えています。VPN などで外部からアクセスできるような所までは想定しませんが、原則的にはインターネット接続のない閉じたネットワークを作って、その上で複数の VM を動かしたり、インターネット接続のためのルータを作った上でデフォルトゲートウェイとして指定することでアウトバウント・インターネット接続を実現する、といった内容を紹介していく予定です。

というわけで、今回は VirtualBox でインターネット接続のないネットワークを作って、その中で VM を動かすまでの手順を紹介します。


【VirtualBox で外部とは繋がらないネットワークに VM を配置する】
まず VirtualBox のネットワークにはどんな種類があるのか調べてみます。適当な VM を選択して設定を開き、ネットワーク項目を確認します。有効化されているアダプターを見つけ(あるいは適当なアダプターを選んで有効化し)、割り当てボックスを開きます:
2025013101


私の環境は VirtualBox 7.0.12 なのですが、その場合はこのような選択肢が表示されました。これだけの種類のネットワークがあり、VirtualBox で指定できます:
2025013102


「NAT」や「ブリッジアダプター」は比較的わかりやすいのではないかと思ってます(ホスト PC がインターネットに繋がっていれば、どちらも外部接続可能です)。外部につながらないネットワークという意味では「内部ネットワーク」と「ホストオンリーアダプター」がありますが、後者はどちらかというと単体、他の VM との通信を行うネットワークに接続させたい場合は前者の「内部ネットワーク」を選択することになるようです。

「内部ネットワーク」を選ぶと、画面はこのようになります:
2025013103


この「名前」の値(上図では "intnet" となっている部分)が「内部ネットワークの名前」に相当するもので、デフォルト値は "intnet" です。複数の VM が同じ名前の内部ネットワークに接続されたアダプターを持っていれば、それらの VM は(同じネットワークアドレスの IP アドレスが割り当てられていれば)通信できることになります。2つ以上の異なる内部ネットワークを定義したい場合は、この "intnet" と書かれている部分を別の名前に書き換えることで「別のネットワーク」扱いになり、通信はできなくなります。

というわけで、VirtualBox で外部に繋がらないネットワーク上に VM を配置したい場合はネットワークアダプタの種類を「内部ネットワーク」に指定して VM を作ればよいことになります。

その上で VM を作成・起動し、まずは VirtualBox の OS 内でのネットワークインターフェース名を確認するため、以下のコマンドを入力します:
# nmcli device

この結果、例えばネットワークインターフェース名が eth0 であれば(CentOS や RHEL であれば)以下のような設定を実施します(赤字はコメントです):
# nmcli con add ifname eth0 con-name eth0 type ethernet eth0 をインターフェースとして追加

# nmcli con mod eth0 connection.autoconnect yes OS起動時に自動接続

# nmcli con mod eth0 ipv4.addresses 10.10.0.10/24 IPv4アドレスとネットマスク

# nmcli con mod eth0 ipv4.method manual 手動設定であることを明示

# nmcli con mod eth0 ipv4.dns 10.10.0.10 DNSサーバー

# nmcli con up eth0 ここまでの設定を有効化

これでインターネットには接続できないネットワーク 10.10.0.0/24 内に IP アドレス 10.10.0.10 で接続されたサーバーを作ることができます。

図で示すとこんな感じの VM1 に相当するサーバーを作ることができます:
2025020101


注意が必要な点として、オフライン(インターネット接続がない)なので、インストール時のネットワーク経由でのユーザー登録やサブスクリプション登録もできない、という点です。オフラインインストール方法は OS ごとに異なるはずですが、RHEL 9 の場合は過去に調べてまとめたことがあるので、(超面倒ですが)必要な方はこちらも参照ください:
RHEL 9.x のオフラインインストール


次回はこのエアギャップ(インターネット非接続)ネットワーク上に、インターネットとのデフォルトゲートウェイになるようなルータを構築する手順を紹介する予定です。こちらも図で示すとこちらの VM0 に相当するサーバーを作って、閉域ネットワークである intnet に接続したサーバー(VM1 など)がインターネット接続できるようにします:
2025020102




「VMWare Player で CentOS を使う」ための情報は溢れていますが、逆の「CentOS で VMWare Player を使う」情報が少なかったのでまとめておきました。RedHat 環境でも同様だと思うので、適宜読み替えてください。


まず CentOS に VMWare Player を使うには X WIndow 環境が前提となります。X Window 未導入の場合は以下のコマンドで事前にインストールしておいてください:
# yum groupinstall "X Window System"

VMWare Player 本体は VMWare のサイトから(非商用であれば)無料で提供されています。Linux 用のモジュールを選んでダウンロードしてください(2016/Jan/22 時点での最新バージョンは 12.1.0 で、Linux 用モジュールのファイル名は VMware-Player-12.1.0-3272444.x86_64.bundle でした):
ダウンロード VMWare Workstation Player

2016012201


ダウンロードしたファイルはシェルで実行可能なインストーラーになっています。X Window 環境内のターミナルからダウンロードファイルを指定して以下を実行します:
# bash VMWare-Player-12.1.0-3272444.x86_64.bundle

VMWare Player のインストーラーが展開されて、インストールウィザードが開始されます:
2016012202


ライセンスに同意して進めていき、インストールを行います:
2016012204


インストールが完了しました!:
2016012205


導入した VMWare Player は CentOS メニューの「システムツール」として登録されているので、ここから起動できます:
2016012206


初回起動時にライセンスの確認が行われます。商用利用の場合はライセンスキーを指定します。非商用利用であればメールアドレスを入力して先に進みます:
2016012207


CentOS 内で VMWare Player が起動しました。ここから先は Windows 版と同様に利用することができます:
2016012208



このページのトップヘ