{"id":136,"date":"2014-08-08T00:41:22","date_gmt":"2014-08-08T00:41:22","guid":{"rendered":"http:\/\/outworx.com\/blog\/?p=136"},"modified":"2017-01-19T10:13:27","modified_gmt":"2017-01-19T10:13:27","slug":"setting-up-point-to-site-openvpn-on-microsoft-azure","status":"publish","type":"post","link":"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/","title":{"rendered":"Setting up Point-to-Site OpenVPN on Microsoft Azure"},"content":{"rendered":"<p>Microsoft Azure has some nice <a title=\"VPN Prices\" href=\"http:\/\/azure.microsoft.com\/en-us\/pricing\/details\/virtual-network\/\">paid services<\/a> for creating site-to-site VPN.\u00a0 Using these, you can create a hybrid cloud that connects your enterprise network to a Virtual Network on Azure.\u00a0 But if you just want connect to a single Azure VM, this may be overkill.<\/p>\n<p>This article discusses how to use OpenVPN to connect a Windows client on your local network to a Linux VM running in Azure.\u00a0\u00a0 We will be following the general outline found at the <a title=\"OpenVPN HOWTO\" href=\"https:\/\/openvpn.net\/index.php\/open-source\/documentation\/howto.html\">OpenVPN HOWTO<\/a>.\u00a0 Our Azure VM is running Ubuntu 14.04LTS.<\/p>\n<h1><strong>Add OpenVPN to the Network ACL<\/strong><\/h1>\n<p>Go the the Virtual Machines tab in the Azure portal.\u00a0 Select the VM you want, and click on its Endpoints tab.\u00a0 At the bottom of the screen, click on &#8216;+ ADD&#8217; to add a new endpoint for OpenVPN.<\/p>\n<figure id=\"attachment_138\" aria-describedby=\"caption-attachment-138\" style=\"width: 584px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Endpoints.png\"><img loading=\"lazy\" class=\"wp-image-138 size-large\" src=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Endpoints-1024x703.png\" alt=\"Endpoints\" width=\"584\" height=\"400\" srcset=\"https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Endpoints-1024x703.png 1024w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Endpoints-300x206.png 300w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Endpoints-436x300.png 436w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Endpoints.png 1205w\" sizes=\"(max-width: 584px) 85vw, 584px\" \/><\/a><figcaption id=\"caption-attachment-138\" class=\"wp-caption-text\">Figure 1 &#8211; Click on the &#8216;+ ADD&#8217; button to add a new endpoint.<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p>A small Wizard will pop-up to add the endpoint.\u00a0 Take the default setting to &#8216;Add a stand-alone endpoint&#8217;, and click the check mark to go to the next screen.<\/p>\n<figure id=\"attachment_139\" aria-describedby=\"caption-attachment-139\" style=\"width: 877px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/AddEndpoint1.png\"><img loading=\"lazy\" class=\"wp-image-139 size-full\" src=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/AddEndpoint1.png\" alt=\"Add Endpoint 1\" width=\"877\" height=\"722\" srcset=\"https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/AddEndpoint1.png 877w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/AddEndpoint1-300x246.png 300w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/AddEndpoint1-364x300.png 364w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><figcaption id=\"caption-attachment-139\" class=\"wp-caption-text\">Figure 2 &#8211; Take the default setting on this screen.<\/figcaption><\/figure>\n<p>In the screen below, enter &#8216;OpenVPN&#8217; in the pulldown.\u00a0 Set the protocol to UDP.\u00a0 OpenVPN&#8217;s official port number is 1194, so set both the public and the private ports to that.\u00a0 Click on the check mark to actually add the endpoint.<\/p>\n<figure id=\"attachment_141\" aria-describedby=\"caption-attachment-141\" style=\"width: 869px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/AddEndpoint2.png\"><img loading=\"lazy\" class=\"wp-image-141 size-full\" src=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/AddEndpoint2.png\" alt=\"The second screen to add an endpoing\" width=\"869\" height=\"723\" srcset=\"https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/AddEndpoint2.png 869w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/AddEndpoint2-300x249.png 300w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/AddEndpoint2-360x300.png 360w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><figcaption id=\"caption-attachment-141\" class=\"wp-caption-text\">Figure 3 &#8211; Set the protocol to UDP and both ports to 1194<\/figcaption><\/figure>\n<p>The Azure portal will take you back to Figure 1 while it works on changing its firewall rules for this VM to grant access on the specified port.\u00a0 Note that Azure merely configures its own networking, and does not alter any internal firewall rules in the VM.\u00a0 Azure will not change <em>iptables<\/em> for you.\u00a0 If you set-up a Linux firewall on your VM, you&#8217;ll need to change it yourself to let UDP port 1194 through.\u00a0 However, if you just booted a machine from the Microsoft Gallery, this should not be a problem.\u00a0 By default, <em>iptables<\/em> are not turned on on Gallery VMs.<\/p>\n<h2><strong>Limiting Network Access<\/strong><\/h2>\n<p>Next, you will almost certainly want to limit network access to this VM.\u00a0 Make sure that the OpenVPN endpoint is highlighted.<\/p>\n<figure id=\"attachment_142\" aria-describedby=\"caption-attachment-142\" style=\"width: 584px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/HighlightOpenVPN.png\"><img loading=\"lazy\" class=\"wp-image-142 size-large\" src=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/HighlightOpenVPN-1024x708.png\" alt=\"OpenVPN Highlight\" width=\"584\" height=\"403\" srcset=\"https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/HighlightOpenVPN-1024x708.png 1024w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/HighlightOpenVPN-300x207.png 300w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/HighlightOpenVPN-433x300.png 433w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/HighlightOpenVPN.png 1196w\" sizes=\"(max-width: 584px) 85vw, 584px\" \/><\/a><figcaption id=\"caption-attachment-142\" class=\"wp-caption-text\">Figure 4 &#8211; Make sure the OpenVPN row is highlighted<\/figcaption><\/figure>\n<p>Now click on &#8216;Manage ACL&#8217;.\u00a0 Enter the external IP address that your company uses to access the Internet.\u00a0 Follow it with a &#8216;\/32&#8217; as shown below to indicate that access is only granted to this single IP address, and not a larger subnet.<\/p>\n<p>If you have DSL and don&#8217;t know what that address is, go to someplace like <a title=\"What is My Ip Address\" href=\"http:\/\/whatismyipaddress.com\/\" target=\"_blank\">whatismyipaddress.com<\/a>.\u00a0 Low end DSL will often change the IP address when the router is rebooted.\u00a0 If that happens, you can just update the ACL.<\/p>\n<figure id=\"attachment_143\" aria-describedby=\"caption-attachment-143\" style=\"width: 476px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/MyExternalIPAddress.png\"><img loading=\"lazy\" class=\"wp-image-143 \" src=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/MyExternalIPAddress.png\" alt=\"Limiting Network Access\" width=\"476\" height=\"433\" srcset=\"https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/MyExternalIPAddress.png 893w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/MyExternalIPAddress-300x272.png 300w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/MyExternalIPAddress-330x300.png 330w\" sizes=\"(max-width: 476px) 85vw, 476px\" \/><\/a><figcaption id=\"caption-attachment-143\" class=\"wp-caption-text\">Figure 5 &#8211; Limiting access to your network alone is important for security<\/figcaption><\/figure>\n<p>While you are there, limit access to ssh as well.\u00a0 Bots from China and other countries continually probe ssh and other ports trying to break in.<\/p>\n<h1><strong>Configuring the Linux VM Server<\/strong><\/h1>\n<p>The VM will be the OpenVPN server.\u00a0 To start the configuration process, we need to install some software on it.<\/p>\n<h2><strong>Install OpenVPN and Easy RSA<\/strong><\/h2>\n<p>Logon to your VM, and install OpenVPN and Easy RSA.\u00a0 Our VM is running Ubuntu 14.04LTS, so it can easily be installed with the simple command<\/p>\n<pre>$sudo apt-get install openvpn easy-rsa<\/pre>\n<p>The simplest way to set-up OpenVPN is to use a Static Key.\u00a0 This will give you exactly one client and one server.\u00a0 If that is fine with you, you can follow these <a title=\"Static Key Mini-HOWTO\" href=\"https:\/\/openvpn.net\/index.php\/open-source\/documentation\/miscellaneous\/78-static-key-mini-howto.html\">instruction<\/a>.\u00a0 We will set-up things with PKI certificates so that multiple clients can connect to the VM.<\/p>\n<h2><strong>Set Up Easy RSA<\/strong><\/h2>\n<p>Now set-up the Easy RSA environment under \/etc\/openvpn on the VM.\u00a0 Run the following commands:<\/p>\n<pre>\u00a0$ cd \/etc\/openvpn\r\n $ sudo mkdir easy-rsa\r\n $ cd easy-rsa\r\n $ sudo make-cadir my_ca\r\n $ sudo bash\r\n # cd my_ca<\/pre>\n<p>Now we need to edit the vars file, and make sure that the following variables are set:<\/p>\n<ul>\n<li>KEY_COUNTRY<\/li>\n<li>KEY_PROVINCE<\/li>\n<li>KEY_CITY<\/li>\n<li>KEY_ORG<\/li>\n<li>KEY_EMAIL<\/li>\n<\/ul>\n<pre># vi vars<\/pre>\n<p>Set them to appropriate values, and make sure that none of them are blank.\u00a0 For example, here are the values we set for OutworX:<\/p>\n<pre># These are the default values for fields\r\n# which will be placed in the certificate.\r\n# Don't leave any of these fields blank.\r\nexport KEY_COUNTRY=\"US\"\r\nexport KEY_PROVINCE=\"CA\"\r\nexport KEY_CITY=\"SantaClear\"\r\nexport KEY_ORG=\"OutworX\"\r\nexport KEY_EMAIL=\"info@outworx.com\"\r\nexport KEY_OU=\"R&amp;D\"\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h2><strong>\u00a0Initialize Easy RSA&#8217;s Public Key Infrastructure (PKI)<\/strong><\/h2>\n<p>Execute the following commands to initialize the Easy RSA environment, and to create a ROOT Certificate Authority.\u00a0 When build-ca offers you options, just press return to accept each one.<\/p>\n<pre># cd \/etc\/openvpn\/easy-rsa\/my_ca\r\n# . .\/vars\r\n# . .\/clean-all\r\n# . .\/build-ca<\/pre>\n<p><strong>Create the Server&#8217;s Certificate and Key<\/strong><\/p>\n<p>We can create the server&#8217;s certificate and key with the command below.\u00a0 It will prompt you for various values.\u00a0 You need to pay special attention to three of the prompts.<\/p>\n<ol>\n<li>For the &#8216;Common Name&#8217;, just accept the default value of &#8216;server&#8217;.<\/li>\n<li>When it asks something like, &#8220;Certificate is to be certified until Aug\u00a0 2 01:35:29 2024 GMT (3650 days) Sign the certificate? &#8220;, you must enter &#8216;<strong>y<\/strong>&#8216;.<\/li>\n<li>When it asks, &#8220;1 out of 1 certificate requests certified, commit? &#8220;, you must enter &#8216;<strong>y<\/strong>&#8216;.<\/li>\n<\/ol>\n<p>Also, when it asks you if you want to set a passphrase for the server key, just press return without entering a passphrase.\u00a0 If you enter a passphrase, then it will need to be entered each time the server starts.<\/p>\n<pre># .\/build-key-server server<\/pre>\n<p>&nbsp;<\/p>\n<h2><strong>Create the Client Certificate and Keys<\/strong><\/h2>\n<p>To create a client certificate and keys, run the command below.\u00a0 Please note that you <strong>must<\/strong> type &#8216;<strong>y<\/strong>&#8216; in response to the following two questions:<\/p>\n<ol>\n<li>Sign the certificate?<\/li>\n<li>1 out of 1 certificate requests certified, commit?<\/li>\n<\/ol>\n<pre># .\/build-key client1<\/pre>\n<p>If you want to create a certificate for a second client, simply change &#8216;client1&#8217; to &#8216;client2&#8217; in the command above.<\/p>\n<h2><strong>Generate Diffie Hellmann Parameters<\/strong><\/h2>\n<p>These are used by the server.\u00a0 Run the command below.<\/p>\n<pre>.\/build-dh<\/pre>\n<p><strong>Move the CA and Server Info into \/etc\/openvpn<\/strong><\/p>\n<p>We next move the following PKI related files to \/etc\/openvpn:<\/p>\n<ul>\n<li>The Diffie-Hellman Parameters<\/li>\n<li>The Root Certificate Authority certificate<\/li>\n<li>The server certificate and private key<\/li>\n<\/ul>\n<pre># cd \/etc\/openvpn\/easy-rsa\/my_ca\/keys\r\n# cp dh2048.pem ca.crt server.crt server.key \/etc\/openvpn<\/pre>\n<p>&nbsp;<\/p>\n<h2><strong>Configure the OpenVPN Configuration File<\/strong><\/h2>\n<p>Copy the sample server config file to \/etc\/openvpn.<\/p>\n<pre>$ cd \/usr\/share\/doc\/openvpn\/examples\/sample-config-files\r\n$ sudo cp server.conf.gz \/etc\/openvpn\r\n$ cd \/etc\/openvpn\r\n$ sudo gunzip server.conf.gz<\/pre>\n<p>Edit the server configuration file.<\/p>\n<pre>$ sudo vi server.conf<\/pre>\n<p>By default, the server.conf will use the 10.8.0.0\/24 subnet for its connections.\u00a0 This subnet must not already been in use, either by the Azure VM or the networks accessed by your client.\u00a0 If it is, change the following section of server.conf to use a different subnet.<\/p>\n<pre># Configure server mode and supply a VPN subnet\r\n# for OpenVPN to draw client addresses from.\r\n# The server will take 10.8.0.1 for itself,\r\n# the rest will be made available to clients.\r\n# Each client will be able to reach the server\r\n# on 10.8.0.1. Comment this line out if you are\r\n# ethernet bridging. See the man page for more info.\r\nserver 10.8.0.0 255.255.255.0\r\n\r\n<\/pre>\n<p>Make sure that the values for the Root Certificate Authority&#8217;s file and the server&#8217;s certificate and key match what you generated.\u00a0 If you followed the names in this blog, they already match the config file.<\/p>\n<pre># Any X509 key management system can be used.\r\n# OpenVPN can also use a PKCS #12 formatted key file\r\n# (see \"pkcs12\" directive in man page).\r\nca ca.crt\r\ncert server.crt\r\nkey server.key\u00a0 # This file should be kept secret<\/pre>\n<p>The value for the Difflie Hellman file needs to change from &#8216;dh dh1024.pem&#8217; to &#8216;dh dh2048.pem&#8217;<\/p>\n<pre># Diffie hellman parameters.\r\n# Generate your own with:\r\n#\u00a0\u00a0 openssl dhparam -out dh1024.pem 1024\r\n# Substitute 2048 for 1024 if you are using\r\n# 2048 bit keys.\r\ndh dh2048.pem<\/pre>\n<p>As an added security precaution, uncomment the lines &#8216;;user nobody&#8217; and &#8216;;group nogroup&#8217;.\u00a0 This will drop the privilege of the OpenVPN daemon after startup.<\/p>\n<pre># You can uncomment this out on\r\n# non-Windows systems.\r\nuser nobody\r\ngroup nogroup<\/pre>\n<p>&nbsp;<\/p>\n<h2><strong>Pushing a Route for DevStack<\/strong><\/h2>\n<p>Normally, you only need to use the external DNS name of the VM to connect to it.\u00a0 So most people can skip this section.\u00a0 However, if your application makes use of the server&#8217;s internal IP address, then you&#8217;ll probably want to push a route to it.\u00a0 The route will tell the client how to get the server&#8217;s internal IP.<\/p>\n<p>For example, DevStack normally configures itself using the server&#8217;s internal IP address.\u00a0 If you look in the Keystone service catalog of endpoints, you&#8217;ll see the internal IP address listed repeatedly.\u00a0 Since Keystone returns the service catalog to API users, all of those users will attempt to use the internal IP address.<\/p>\n<p>The good news is that OpenVPN has facilities for automatically pushing routes to clients.\u00a0 The bad news is that the internal IP address will change every time you stop (deallocate) the Azure VM and then restart it.\u00a0 We will write a small script that will update the OpenVPN config file with the current internal IP address each time the system boots.\u00a0 The script was tested on Ubuntu 14.04LTS.<\/p>\n<p>Take the following script, and place it in the file \/usr\/local\/bin\/openvpn-conf-update.sh.\u00a0 Make the script executable.<\/p>\n<pre>$ cd \/usr\/local\/bin\r\n$ sudo vi openvpn-conf-update.sh\r\n$ sudo chmod 0755 openvpn-conf-update.sh<\/pre>\n<pre>#!\/bin\/bash\r\n#\r\n# openvpn-conf-update.sh\r\n#\r\n# This script updates the OpenVPN configuration file \/etc\/conf\/server.conf.\r\n# The first IP address on any line with the ending comment\r\n#\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # AUTO-UPDATE-SERVER-IP\r\n# will be updated to the current IPv4 address for eth0.\r\n#\r\n# Copyright 2014 OutworX\r\n# Licensed under Apache 2. (http:\/\/www.apache.org\/licenses\/LICENSE-2.0)\r\n# This work is provided AS IS.\r\n\r\n\r\nCONFIG=\"\/etc\/openvpn\/server.conf\"\r\nIP4_REGEX=\"\\(\\([0-9][0-9]*\\.\\)\\{3\\}[0-9][0-9]*\\)\"\r\n\r\n# Get the IP 4 address of eth0.\r\nIPADDR=\"`ip -o -4 addr show eth0 | sed -n 's\/.*eth0[ \\t]*inet[ \\t]*'\\\"${IP4_REGE\r\nX}\\\"'.*\/\\1\/p'`\"\r\n \r\n# If the IP address was 0.0.0.0, then treat it as if we did not get an\r\n# IP address\r\nif [[ \"$IPADDR\" = \"0.0.0.0\"\u00a0 ]]\r\nthen\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 IPADDR=\"\"\r\nfi\r\n\r\n# If this server has an IP address on eth0 and the config file exists..\r\nif [[ -n \"$IPADDR\"\u00a0 &amp;&amp; -f \"$CONFIG\" ]]\r\nthen\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # Then update the first IP address we find on the line with a comment\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # that says '# AUTO-UPDATE-SERVER-IP'\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sed -i \"\/#[ \/t]*AUTO-UPDATE-SERVER-IP\/s\/${IP4_REGEX}\/${IPADDR}\/\" $CONFIG\r\nfi\r\n\r\nexit 0<\/pre>\n<p>&nbsp;<\/p>\n<p>Next add the following lines to \/etc\/default\/openvpn to invoke the script during OpenVPN startup.<\/p>\n<pre>$ cd \/etc\/default\r\n$ sudo vi openvpn<\/pre>\n<pre># This is the configuration file for \/etc\/init.d\/openvpn\r\n\r\n# If vpn is starting up, then update the configuration file with the\r\n# servers IP address on eth0.\r\nif [ \"$1\" = \"start\" ]\r\nthen\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/usr\/local\/bin\/openvpn-conf-update.sh\r\nfi<\/pre>\n<p>The added lines are shown in blue.<\/p>\n<p>Finally, edit the OpenVPN config file.<\/p>\n<p>$ cd \/etc\/openvpn\/ $ sudo vi server.conf<\/p>\n<p>Search for the word &#8216;push&#8217;.<\/p>\n<pre># Push routes to the client to allow it\r\n# to reach other private subnets behind\r\n# the server.\u00a0 Remember that these\r\n# private subnets will also need\r\n# to know to route the OpenVPN client\r\n# address pool (10.8.0.0\/255.255.255.0)\r\n# back to the OpenVPN server.\r\n;push \"route 192.168.10.0 255.255.255.0\"\r\n;push \"route 192.168.20.0 255.255.255.0\"<\/pre>\n<p>Add the following text with <em>server_internal_ip_address<\/em> replaced by your internal IP address.<\/p>\n<pre>push \"<em>server_internal_ip_address<\/em> 255.255.255.255\"\u00a0 # AUTO-UPDATE-SERVER-IP<\/pre>\n<p>The comment &#8216;# AUTO-UPDATE-SERVER-IP&#8217; at the end of the line if very important.\u00a0 The openvpn-conf-update.sh script searches for lines with that comment.\u00a0 When it finds such a line, it updates the first IP address on that line with the current IP address.<\/p>\n<p>If you are not sure what your internal IP address is, do a<\/p>\n<pre>$ ip addr show dev eth0<\/pre>\n<p>&nbsp;<\/p>\n<p>Here is a sample of the push directive in a server.conf file.\u00a0 The added lines are in blue.<\/p>\n<pre># Push routes to the client to allow it\r\n# to reach other private subnets behind\r\n# the server.\u00a0 Remember that these\r\n# private subnets will also need\r\n# to know to route the OpenVPN client\r\n# address pool (10.8.0.0\/255.255.255.0)\r\n# back to the OpenVPN server.\r\n;push \"route 192.168.10.0 255.255.255.0\"\r\n;push \"route 192.168.20.0 255.255.255.0\"\r\n\r\n# We have changed \/etc\/default\/openvpn so it will update a push statement\r\n# that has the comment AUTO-UPDATE-SERVER-IP on the same line.\r\n#\r\npush \"route 100.79.146.52 255.255.255.255\"\u00a0\u00a0\u00a0\u00a0\u00a0 # AUTO-UPDATE-SERVER-IP\r\n\r\n<\/pre>\n<p>Now every time the system boots, the internal IP address in the push directive will be updated.<\/p>\n<p>The server side configuration is now complete.<\/p>\n<h1><strong>\u00a0Configuring a Windows Client<\/strong><\/h1>\n<p><strong>Getting the Windows Client<\/strong><\/p>\n<p>You can get the Windows OpenVPN client <a title=\"OpenVPN Downloads\" href=\"https:\/\/openvpn.net\/index.php\/open-source\/downloads.html\">here<\/a>.<\/p>\n<p><strong>\u00a0Copy the Root Certificate Authority file and the Client Files to Windows<\/strong><\/p>\n<p>The client Windows system will need the following three PKI files:<\/p>\n<ul>\n<li>The Root Certificate Authority certificate<\/li>\n<li>The client certificate<\/li>\n<li>The client private key<\/li>\n<\/ul>\n<p>These were previously generated by Easy RSA on the Linux server.\u00a0 On the Linux server, copy these files to a <em>Downloads <\/em>directory in your home directory to make them easier to access when we copy them.<\/p>\n<pre>$ mkdir -m 0700 ~\/Downloads\r\n$ cd ~\/Downloads\r\n$ sudo cp \/etc\/openvpn\/easy-rsa\/my_ca\/keys\/ca.crt .\r\n$ sudo cp \/etc\/openvpn\/easy-rsa\/my_ca\/keys\/client1.crt .\r\n$ sudo cp \/etc\/openvpn\/easy-rsa\/my_ca\/keys\/client1.key .\r\n$ sudo chown $USER *<\/pre>\n<p>Now download the PKI files. We will download them to the Windows Download folder.\u00a0 If you have PuTTY installed, you can copy the files with pscp.\u00a0 The syntax to copy files from the remote system to the local one is<\/p>\n<pre>\u00a0\u00a0 C:\\&gt; pscp <em>remoteuser<\/em>@<em>remotehost<\/em>:<em>file\u00a0<\/em> <em>localfile<\/em><\/pre>\n<figure id=\"attachment_157\" aria-describedby=\"caption-attachment-157\" style=\"width: 677px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Download-PKI-Files-to-Windows.png\"><img loading=\"lazy\" class=\"size-full wp-image-157\" src=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Download-PKI-Files-to-Windows.png\" alt=\"Download PKI Files to Windows\" width=\"677\" height=\"342\" srcset=\"https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Download-PKI-Files-to-Windows.png 677w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Download-PKI-Files-to-Windows-300x151.png 300w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Download-PKI-Files-to-Windows-500x252.png 500w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/a><figcaption id=\"caption-attachment-157\" class=\"wp-caption-text\">Figure 7 &#8211; Downloading the PKI files to Windows<\/figcaption><\/figure>\n<p>You can now use Windows Explorer to copy the CA and client certificates and the client key to C:\\Program Files\\OpenVPN\\config<em>.<\/em>\u00a0 After you do this, your folder should look something like the following:<\/p>\n<figure id=\"attachment_167\" aria-describedby=\"caption-attachment-167\" style=\"width: 1013px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Windows-Conf-Directory.png\"><img loading=\"lazy\" class=\"size-full wp-image-167\" src=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Windows-Conf-Directory.png\" alt=\"Windows Conf Directory\" width=\"1013\" height=\"276\" srcset=\"https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Windows-Conf-Directory.png 1013w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Windows-Conf-Directory-300x81.png 300w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Windows-Conf-Directory-500x136.png 500w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><figcaption id=\"caption-attachment-167\" class=\"wp-caption-text\">Figure 8 &#8211; Windows config directory with PKI files in it.<\/figcaption><\/figure>\n<p>The Linux server has a sample client configuration file that we will use on the Windows client.\u00a0 We will use a <em>sed<\/em> command on the Linux server to do the following four things:<\/p>\n<ol>\n<li>Copy the client file to our Linux home directory.<\/li>\n<li>Change the name of the the base filename to <em>servername<\/em>.\u00a0\u00a0 We name the file after the server since that will help the Windows client keep track of which config file belongs to which remote server.<\/li>\n<li>Add a filename extension of &#8220;.ovpn&#8221;.\u00a0 Windows OpenVPN expects its config files to have this extension.<\/li>\n<li>Change the line endings on the file from the Linux line endings (&#8220;\\n&#8221;) to DOS line endings (&#8220;\\r\\n&#8221;)<\/li>\n<\/ol>\n<pre>$ sed 's\/$\/\\r\/' \/usr\/share\/doc\/openvpn\/examples\/sample-config-files\/client.conf &gt; ~\/AzureVM4OutworX.ovpn<\/pre>\n<p>We will now use pscp on the Window&#8217;s client to download the configuration file into our Windows Download directory.<\/p>\n<figure id=\"attachment_161\" aria-describedby=\"caption-attachment-161\" style=\"width: 677px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Config-File-Download1.png\"><img loading=\"lazy\" class=\"size-full wp-image-161\" src=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Config-File-Download1.png\" alt=\"Windows Client Config File Download\" width=\"677\" height=\"342\" srcset=\"https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Config-File-Download1.png 677w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Config-File-Download1-300x151.png 300w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Config-File-Download1-500x252.png 500w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/a><figcaption id=\"caption-attachment-161\" class=\"wp-caption-text\">Figure 9 &#8211; Downloading the client configuration file to Windows<\/figcaption><\/figure>\n<p>Double click on the config file we just downloaded to start Notepad on it.\u00a0 Change the line &#8216;remote my-server-1 1194&#8217; to use the Linux server&#8217;s Fully Qualified Domain Name.\u00a0 For example,<\/p>\n<pre># The hostname\/IP and port of the server.\r\n# You can have multiple remote entries\r\n# to load balance between the servers.\r\nremote AzureVM4OutworX.cloudapp.net 1194\r\n;remote my-server-2 1194<\/pre>\n<p>In the section on SSL\/TLS parameters, the parameters <em>ca<\/em>, <em>cert<\/em>, and <em>key<\/em> point to files for the Root Certificate Authority certificate, the client certificate and the client key.<\/p>\n<p>&nbsp;<\/p>\n<pre># SSL\/TLS parms.\r\n# See the server config file for more\r\n# description.\u00a0 It's best to use\r\n# a separate .crt\/.key file pair\r\n# for each client.\u00a0 A single ca\r\n# file can be used for all clients.\r\nca ca.crt\r\ncert client1.crt\r\nkey client1.key<\/pre>\n<p>&nbsp;<\/p>\n<p>The <a title=\"OpenVPN HOWTO Server and Client Config Files\" href=\"https:\/\/openvpn.net\/index.php\/open-source\/documentation\/howto.html#config\">OpenVPN HOWTO<\/a> also mentions that you should check the server and client config files have the same values for <strong>dev<\/strong>, <strong>proto<\/strong>, and (if used) <strong>comp-lzo<\/strong> and <strong>fragment<\/strong>.\u00a0 These values should already be the same.<\/p>\n<p>As a final step, copy the modified config file to C:\\Program Files\\OpenVPN\\config.<\/p>\n<p>The Windows client configuration is now complete.<\/p>\n<p><strong>Start the OpenVPN GUI<br \/>\n<\/strong><\/p>\n<p>To start the OpenVPN GUI, right click on its icon and select &#8216;Run as administrator&#8217;.\u00a0 OpenVPN will need to modify routes if the server pushes them to it, so Admin privileges are needed.<\/p>\n<figure id=\"attachment_162\" aria-describedby=\"caption-attachment-162\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Start-OpenVPN-GUI.png\"><img loading=\"lazy\" class=\"size-full wp-image-162\" src=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Start-OpenVPN-GUI.png\" alt=\"Start OpenVPN GUI\" width=\"310\" height=\"488\" srcset=\"https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Start-OpenVPN-GUI.png 310w, https:\/\/www.outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Start-OpenVPN-GUI-190x300.png 190w\" sizes=\"(max-width: 310px) 85vw, 310px\" \/><\/a><figcaption id=\"caption-attachment-162\" class=\"wp-caption-text\">Figure 10 &#8211; Be sure to run OpenVPN GUI with administrative permissions<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p>A small taskbar icon similar to the one below will appear at the bottom of the screen.<\/p>\n<p><a href=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/OpenGUI-Taskbar-Icon.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-163\" src=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/OpenGUI-Taskbar-Icon.png\" alt=\"OpenVPN GUI Taskbar icon\" width=\"31\" height=\"27\" \/><\/a><\/p>\n<p>Right click on it, and select <em>Connect<\/em> in the pop-up menu.\u00a0 Your VPN connection should be established.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Microsoft Azure has some nice paid services for creating site-to-site VPN.\u00a0 Using these, you can create a hybrid cloud that connects your enterprise network to a Virtual Network on Azure.\u00a0 But if you just want connect to a single Azure VM, this may be overkill. This article discusses how to use OpenVPN to connect a &hellip; <a href=\"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Setting up Point-to-Site OpenVPN on Microsoft Azure&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"xn-wppe-expiration":[],"xn-wppe-expiration-action":[],"xn-wppe-expiration-prefix":[],"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0},"categories":[16],"tags":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v17.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Setting up Point-to-Site OpenVPN on Microsoft Azure | OutworX<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Setting up Point-to-Site OpenVPN on Microsoft Azure | OutworX\" \/>\n<meta property=\"og:description\" content=\"Microsoft Azure has some nice paid services for creating site-to-site VPN.\u00a0 Using these, you can create a hybrid cloud that connects your enterprise network to a Virtual Network on Azure.\u00a0 But if you just want connect to a single Azure VM, this may be overkill. This article discusses how to use OpenVPN to connect a &hellip; Continue reading &quot;Setting up Point-to-Site OpenVPN on Microsoft Azure&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/\" \/>\n<meta property=\"og:site_name\" content=\"OutworX\" \/>\n<meta property=\"article:published_time\" content=\"2014-08-08T00:41:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-01-19T10:13:27+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Endpoints-1024x703.png\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.outworx.com\/blog\/#website\",\"url\":\"https:\/\/www.outworx.com\/blog\/\",\"name\":\"OutworX\",\"description\":\"Blogs, News and Updates of IT Industry | OutworX\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.outworx.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Endpoints-1024x703.png\",\"contentUrl\":\"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Endpoints-1024x703.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/#webpage\",\"url\":\"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/\",\"name\":\"Setting up Point-to-Site OpenVPN on Microsoft Azure | OutworX\",\"isPartOf\":{\"@id\":\"https:\/\/www.outworx.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/#primaryimage\"},\"datePublished\":\"2014-08-08T00:41:22+00:00\",\"dateModified\":\"2017-01-19T10:13:27+00:00\",\"author\":{\"@id\":\"https:\/\/www.outworx.com\/blog\/#\/schema\/person\/4a222258173fdc00e104b30c5fc10632\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.outworx.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Setting up Point-to-Site OpenVPN on Microsoft Azure\"}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.outworx.com\/blog\/#\/schema\/person\/4a222258173fdc00e104b30c5fc10632\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.outworx.com\/blog\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/91f39a5ea2f90d0d957945f581465a21?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/91f39a5ea2f90d0d957945f581465a21?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"description\":\"Outworx@Admin\",\"url\":\"https:\/\/www.outworx.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Setting up Point-to-Site OpenVPN on Microsoft Azure | OutworX","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/","og_locale":"en_US","og_type":"article","og_title":"Setting up Point-to-Site OpenVPN on Microsoft Azure | OutworX","og_description":"Microsoft Azure has some nice paid services for creating site-to-site VPN.\u00a0 Using these, you can create a hybrid cloud that connects your enterprise network to a Virtual Network on Azure.\u00a0 But if you just want connect to a single Azure VM, this may be overkill. This article discusses how to use OpenVPN to connect a &hellip; Continue reading \"Setting up Point-to-Site OpenVPN on Microsoft Azure\"","og_url":"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/","og_site_name":"OutworX","article_published_time":"2014-08-08T00:41:22+00:00","article_modified_time":"2017-01-19T10:13:27+00:00","og_image":[{"url":"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Endpoints-1024x703.png"}],"twitter_misc":{"Written by":"admin","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"https:\/\/www.outworx.com\/blog\/#website","url":"https:\/\/www.outworx.com\/blog\/","name":"OutworX","description":"Blogs, News and Updates of IT Industry | OutworX","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.outworx.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"ImageObject","@id":"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/#primaryimage","inLanguage":"en-US","url":"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Endpoints-1024x703.png","contentUrl":"http:\/\/outworx.com\/blog\/wp-content\/uploads\/2014\/08\/Endpoints-1024x703.png"},{"@type":"WebPage","@id":"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/#webpage","url":"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/","name":"Setting up Point-to-Site OpenVPN on Microsoft Azure | OutworX","isPartOf":{"@id":"https:\/\/www.outworx.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/#primaryimage"},"datePublished":"2014-08-08T00:41:22+00:00","dateModified":"2017-01-19T10:13:27+00:00","author":{"@id":"https:\/\/www.outworx.com\/blog\/#\/schema\/person\/4a222258173fdc00e104b30c5fc10632"},"breadcrumb":{"@id":"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.outworx.com\/blog\/setting-up-point-to-site-openvpn-on-microsoft-azure\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.outworx.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Setting up Point-to-Site OpenVPN on Microsoft Azure"}]},{"@type":"Person","@id":"https:\/\/www.outworx.com\/blog\/#\/schema\/person\/4a222258173fdc00e104b30c5fc10632","name":"admin","image":{"@type":"ImageObject","@id":"https:\/\/www.outworx.com\/blog\/#personlogo","inLanguage":"en-US","url":"https:\/\/secure.gravatar.com\/avatar\/91f39a5ea2f90d0d957945f581465a21?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/91f39a5ea2f90d0d957945f581465a21?s=96&d=mm&r=g","caption":"admin"},"description":"Outworx@Admin","url":"https:\/\/www.outworx.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.outworx.com\/blog\/wp-json\/wp\/v2\/posts\/136"}],"collection":[{"href":"https:\/\/www.outworx.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.outworx.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.outworx.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.outworx.com\/blog\/wp-json\/wp\/v2\/comments?post=136"}],"version-history":[{"count":23,"href":"https:\/\/www.outworx.com\/blog\/wp-json\/wp\/v2\/posts\/136\/revisions"}],"predecessor-version":[{"id":866,"href":"https:\/\/www.outworx.com\/blog\/wp-json\/wp\/v2\/posts\/136\/revisions\/866"}],"wp:attachment":[{"href":"https:\/\/www.outworx.com\/blog\/wp-json\/wp\/v2\/media?parent=136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.outworx.com\/blog\/wp-json\/wp\/v2\/categories?post=136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.outworx.com\/blog\/wp-json\/wp\/v2\/tags?post=136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}