Skip to content

Using IPv6 on vSphere


BOSH supports IPv6 on vSphere since version bosh-release v264+, stemcell 3468.11+ and CLI v2.0.45+.

In this guide we explore how to configure BOSH in an IPv6-enabled environment.

Two possible deployment options:

  • pure IPv6 configuration: both Director and deployed VMs use IPv6 addresses exclusively (currently being worked on)

  • hybrid IPv6 configuration: Director is on IPv4 and deployed VMs use IPv4 and IPv6 addresses

Hybrid IPv6 configuration

In this example, we use the BOSH CLI and bosh-deployment to deploy a Director with an IPv4 address and then deploy VMs with IPv4 and IPv6 addresses.


  • All IPv6 address must be specified in expanded format, leading zeroes, no double-colons. This applies to all variables, deployment manifests, cloud config, etc.

  • Use Simple DNS's generator to obtain a private IPv6 address range.


  1. To deploy the Director use bosh create-env command with additional IPv6-specific ops files. See Creating environment on vSphere for more details on initializing Director on vSphere.

    # Create directory to keep state
    $ mkdir ipv6 && cd ipv6
    # Clone Director templates
    $ git clone
    $ bosh create-env bosh-deployment/bosh.yml \
        --state=state.json \
        --vars-store=creds.yml \
        -o bosh-deployment/vsphere/cpi.yml \
        -o bosh-deployment/vsphere/resource-pool.yml \
        -o bosh-deployment/jumpbox-user.yml \
        -o bosh-deployment/uaa.yml \
        -o bosh-deployment/credhub.yml \
        -v director_name=ipv6 \
        -v internal_cidr= \
        -v internal_gw= \
        -v internal_ip= \
        -v network_name="VM Network" \
        -v vcenter_dc=dc \
        -v vcenter_cluster=cl \
        -v vcenter_rp=IPv6 \
        -v vcenter_ds=SSD-0 \
        -v vcenter_ip= \
        -v vcenter_user=administrator@vsphere.local \
        -v vcenter_password=TheClothesMakethTheMan \
        -v vcenter_templates=bosh-ipv6-templates \
        -v vcenter_vms=bosh-ipv6-vms \
        -v vcenter_disks=bosh-ipv6-disks
  2. Connect to the Director:

    $ bosh alias-env ipv6 -e --ca-cert <(bosh int ./creds.yml --path /director_ssl/ca)
    $ export BOSH_CLIENT=admin
    $ export BOSH_CLIENT_SECRET=`bosh int ./creds.yml --path /admin_password`
  3. Confirm that it works:

    $ bosh -e ipv6 env
    Using environment '' as '?'
    Name: ...
    User: admin

Deploy example Zookeeper deployment

Follow steps below or the deploy workflow that goes through the same steps but with more explanation.

  1. Update configs

    # ipv6-net.yml
    - name: ipv6
      type: manual
      - azs: [z1, z2, z3]
          name: VM Network
        - 2001:4860:4860:0000:0000:0000:0000:8888
        - 2001:4860:4860:0000:0000:0000:0000:8844
        gateway: 2601:646:100:69f0:20d:b9ff:fe48:9249
        range: 2601:0646:0100:69f0:0000:0000:0000:0000/64
        - 2601:0646:0100:69f0:0000:0000:0000:0000-2601:0646:0100:69f0:0000:0000:0000:0020
    $ bosh -e ipv6 update-cloud-config ~/workspace/bosh-deployment/vsphere/cloud-config.yml \
        -v vcenter_cluster=cl \
        -v internal_cidr= \
        -v internal_gw= \
        -v network_name="VM Network" \
    $ bosh -e ipv6 update-config cloud --name ipv6 ipv6-net.yml
    $ bosh -e ipv6 update-runtime-config ~/workspace/bosh-deployment/runtime-configs/dns.yml
  2. Upload stemcell

    $ bosh -e ipv6 upload-stemcell \
      --sha1 1691f18b9141ac59aec893a1e8437a7d68a88038

    Note that IPv6 is currently only available for Ubuntu Trusty stemcells.

  3. Deploy example deployment and see IPv6 addresses

    # ipv6-net-use.yml
    - type: replace
      path: /features?/use_dns_addresses
      value: true
    - type: replace
      path: /instance_groups/name=zookeeper/networks/0/default?
      value: [dns, gateway]
    - type: replace
      path: /instance_groups/name=zookeeper/networks/-
        name: ipv6
    - type: replace
      path: /instance_groups/name=smoke-tests/jobs/name=smoke-tests/consumes?/conn/network
      value: ipv6
    $ bosh -e ipv6 -d zookeeper deploy <(wget -O- \
      -o ipv6-net-use.yml
    $ bosh -e ipv6 -d zookeeper instances
  4. Run Zookeeper smoke tests

    $ bosh -e ipv6 -d zookeeper run-errand smoke-tests