VMware on SoftLayerのゲストOSにパブリックIPを付与

VMware on SoftLayerに作ったゲストOSをインターネットと通信させたい場合の設定例です。

一言で言うと、仮想マシンにパブリック側のNICを付けて、ゲストOS上でそのNICにPublic Portable IPを付与し、ゲストOSのルーティング設定をすればOKです。

順を追って説明します。なお、インターネットに接続するにあたってのセキュリティ確保は、ユーザー責任となりますので、実際に行う際は考慮いただくようお願いします。

# Portable IPをオーダー
ゲストOSに付与するIPは基本的にPortable IPが適しているので、Public側・Private側の両方をオーダーします。Private側は無料で、Public側は有料です。

![vmpub04.jpg](https://qiita-image-store.s3.amazonaws.com/0/59627/b6a209bc-333f-a21f-2e0e-c30759d5278a.jpeg)

# 仮想マシンにパブリック側のNICを付ける
仮想マシン作成時、デフォルトではNICはPrivateに1つだけ持った状態です。

![vmpub01.jpg](https://qiita-image-store.s3.amazonaws.com/0/59627/698d355e-ad17-83f3-2153-a9ad8a4a91d4.jpeg)

NICを2つにし、Public側にも接続するように変更します。

![vmpub02.jpg](https://qiita-image-store.s3.amazonaws.com/0/59627/ea77cd27-9949-287c-e445-c9aa3c28bce4.jpeg)

# ゲストOSインストール直後の状態
ubuntuを例にします。
ubuntuのインストール中に、どちらか１つのNICを使ってインストールを進めるよう選ぶ必要があるため、eth0(プライベート側)を選択します。
そのため、インストール直後は、eth0にプライベートのIPアドレスが付き、eth1にはIPは設定されていない状態になっています。プライベートのIPは、購入しておいた、Private PortableのIPアドレスです。

```
$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:0c:29:36:77:a8
          inet addr:10.110.227.118  Bcast:10.110.227.119  Mask:255.255.255.252
          inet6 addr: fe80::20c:29ff:fe36:77a8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:44 errors:0 dropped:0 overruns:0 frame:0
          TX packets:72 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5759 (5.7 KB)  TX bytes:10212 (10.2 KB)

eth1      Link encap:Ethernet  HWaddr 00:0c:29:36:77:b2
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

$
```

デフォルトゲートウェイもプライベート側にセットされています。
外部との疎通状況としては、SoftLayerのプライベートネットワーク上のサーバーとの通信は可能ですが、インターネットには繋がっていない状態です。

```
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.110.227.117  0.0.0.0         UG    0      0        0 eth0
10.110.227.116  0.0.0.0         255.255.255.252 U     0      0        0 eth0
$
```

# ゲストOS上でPublic Portable IPを付与

/etc/network/interfacesにeth1に関する設定を追記します。IPアドレスは、購入しておいたPublic Portableのものを使います。
デフォルトゲートウェイもPublic側に設定します。

```
root@ubuntu01:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 10.110.227.118
        netmask 255.255.255.252
        network 10.110.227.116
        broadcast 10.110.227.119
#       gateway 10.110.227.117
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 10.0.80.11
        dns-search softlayer.com

# The secondary network interface
    auto eth1
    iface eth1 inet static
    address 119.81.151.190
    netmask 255.255.255.252
    gateway 119.81.151.189
root@ubuntu01:~#
```

vSphere Clientのコンソールから（SSH接続だと、ifdownのタイミングで接続が切れるため）、下記コマンドを実行し、上記設定を反映します。

```
# ifdown eth0 && ifup eth0
# ifdown eth1 && ifup eth1
```

パブリック側のIPと通信できるようになります。（逆に、後述の静的経路を設定するまで、プライベート側からは繋がらなくなります）

```lang:ローカルPCからのping
C:\Users\User01>ping 119.81.151.190

119.81.151.190 に ping を送信しています 32 バイトのデータ:
119.81.151.190 からの応答: バイト数 =32 時間 =64ms TTL=47
119.81.151.190 からの応答: バイト数 =32 時間 =61ms TTL=47
119.81.151.190 からの応答: バイト数 =32 時間 =61ms TTL=47
119.81.151.190 からの応答: バイト数 =32 時間 =59ms TTL=47

119.81.151.190 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 59ms、最大 = 64ms、平均 = 61ms

C:\Users\User01>
```

# ルーティング設定
今、ゲストOSのルーティング設定は下記となっています。

```
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         119.81.151.189  0.0.0.0         UG    0      0        0 eth1
10.110.227.116  0.0.0.0         255.255.255.252 U     0      0        0 eth0
119.81.151.188  0.0.0.0         255.255.255.252 U     0      0        0 eth1
#
```

この状態では、SoftLayerのプライベート側に行ってほしい10.x.x.xもパブリック側に行ってしまうので、静的経路を追加し、10.0.0.0/8はプライベート側のゲートウェイに行くように設定します。

`# route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.110.227.117`

```
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         119.81.151.189  0.0.0.0         UG    0      0        0 eth1
10.0.0.0        10.110.227.117  255.0.0.0       UG    0      0        0 eth0
10.110.227.116  0.0.0.0         255.255.255.252 U     0      0        0 eth0
119.81.151.188  0.0.0.0         255.255.255.252 U     0      0        0 eth1
#
```

これで、パブリック側からもプライベート側からも通信できるようになりました。インターネットへも通信可能です。

```
# ping www.yahoo.co.jp
PING www.g.yahoo.co.jp (183.79.75.234) 56(84) bytes of data.
64 bytes from f7.top.vip.kks.yahoo.co.jp (183.79.75.234): icmp_seq=1 ttl=51 time=64.5 ms
64 bytes from f7.top.vip.kks.yahoo.co.jp (183.79.75.234): icmp_seq=2 ttl=51 time=102 ms
64 bytes from f7.top.vip.kks.yahoo.co.jp (183.79.75.234): icmp_seq=3 ttl=51 time=64.5 ms
64 bytes from f7.top.vip.kks.yahoo.co.jp (183.79.75.234): icmp_seq=4 ttl=51 time=64.6 ms
64 bytes from f7.top.vip.kks.yahoo.co.jp (183.79.75.234): icmp_seq=5 ttl=51 time=60.9 ms
^C
--- www.g.yahoo.co.jp ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 60.910/71.354/102.115/15.448 ms
root@ubuntu01:~#
```

# vSphere Client上での表示
今回の構成は、vSphere ClientのvSphere標準スイッチ上は、下図のように表示されます。
仮想マシンvm01が、Privateネットワークであるvmnic0と、Publicネットワークであるvmnic1の両方に接続されていることが分かります。

![vmpub05b.jpg](https://qiita-image-store.s3.amazonaws.com/0/59627/fe26e76f-7cc8-886f-d9cd-291e4ba5720a.jpeg)

なお、ベアメタルオーダー時にSoftLayerから払い出されるPrimaryネットワークですが、Private側はVMkernelポートとして割り当てられ、vSphere ClientはこのIPに対して接続します。Primary Public IPも、SoftLayerの管理ポータル上は払い出されていますが、ユーザーが意識して使う機会は今のところなさそうです。

![vmpub06.jpg](https://qiita-image-store.s3.amazonaws.com/0/59627/cb45b5f2-a1d5-13b5-a2fb-5954e41d2657.jpeg)