常田です。

最近、サーバの設定をAnsibleで実施する日々が続いています。便利です。
以前は、Provisioning Scriptで構成していたのですがAnsibleとの住み分けをどうしようかなと思いながら利用しています。いずれにしてもServerSpecでのテストは必須ですね。

さて、SoftLayerのサーバ群には標準で用意されているSSL-VPN経由でサーバにアクセスが出来ます。この経路であれば各サーバへインターネット経由で接続せずにプライベートアドレスでアクセス出来て便利です。

Ansibleを実行するLinux端末からSSL-VPNに接続するためにはVPNクライアントを導入しなければいけません。devサイトに導入用のAnsibleが有りましたので利用してみます。

Ansibleの実行環境は作られているものとします。

以下の内容を install_arrray_vpn.yml として保管して下さい。

---
- hosts: 127.0.0.1
  connection: local
  sudo: yes
  tasks:
    - name: Create directory for VPN client
      file:
        path: "~/vpn"
        state: directory

    - name: Get VPN binary file
      get_url:
        url: "http://speedtest.dal05.softlayer.com/array/ArrayNetworksL3VPN_LINUX.zip"
        dest: "~/vpn/ArrayNetworksL3VPN_LINUX.bin"
        sha256sum: "6300f97886bdabcd8e92d3327f2704b705dc0bd050b4fd9fb5dc8cb9ed6ceec2"

    - name: Add execute permissions on VPN client
      file:
        path: "~/vpn/ArrayNetworksL3VPN_LINUX.bin"
        mode: u=rwx

    - name: Extract VPN client files from binary
      command: "./ArrayNetworksL3VPN_LINUX.bin"
      args:
        chdir: "~/vpn"
        creates: "~/vpn/array_vpnc64"

    - name: Update permissions on the VPN client
      file:
        path: "~/vpn"
        mode: "u=rwX,g=rX,o=rX"
        recurse: yes

上記を実行すると /root/vpn 配下にコマンドが導入されます。
以下のコマンドで接続を行います。

$sudo /root/vpn/array_vpnc64 -hostname https://vpn.dal05.softlayer.com -username sl_userid -passwd vpn_password
array_vpnc: VPN TUNNEL SUCCESSFUL!

実際に何れかのサーバへpingを実施します。

vagrant@vagrant-ubuntu-trusty:~$ ping 10.160.143.40
PING 10.160.143.40 (10.160.143.40) 56(84) bytes of data.
64 bytes from 10.160.143.40: icmp_seq=1 ttl=54 time=219 ms
64 bytes from 10.160.143.40: icmp_seq=2 ttl=54 time=240 ms
^C
--- 10.160.143.40 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 219.371/229.917/240.463/10.546 ms

このようにプライベートアドレスに対して通信ができるようになりました。SoftLayerはよくも悪くも標準では全てのサーバにパブリックIPアドレスが付与されてしまうので可能な限り通信制御を行ったうえでこの様案SSL-VPNなどを利用するのが良いかと思います。