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

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

というわけで、今回のブログエントリでは上図の VM0 に相当するようなルーターを VirtualBox で作る手順を紹介します。
【VirtualBox でルータを作る】
上手の VM0 に相当するルータを作ろうとすると、少なくとも2つの NIC (内部ネットワークに接続されるものと、インターネットに繋がる回線に接続されるもの)が必要になり、これらの間でルーティングを実装する必要があります。
というわけで、VirtualBox の VM でも2つの NIC を有効にする必要があります。VM 作成時に(作成してシャットダウン後でも構いません)、ネットワークのアダプター設定を変更します。まずアダプター1(上図での eth0)は普通に intnet の内部ネットワークに接続する設定にします:

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

そして VM を起動し、NIC のアダプター名を確認します。仮にアダプター1が eth0 、アダプター2が eth1 であったと仮定します:
まず eth0 の設定は IP アドレス(10.10.0.1)以外は前回と同様です。内部ネットワークである intnet(10.10.0.0/24)に接続して動くような設定を行います:
ここからが今回の肝になる部分です。インターネットに NAT で接続する側である eth1 の設定を以下のようにします:
これで2つのネットワークアダプターそれぞれの設定を行いました。最後にこの2つのアダプター間で IP フォワーディングと IP マスカレードによるルーティングを行うための設定を追加します:
これで閉域ネットワークだった intnet 内からインターネットを使えるようにするためのルータ VM0 が準備できました。
ここまでできたら、後は intnet 内の VM(例えば VM1)のデフォルトゲートウェイを VM0 に指定し、インターネット用の DNS を追加設定するだけです。VM1 で以下を実行してデフォルトゲートウェイを VM0 に設定します:
最後に VM1 から DNS 含めてインターネットに接続できることを確認します。下の例では "www.ibm.com" というインターネット上のホスト名を指定して、IP アドレス解決ができ、ping も通ることを確認しています:
閉域ネットワーク内に作った VM1 がインターネットルータとなる VM0 を経由して外部に接続できるようになったことが確認できました。
前回のブログエントリで VirtualBox 内の閉域ネットワーク上に VM (下図の VM1)を作る手順を紹介しました:

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

というわけで、今回のブログエントリでは上図の VM0 に相当するようなルーターを VirtualBox で作る手順を紹介します。
【VirtualBox でルータを作る】
上手の VM0 に相当するルータを作ろうとすると、少なくとも2つの NIC (内部ネットワークに接続されるものと、インターネットに繋がる回線に接続されるもの)が必要になり、これらの間でルーティングを実装する必要があります。
というわけで、VirtualBox の VM でも2つの NIC を有効にする必要があります。VM 作成時に(作成してシャットダウン後でも構いません)、ネットワークのアダプター設定を変更します。まずアダプター1(上図での eth0)は普通に intnet の内部ネットワークに接続する設定にします:

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

そして 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 を経由して外部に接続できるようになったことが確認できました。
コメント