From c1eb2f8fa960bfbc6628d6c8097583cb7e2f486f Mon Sep 17 00:00:00 2001 From: Bin Hu Date: Tue, 22 Dec 2015 23:39:23 -0800 Subject: [PATCH] JIRA: IPVSIX-29 Change-Id: I4ecf98d57c167db6b5f79f5cc85c45add0c02f1a Signed-off-by: Bin Hu --- .../2-ipv6-configguide-os-controller.rst | 5 +- .../3-ipv6-configguide-os-compute.rst | 8 +- .../4-ipv6-configguide-servicevm.rst | 324 +++++++++++++++++++++ .../images/ipv6-sample-in-horizon.png | Bin 0 -> 37529 bytes docs/setupservicevm/index.rst | 1 + 5 files changed, 330 insertions(+), 8 deletions(-) create mode 100644 docs/setupservicevm/4-ipv6-configguide-servicevm.rst create mode 100644 docs/setupservicevm/images/ipv6-sample-in-horizon.png diff --git a/docs/setupservicevm/2-ipv6-configguide-os-controller.rst b/docs/setupservicevm/2-ipv6-configguide-os-controller.rst index be767f9..f6224e8 100644 --- a/docs/setupservicevm/2-ipv6-configguide-os-controller.rst +++ b/docs/setupservicevm/2-ipv6-configguide-os-controller.rst @@ -29,10 +29,9 @@ For exemplary purpose, we assume: ``http://fpaste.org/276949/39476214/`` - **Note 1**: you need to change the IP address of ``ODL_MGR_IP`` to point to your actual IP address +* Note 1: you need to change the IP address of ``ODL_MGR_IP`` to point to your actual IP address of Open Daylight Controller. - - **Note 2**: You may have to change the value of ``ODL_PROVIDER_MAPPINGS`` and ``PUBLIC_INTERFACE`` +* Note 2: You may have to change the value of ``ODL_PROVIDER_MAPPINGS`` and ``PUBLIC_INTERFACE`` to match your actual network interfaces. **OS-N-6**: Initiate Openstack setup by invoking ``stack.sh`` diff --git a/docs/setupservicevm/3-ipv6-configguide-os-compute.rst b/docs/setupservicevm/3-ipv6-configguide-os-compute.rst index c7042a3..d4208bc 100644 --- a/docs/setupservicevm/3-ipv6-configguide-os-compute.rst +++ b/docs/setupservicevm/3-ipv6-configguide-os-compute.rst @@ -29,13 +29,11 @@ For exemplary purpose, we assume: ``http://fpaste.org/276958/44395955/`` - **Note 1**: you need to change the IP address of ``SERVICE_HOST`` to point to your actual IP address +*Note 1: you need to change the IP address of ``SERVICE_HOST`` to point to your actual IP address of OpenStack Controller. - - **Note 2**: you need to change the IP address of ``ODL_MGR_IP`` to point to your actual IP address +*Note 2: you need to change the IP address of ``ODL_MGR_IP`` to point to your actual IP address of Open Daylight Controller. - - **Note 3**: You may have to change the value of ``ODL_PROVIDER_MAPPINGS`` and ``PUBLIC_INTERFACE`` +*Note 3: You may have to change the value of ``ODL_PROVIDER_MAPPINGS`` and ``PUBLIC_INTERFACE`` to match your actual network interface. **OS-M-6**: Initiate Openstack setup by invoking ``stack.sh`` diff --git a/docs/setupservicevm/4-ipv6-configguide-servicevm.rst b/docs/setupservicevm/4-ipv6-configguide-servicevm.rst new file mode 100644 index 0000000..1ffbc53 --- /dev/null +++ b/docs/setupservicevm/4-ipv6-configguide-servicevm.rst @@ -0,0 +1,324 @@ +========================================== +Setting Up a Service VM as an IPv6 vRouter +========================================== + +Now we can start to set up a service VM as an IPv6 vRouter. For exemplary purpose, we assume: + +* The hostname of Open Daylight Controller Node is ``opnfv-odl-controller`` +* The hostname of OpenStack Controller Node is ``opnfv-os-controller`` +* The hostname of OpenStack Compute Node is ``opnfv-os-compute`` +* We use ``opnfv`` as username to login. +* We use ``devstack`` to install OpenStack Kilo, and the directory is ``~/devstack`` +* Note: all IP addresses as shown below are for exemplary purpose. + +*************************************************** +Source the Credentials in OpenStack Controller Node +*************************************************** + +**SETUP-SVM-1**: Login with username ``opnfv`` in OpenStack Controller Node ``opnfv-os-controller``. +Start a new terminal, and change directory to where OpenStack is installed. + + ``cd ~/devstack`` + +**SETUP-SVM-2**: Source the credentials. + + ``opnfv@opnfv-os-controller:~/devstack$ source openrc admin demo`` + +************************************** +Add External Connectivity to ``br-ex`` +************************************** + +Because we need to manually create networks/subnets to achieve the IPv6 vRouter, we have used the flag +``NEUTRON_CREATE_INITIAL_NETWORKS=False`` in ``local.conf`` file. When this flag is set to False, +``devstack`` does not create any networks/subnets during the setup phase. + +In OpenStack Controller Node ``opnfv-os-controller``, ``eth1`` is configured to provide external/public connectivity +for both IPv4 and IPv6. So let us add this interface to ``br-ex`` and move the IP address, including the default route +from ``eth1`` to ``br-ex``. + +**SETUP-SVM-3**: Add ``eth1`` to ``br-ex`` and move the IP address and the default route from ``eth1`` to ``br-ex`` + + ``sudo ip addr del dev eth1 && sudo ovs-vsctl add-port br-ex eth1 && +sudo ifconfig eth1 up && sudo ip addr add dev br-ex && sudo ifconfig +br-ex up && sudo ip route add default via dev br-ex`` + +* Note: This can be automated in /etc/network/interfaces. + +**SETUP-SVM-4**: Verify that ``br-ex`` now has the original external IP address, and that the default route is on +``br-ex`` + + ``opnfv@opnfv-os-controller:~/devstack$ ip a s br-ex`` +| 38: br-ex: mtu 1430 qdisc noqueue state UNKNOWN group default +| link/ether 00:50:56:82:42:d1 brd ff:ff:ff:ff:ff:ff +| inet 198.59.156.113/24 brd 198.59.156.255 scope global br-ex +| valid_lft forever preferred_lft forever +| inet6 fe80::543e:28ff:fe70:4426/64 scope link +| valid_lft forever preferred_lft forever + + ``opnfv@opnfv-os-controller:~/devstack$ ip route`` +| default via 198.59.156.1 dev br-ex +| 10.134.156.0/24 dev eth0 proto kernel scope link src 10.134.156.113 +| 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 +| 198.59.156.0/24 dev br-ex proto kernel scope link src 198.59.156.113 + +* Note: The IP addresses above are exemplary purpose + +******************************************************** +Create IPv4 Subnet and Router with External Connectivity +******************************************************** + +**SETUP-SVM-5**: Create a Neutron router ``ipv4-router`` which needs to provide external connectivity. + + ``neutron router-create ipv4-router`` + +**SETUP-SVM-6**: Create an external network/subnet ``ext-net`` using the appropriate values based on the +data-center physical network setup. + + ``neutron net-create --router:external ext-net`` + + ``neutron subnet-create --disable-dhcp --allocation-pool start=198.59.156.251,end=198.59.156.254 --gateway +198.59.156.1 ext-net 198.59.156.0/24`` + +* Note: The IP addresses in the command above are for exemplary purpose. **Please replace the IP addresses of +your actual network**. + +**SETUP-SVM-7**: Associate the ``ext-net`` to the Neutron router ``ipv4-router``. + + ``neutron router-gateway-set ipv4-router ext-net`` + +**SETUP-SVM-8**: Create an internal/tenant IPv4 network ``ipv4-int-network1`` + + ``neutron net-create ipv4-int-network1`` + +**SETUP-SVM-9**: Create an IPv4 subnet ``ipv4-int-subnet1`` in the internal network ``ipv4-int-network1`` + + ``neutron subnet-create --name ipv4-int-subnet1 --dns-nameserver 8.8.8.8 ipv4-int-network1 20.0.0.0/24`` + +* Note: The IP addresses in the command above are for exemplary purpose. **Please replace the IP addresses of your +actual network** + +**SETUP-SVM-10**: Associate the IPv4 internal subnet ``ipv4-int-subnet1`` to the Neutron router ``ipv4-router``. + + ``neutron router-interface-add ipv4-router ipv4-int-subnet1`` + +******************************************************** +Create IPv6 Subnet and Router with External Connectivity +******************************************************** + +Now, let us create a second neutron router where we can "manually" spawn a ``radvd`` daemon to simulate an external +IPv6 router. + +**SETUP-SVM-11**: Create a second Neutron router ``ipv6-router`` which needs to provide external connectivity + + ``neutron router-create ipv6-router`` + +**SETUP-SVM-12**: Associate the ``ext-net`` to the Neutron router ``ipv6-router`` + + ``neutron router-gateway-set ipv6-router ext-net`` + +**SETUP-SVM-13**: Create a second internal/tenant IPv4 network ``ipv4-int-network2`` + + ``neutron net-create ipv4-int-network2`` + +**SETUP-SVM-14**: Create an IPv4 subnet ``ipv4-int-subnet2`` for the ``ipv6-router`` internal network +``ipv4-int-network2`` + + ``neutron subnet-create --name ipv4-int-subnet2 --dns-nameserver 8.8.8.8 ipv4-int-network2 10.0.0.0/24`` + +* Note: The IP addresses in the command above are for exemplary purpose. **Please replace the IP addresses of +your actual network** + +**SETUP-SVM-15**: Associate the IPv4 internal subnet ``ipv4-int-subnet2`` to the Neutron router ``ipv6-router``. + + ``neutron router-interface-add ipv6-router ipv4-int-subnet2`` + +************************************************** +Prepare Image, Metadata and Keypair for Service VM +************************************************** + +**SETUP-SVM-16**: Download ``fedora20`` image which would be used as ``vRouter`` + + ``glance image-create --name 'Fedora20' --disk-format qcow2 --container-format bare --is-public true --copy-from http://cloud.fedoraproject.org/fedora-20.x86_64.qcow2`` + +**SETUP-SVM-17**: Create a keypair + + ``nova keypair-add vRouterKey > ~/vRouterKey`` + +**SETUP-SVM-18**: Copy the contents from the following url to ``metadata.txt``, i.e. preparing metadata which enables +IPv6 router functionality inside ``vRouter`` + + ``http://fpaste.org/303942/50781923/`` + +* Note: this ``metadata.txt`` will enable the ``vRouter`` to automatically spawn a ``radvd`` daemon, which advertises +its IPv6 subnet prefix ``2001:db8:0:2::/64`` in RA (Router Advertisement) message through its ``eth1`` interface to +other VMs on ``ipv4-int-network1``. The ``radvd`` daemon also advertises the routing information, which routes to +``2001:db8:0:2::/64`` subnet, in RA (Router Advertisement) message through its ``eth0`` interface to ``eth1`` +interface of ``ipv6-router`` on ``ipv4-int-network2``. + +********************************************************************************************************** +Boot Service VM (``vRouter``) with ``eth0`` on ``ipv4-int-network2`` and ``eth1`` on ``ipv4-int-network1`` +********************************************************************************************************** + +Let us boot the service VM (``vRouter``) ``eth0`` interface on ``ipv4-int-network2`` connecting to ``ipv6-router``, +and ``eth1`` interface on ``ipv4-int-network1`` connecting to ``ipv4-router``. + +**SETUP-SVM-19**: Boot the ``vRouter`` using ``Fedora20`` image on the OpenStack Compute Node with hostname +``opnfv-os-compute`` + + ``nova boot --image Fedora20 --flavor m1.small --user-data ./metadata.txt --availability-zone nova:opnfv-os-compute +--nic net-id=$(neutron net-list | grep -w ipv4-int-network2 | awk '{print $2}') +--nic net-id=$(neutron net-list | grep -w ipv4-int-network1 | awk '{print $2}') --key-name vRouterKey vRouter`` + +**SETUP-SVM-20**: Verify that ``Fedora20`` image boots up successfully and the ssh keys are properly injected + + ``nova list`` + + ``nova console-log vRouter`` + +* Note: It may take few minutes for the necessary packages to get installed and ssh keys to be injected. + + ``# Sample Output`` +| [ 762.884523] cloud-init[871]: ec2: ############################################################# +| [ 762.909634] cloud-init[871]: ec2: -----BEGIN SSH HOST KEY FINGERPRINTS----- +| [ 762.931626] cloud-init[871]: ec2: 2048 e3:dc:3d:4a:bc:b6:b0:77:75:a1:70:a3:d0:2a:47:a9 (RSA) +| [ 762.957380] cloud-init[871]: ec2: -----END SSH HOST KEY FINGERPRINTS----- +| [ 762.979554] cloud-init[871]: ec2: ############################################################# + +******************************************* +Boot Two Other VMs in ``ipv4-int-network1`` +******************************************* + +In order to verify that the setup is working, let us create two cirros VMs with ``eth1`` interface on the +``ipv4-int-network1``, i.e., connecting to ``vRouter`` ``eth1`` interface for internal network. + +We will have to configure appropriate ``mtu`` on the VMs' interface by taking into account the tunneling +overhead and any physical switch requirements. If so, push the ``mtu`` to the VM either using ``dhcp`` +options or via ``meta-data``. + +**SETUP-SVM-21**: Create VM1 on OpenStack Controller Node with hostname ``opnfv-os-controller`` + + ``nova boot --image cirros-0.3.4-x86_64-uec --flavor m1.tiny --nic net-id=$(neutron net-list | +grep -w ipv4-int-network1 | awk '{print $2}') +--availability-zone nova:opnfv-os-controller --key-name vRouterKey VM1`` + +**SETUP-SVM-22**: Create VM2 on OpenStack Compute Node with hostname ``opnfv-os-compute`` + + ``nova boot --image cirros-0.3.4-x86_64-uec --flavor m1.tiny --nic net-id=$(neutron net-list | +grep -w ipv4-int-network1 | awk '{print $2}') +--availability-zone nova:opnfv-os-compute --key-name vRouterKey VM2`` + +**SETUP-SVM-23**: Confirm that both the VMs are successfully booted. + + ``nova list`` + + ``nova console-log VM1`` + + ``nova console-log VM2`` + +********************************** +Spawn ``RADVD`` in ``ipv6-router`` +********************************** + +Let us manually spawn a ``radvd`` daemon inside ``ipv6-router`` namespace to simulate an external router. +First of all, we will have to identify the ``ipv6-router`` namespace and move to the namespace. + +**SETUP-SVM-24**: identify the ``ipv6-router`` namespace and move to the namespace + + ``sudo ip netns exec qrouter-$(neutron router-list | grep -w ipv6-router | awk '{print $2}') bash`` + +**SETUP-SVM-25**: Upon successful execution of the above command, you will be in the router namespace. +Now let us configure the IPv6 address on the interface. + + ``router_interface=$(ip a s | grep -w "global qr-*" | awk '{print $7}')`` + + ``ip -6 addr add 2001:db8:0:1::1 dev $router_interface`` + +**SETUP-SVM-26**: Copy the following contents to some file, e.g. ``/tmp/br-ex.radvd.conf`` + +.. code-block:: + + interface $router_interface + { + AdvSendAdvert on; + MinRtrAdvInterval 3; + MaxRtrAdvInterval 10; + prefix 2001:db8:0:1::/64 + { + AdvOnLink on; + AdvAutonomous on; + }; + }; + +**SETUP-SVM-27**: Spawn a ``radvd`` daemon to simulate an external router. This ``radvd`` daemon advertises its +IPv6 subnet prefix ``2001:db8:0:1::/64`` in RA (Router Advertisement) message through its ``eth1`` interface to +``eth0`` interface of ``vRouter`` on ``ipv4-int-network2``. + + ``$radvd -C /tmp/br-ex.radvd.conf -p /tmp/br-ex.pid.radvd -m syslog`` + +**SETUP-SVM-28**: Configure the ``$router_interface`` process entries to process the RA (Router Advertisement) +message from ``vRouter``, and automatically add a downstream route pointing to the LLA (Link Local Address) of +``eth0`` interface of the ``vRouter``. + +.. code-block:: + + sysctl -w net.ipv6.conf.$router_interface.accept_ra=2 + sysctl -w net.ipv6.conf.$router_interface.accept_ra_rt_info_max_plen=64 + +**SETUP-SVM-29**: Please note that after the vRouter successfully initializes and starts sending RA (Router +Advertisement) message (**SETUP-SVM-20**), you would see an IPv6 route to the ''2001:db8:0:2::/64'' prefix +(subnet) reachable via LLA (Link Local Address) of ``eth0`` interface of the ``vRouter``. You can execute the +following command to list the IPv6 routes. + + ``ip -6 route show`` + +******************************** +Testing to Verify Setup Complete +******************************** + +Now, let us ``ssh`` to one of the VMs, e.g. VM1, to confirm that it has successfully configured the IPv6 address +using ``SLAAC`` with prefix ``2001:db8:0:2::/64`` from ``vRouter``. + + * Note: You need to get the IPv4 address associated to VM1. This can be inferred from ``nova list`` command. + +**SETUP-SVM-30**: ``ssh`` VM1 + + ``ssh -i /home/odl/vRouterKey cirros@`` + +If everything goes well, ``ssh`` will be successful and you will be logged into VM1. Run some commands to verify +that IPv6 addresses are configured on ``eth0`` interface. + +**SETUP-SVM-31**: Show an IPv6 address with a prefix of ``2001:db8:0:2::/64`` + + ``ip address show`` + +**SETUP-SVM-32**: ping some external IPv6 address, e.g. ``ipv6-router`` + + ``ping6 2001:db8:0:1::1`` + +If the above ping6 command succeeds, it implies that ``vRouter`` was able to successfully forward the IPv6 traffic +to reach external ``ipv6-router``. + +**SETUP-SVM-33**: When all tests show that the setup works as expected, You can now exit the ``ipv6-router`` namespace. + + ``exit`` + +********** +Next Steps +********** + +Congratulations, you have completed the setup of using a service VM to act as an IPv6 vRouter. This setup allows further +open innovation by any 3rd-party. Please refer to relevant sections in User's Guide for further value-added services on +this IPv6 vRouter. + +******************************************************** +Sample Network Topology of this Setup through Horizon UI +******************************************************** + +The sample network topology of above setup is shown in Horizon UI as follows :numref:`figure3`: + +.. figure:: images/ipv6-sample-in-horizon.png + :name: figure3 + :width: 100% + + Sample Network Topology in Horizon UI + diff --git a/docs/setupservicevm/images/ipv6-sample-in-horizon.png b/docs/setupservicevm/images/ipv6-sample-in-horizon.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb03f9b3d115581b5621d187effbe1b5e907a2f GIT binary patch literal 37529 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