仮想マシンのGuestOSでルータを構築する
仮想マシンを使って、GuestOS(ゲストOS)をルータとして使うことができます。複数のインタフェースを設定できる仮想マシンであれば構築できます。
ユースケースとしては、Linuxルータを作って仕組みを理解したいが、物理的なマシンや追加NICを用意するのが面倒なときに、仮想マシンを使って仮想ルータを手軽に構築することができます。
ネットワーク構成は次のようになります。
┌───────┐ ┌──────────────┐ │ ホストOS │ <───> │ ゲストOS(仮想ルータ) │ <───> (インターネット) └───────┘ └──────────────┘
例として、以下のような環境で構築しました。
HostOS:Mac
GuestOS:Linux(fedora12)
仮想マシン:VirtualBox
手順
GuestOSでVirtualBoxの設定
「VirtualBoxコンソール」→「設定」→「ネットワーク」で、2つのネットワークアダプタを有効します。「割り当て」のところを、1つは「ブリッジ」(または、「NAT」)、もう1つは「ホストオンリーアダプタ」にします。
HostOSでルータの設定
VirtualBoxのネットワークアダプタを設定してHostOS(ホストOS)を起動すると、HostOSに2つのIPアドレスが付与されています。この例では、eth0にはブリッジで、eth1にはホストオンリーアダプタで、IPアドレスが付与されています。
[root@fedora ~]# ip addr show 1: lo:mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff (← MACアドレスは隠してあります) inet Y.Y.Y.Y/24 brd Y.Y.Y.255 scope global eth0 (← IPアドレスは隠してあります) valid_lft forever preferred_lft forever 3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether ZZ:ZZ:ZZ:ZZ:ZZ:ZZ brd ff:ff:ff:ff:ff:ff (← MACアドレスは隠してあります) inet 192.168.56.101/24 brd 192.168.56.255 scope global eth1 valid_lft forever preferred_lft forever
NATルータとして機能するようにiptablesを設定します。ホストオンリーアダプタが192.168.56.101/24だと分かったので、「192.168.56.0/24」からのパケットにはNAT(MASQUERADE)をかけます。例えば以下のように設定します。
[root@fedora ~]# cat /etc/sysconfig/iptables
*nat
- PREROUTING ACCEPT [1
- 84]
- POSTROUTING ACCEPT [0
- 0]
- OUTPUT ACCEPT [0
- 0]
-A POSTROUTING -s 192.168.56.0/24 -j MASQUERADE
COMMIT
*filter
- INPUT DROP [0
- 0]
- FORWARD DROP [0
- 0]
- OUTPUT ACCEPT [0
- 0]
-A INPUT -i lo -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
COMMIT
HostOSでデフォルトゲートウェイの設定
HostOSでインターネットに出るときはGuestOSを経由するように、デフォルトゲートウェイを設定します。HostOSがMacなので、次のように設定しました。
[Oswald@macbook ~]$ sudo route delete default (←既にデフォルトゲートウェイが設定されていたら削除)
[Oswald@macbook ~]$ sudo route add default 192.168.56.101
完成図
これで仮想ルータを使ったネットワークが構築できました。
┌───────┐ ┌──────────────┐ │ ホストOS │ <───> │ ゲストOS(仮想ルータ) │ <───> (インターネット) └───────┘ └──────────────┘ vboxnet0 eth1 eth0 192.168.56.1 192.168.56.101 Y.Y.Y.Y