Sometimes IT works

Using different pre-shared keys for Azure virtual network tunnels

I get loads of questions on Azure networking, some of them are good and others are just a lack of the will to RTFM. But this one actually had me trying it out cause I wasn’t sure of the possibility.

The question was: Can you have different pre-shared keys on the tunnels in Azure?

Looking around I found lots of examples of multiple tunnels, but all with the same PSK (Pre-Shared Key).

No better way than trying then, is there?

The setup is three different virtual networks:

A-net, B-net and C-net.


There is four different local networks. A local network is a definition of the address range and gateway address that you use to connect a vnet to.

We’ve got:

A-BC-local (connecting A to B with multihop-routing to C)
A-net-local (connecting B to A)
C-AB-local (connecting C to B with multihop-routing to A)
C-net-local (connecting B to C)

So it’s A – B – C if you didn’t figure that out :)

A connected to A-BC-local.


B connected to both A and C.


C connected to B.


When they’re all configured they won’t connect since the newly created gateways have automatically set PSK’s. You’ll need to use PowerShell to set the PSK for each tunnel.


Set-Azurevnetgatewaykey -vnet A-net -localnetworksitename A-BC-local -sharedkey 456
Set-AzureVnetGatewayKey -vnet B-net -localnetworksitename A-net-local -sharedkey 456
Set-Azurevnetgatewaykey -vnet B-net -localnetworksitename C-net-local -sharedkey 123
Set-azurenvetgatewaykey -vnet C-net -localnetworksitename C-AB-local -sharedkey 123

This will set the tunnel from a-b to 456 on both a-gw and b-gw. B to C will have 123.

Then connect the networks using

Set-AzureVnetGateway -vnet A-net -localnetworksitename A-BC-local -connect
Set-AzureVnetGateway -vnet C-net -localnetworksitename C-AB-local -connect

Conclusion: You can set your own PSK for each tunnel, no matter if it’s to on-premises or between networks in Azure.

SWE: Presentation från V-Dagen 2015

Här kommer som utlovat presentationen från V-dagen i Malmö. Glöm inte att maila de frågeställningar ni hade men inte ville diskutera offentligt!

Trevlig helg!

Vdagen 2015 – Nässlander


Connecting to your Azure site-to-site VPN over NAT

Creating a site-to-site connection to your Azure virtual network is desired in a lot of scenarios. Think hybrid cloud, new workloads, communicating with internal systems from Azure and so on. And in demo scenarios when you’re out travelling you might need that access too. Well, looking at the list of supported devices (below) we can find Windows RRAS for example.

Supported VPN devices:

And reading the guide (below) we’ll see how it’s actually done.

Configure Site-to-site VPN:

According to the last link you’ll need an external IPv4 that’s not behind NAT: “Obtain an externally facing IPv4 IP for your VPN device. This IP address is required for a site-to-site configuration and is used for your VPN device, which cannot be located behind a NAT.

That last statement has been discussed quite a lot, and when you read the RFC (RFC 3715,  of course that IPsec connection will work over NAT. It’s just not supported by Microsoft, meaning that we can’t help you configuring your firewall to allow passthrough, hence we want your gateway to be directly connected to the internet.

For IPsec to traverse your NAT you’ll need to forward some ports (often called port forwarding in your router).

IKE – UDP 500
Encapsulating Security Payload (ESP) – IP protocol 50
Authentication Header (AH) – IP protocol 51
IPsec NAT traversal – UDP 4500

My setup consists of a Telia router with an external IP of 78.72.172.xx, my internal ip range is This is added as a local network in Azure.


I then create a new virtual network in Azure and create a dynamic gateway. This will be assigned an ip address.


After that I’ve installed a VM on my local network running Windows Server 2012 R2 and configured it with RRAS. If you download the VPN device configuration script from the Azure portal it’ll set everything up for you, including installing the role. I’ve also configured the port forwarding in my router.



As you can see in the screenshot above the rule “IPSEC_500″ forwards all traffic to

Once you have your port forwarding up and running you can have your RRAS server connect.


Give the portal some time (or refresh it) and it’ll show connected too


I’ve deployed two VM’s in Azure and turned off the firewall to be able to verify connectivity using ping.




In the screenshot above I’ve verified connectivity to in Azure with ping, and I’ve done a traceroute. The timeout is from the Azure gateway that doesn’t respond to ICMP. Internal address of RRAS server can be seen in the lower window.

Note that this is unsupported by Microsoft – but works according to RFC.

Uploading your RemoteApp image directory from Azure to RemoteApp

If you’ve been working with RemoteApp for a while you’ve most likely gotten tired of downloading and uploading that image by now. Most of us have probably set up a VM in Azure and added a disk to it, just bouncing the VHD off of that one. Saves a lot of time just staying in Azure. But still, downloading it IS time consuming so to get around that I’ve written a script. Before you download it there are some pointers:

There is NO error checking. Meaning you must remember to disable EFS, install all the roles/features and run sysprep manually. If you forget something you’ll notice that when you try to start your image. That’s VERY late in the process.

The script needs you to have the Azure Storage SDK installed. Same here, if the path to the DLL has changed it’ll fail. If my calendar decides to clear out I’ll give it some time and clean it up but for now it’s a quick and dirty fix… Copy below, save as .ps1 and off you go!

# Load Assembly – Without this file, it’ll all fail…
Add-Type -Path “C:Program Files (x86)Microsoft SDKsAzurePowerShellServiceManagementAzureNetworkMicrosoft.WindowsAzure.Storage.dll”

# Source information
# Information from storage account
$sourceStorageAccount = “storageaccountname” # <- Storage account name
$sourceStorageKey     = “yourstoragekey” # <- The key to your storage account
$sourceContainer      = “vhd” # <- Container name
$sourceFilename       = “RemoteAppTemplate.vhd” <- VHD name, can be seen in your container
$sourceContainerUri   = [String]::Format(“https://{0}{1}”, $sourceStorageAccount, $sourceContainer)

# Destination information
# Information from RemoteApp upload script commandline
$destStorageAccount = “cdvne195334804rdcm”    # <- Destination name
$destStorageSAS     = “?sv=2012-02-12&sr=b&si=f6939bb2-a99d-43b6-823a-fe8ad44f5c20&sig=6q%2Bk8t7xzzC7DeICrWvb39rh4lUEijg93UFL7631V6s%3D” # <- SAS key
$destContainer      = “goldimages” # <- Container name
$destFilename       = “f6939bb2-a88d-43b6-811a-fe8ad41f5c20.vhd” # <- VHD name, can be seen in the command line from RemoteApp
$destUri            = [String]::Format(“https://{0}{1}/{2}”, $destStorageAccount, $destContainer, $destFilename)

# This is where the magic happens

Write-host “Uploading your image…”
$sourceCredentials = New-Object Microsoft.WindowsAzure.Storage.Auth.StorageCredentials($sourceStorageAccount, $sourceStorageKey)
$sourceContainer = New-Object Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer($sourceContainerUri, $sourceCredentials)
$sourceBlob = $sourceContainer.GetBlobReferenceFromServer($sourceFilename)
$sourceStream = $sourceBlob.OpenRead()

$destCredentials = New-Object Microsoft.WindowsAzure.Storage.Auth.StorageCredentials($destStorageSAS)
$destBlob = New-Object Microsoft.WindowsAzure.Storage.Blob.CloudPageBlob($destUri, $destCredentials)

$destBlob.Metadata[“Status”] = “UploadComplete”


A good idea is to run this script from a VM in Azure too. That’ll speed up the process. Azcopy would be able to do the same thing if it supported SAS-usage across subscriptions.

SWE: Presentationer från TechX Azure

Här kommer som utlovat de två ppt-decken från TechX Azure. Den första är från sessionen “Where do you want to go today?” och den andra är från RemoteApp, sessionen där demon självdog samtidigt som min Samsung-platta gav upp. Sorry för det! Det positiva är ju att jag höll mig på scenen den här gången…

TechX – Enterprise Story

TechX -RemoteApp


Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!

Nya tider, ny teknik, nytt datacenter

När Microsoft tidigare har gjort affärer med företag och även privatpersoner har vi sålt licenser. Du köper X antal licenser av oss som ger dig rätt att använda Windows, Office och kanske några andra produkter. Det har historiskt sett varit en väl fungerande affärsmodell och alla parter har varit nöjda med det upplägget. Windows som klientoperativsystem, stationär PC som arbetsstation och fysiska arbetsplatser är däremot tre områden där det hänt väldigt mycket. Många företag som tidigare kanske hade en bärbar dator / Windows-tablet för sin personal klarar sig idag med en telefon. Se t.ex. Mathem där man som kund signerar sin leverans direkt på chaufförens mobilskärm. Den stationära PC’n är något som också fått stå tillbaka, de bärbara datorerna har kraftigt sjunkit i pris, särskilt om användningsområdet är Office, epost och surf. En portabel arbetsstation för t.ex. grafiskt arbete kostar fortfarande mycket pengar. Numera använder personal allt ifrån mobiltelefoner, plattor och vanliga datorer.


Tittar vi på datacentret så går utvecklingen rasande fort där också. Virtualisering var det som först ändrade hur vi ser på datacentret. Det har gått från att virtualisera själva servern till att vi nu pratar ”software defined X”. Där X numera är compute, lagring och nätverk. Alla delar i vårt datacenter kan numera virtualiseras. Ser vi till vad Microsoft vill åstadkomma med Azure så är det kanske inte i första hand virtualisering vi tänker på, även om IAAS-delarna erbjuder detta. Vi vill att företag till ett konkurrenskraftigt pris ska kunna bygga ut sitt datacenter när man är i behov av testmiljöer, utveckling, belastningstoppar och självklart även ”vanliga” servrar. Lanseringen av nya funktioner sker regelbundet, t.ex. ”network security groups” för att filtrera trafik mellan subnät och multi-nic-maskiner för att kunna ha flera nätverkskort i virtuella servrar. Övrig arkitektur bygger väldigt mycket på att tänka nytt, särskilt om man ska flytta ut eller migrera servrar t.ex. nu när Windows Server 2003 skall ut. Man bör se över hur man gör med applikationer och vara medveten om Azure Web Sites, Azure SQL mfl funktioner som möjliggör modern drift.


Det som är viktigt att komma ihåg både som företagsledare, it-chef och driftschef är att verksamheten ofta är känslig för byråkrati, pris och leveranstider. Begreppet ”skugg-it” torde vara välkänt vid det här laget. Det är det som uppstår när verksamheten skaffar sig tillgång till SAAS-applikationer utan att passera IT-avdelningen. Några som är vanligt förekommande är Salesforce och Projectplace. Inte nog med att IT-avdelningen inte har koll på den leveransen, identiteterna som används kan vara användarnas egna gmail/ Problemet med det är inte uppenbart förräns någon beter sig illa eller slutar. Då har man inte längre kontroll på vem som kan logga in och var. Azure Active Directory är ett exempel på hur vi dagligen hjälper företag att hålla koll på vilka användare som har tillgång till vilka applikationer. Funktioner som att återställa sitt lösenord om man glömt det eller att ha multifaktorsauthenticiering för att säkra känsliga applikationer kan vi också lösa.


Vi på Microsoft hjälper dig gärna. Från ett första möte där vi diskuterar allt från hur Microsoft förändras i dessa tider, till legala krav i din verksamhet och tekniska aspekter. Vill du gå vidare hjälper vi dig självklart med workshops och designsessioner i hur din verksamhet skulle kunna fungera med modern IT som stöd.

Vill du lära dig mer om Microsoft Azure rekommenderar jag varmt MVA – Microsoft Virtual Academy. Kolla in följande kurser:

Introduktion till IAAW och Microsoft Azure – Med Ola Skoog
Moving to Hybrid Cloud with Microsoft Azure
Microsoft Azure IaaS Deep Dive Jump Start
The Microsoft Hybrid Cloud: Best practices guidelines
Microsoft Azure: Site-to-site VPN

TechDays 2014 – Sessionsmaterial

Här kommer som utlovat (dock senare än sagt) sessionsmaterialet från min Azure-session på Techdays 2014. Jag skyller min sena postning på att jag faktiskt ramlade av scenen…

I filen hittar du ppt-presentationen. Du hittar även 4 XLM-filer för nätverkskonfigurationen i Azure. Notera att dessa inte går att importera i din befintliga subscription om du redan har nätverk konfigurerade, men du kan å andra sidan kika på hur jag löst det med flera nätverk eller multi-hop-routingen i fil 3 och 4. I PowerShell-filen hittar du hur du gör en virtuell maskin med flera nätverkskort och hur du konfigurerar Network Security Groups. Frågor? Posta dom i kommentarsfältet!

För att förgylla er dag kan jag även bjuda på inspelningen av min session, särskilt då fallet. Spola fram till 12:55 i filmen.

Presentationsmaterial: Presentationsmaterial TechDays2014

SWE: Lär dig Azure #4 – En virtuell server. Med Minecraft!

Lär dig Azure #4 – En virtuell server. Med Minecraft!


I del nummer fyra ska vi kolla närmare på hur man skapar en virtuell maskin. För att göra dig till hjälte i hemmet ska vi också installera Minecraft i servern så att barnen kan få en egen Minecraft-server.


En virtuell server tillhör det vi kallar IAAS, Infrastructure As A Service. Företag kan installera sina egna programvaror på servrarna, och när dom inte används har företaget ingen kostnad för dom. Den här guiden hjälper dig att installera en virtuell server så att du får en känsla för hur lätt det är.




Vi börjar med att logga in i portalen på och i den vänstra kolumnen klickar vi på ”Virtual machines”, nummer tre uppifrån. Ser ut som en tv J


Om det här är din första virtuella server är det tomt i den högra rutan. Har du redan några så ser du en lista.


Välj ”New” längst ner till vänster vid plustecknet, när menyn kommer upp väljer du ”From Gallery”. Om du inte ser det alternativet klickar du på ”Compute”, sedan ”Virtual Machines” och SEN på ”From Gallery”.


I galleriet har vi förberett massa olika installationer. Dels har vi såklart Windows och SQL Server. Sedan har vi SharePoint och Visual Studio. Oracle har valt Azure som den enda supporterade molntjänsten och vi har en uppsjö olika Linux-distributioner att välja på.


För vår uppgift idag väljer vi ”Windows Server 2012 R2 Datacenter”, överst i listan. Markera den genom att klicka på den och klicka på pilen längst ner till höger.


I formuläret på nästa sida har vi fler alternativ:


Version release date: När installerades senast säkerhetsuppdateringarna i imagen. Välj senaste datumet.

Virtual machine name: Namnet som servern kommer få i Windows (alla datorer heter något).

Tier: Basic har inte en lastbalanserare, Standard har. Väldigt enkelt förklarat. Vi väljer Basic.

Size: Storlek på den virtuella maskinen, ju större desto dyrare. A0 eller A1 räcker utmärkt. Det går även att byta storlek senare.

New user name: Administratörskontot på servern. Kan inte vara ”administrator” som är vanligast. Kom ihåg vad du skriver i den här rutan.

New password: Lösenordet. Måste uppfylla komplexitetsregler. Glöm INTE det här!

Klicka högerpil.


Nytt formulär.


Cloud service: Lägg med servern i en ny eller befintlig cloud service. En cloud service används för t.ex. lastbalansering.

Cloud Service dns name: Det externa dns-namn din tjänst får.

Region/affinity group/virtual network: Var vi ska placera vår server. Välj West eller North Europé.

Storage Account: I vilket storage-konto servern ska lagras. ”Use an automatically…” duger fint.

Availability set: När två maskiner levererar samma tjänst (t.ex. en websida) lägger man dom i ett availability set för att säkerställa att tjänsten alltid är igång.

Endpoints: En endpoint är den port/ar som servern lyssnar på. En webserver lyssnar till exempel på port 80 som protokollet http går över. Minecraft lyssnar på port 25565. I rutan där det står ”Enter or select a value” skriver du Minecraft, välj TCP som protokoll och både public och private port ska alltså vara 25565.

Högerpil, här går det undan!


Låt rutan ”Install the VM agent” vara ikryssad. Klicka på bocken nere till höger.


I listan kan du nu ser hur Azure installerar din server. Det tar 5-10 minuter, garanterat längre om du sitter och stirrar på skärmen. Dags att hämta en kaffe, eller gå ut med hunden. Eller dra på Lenny Kravitz nya platta ”Strut” och fuldansa i köket.


När det bakom ditt servernamn står ”Running” så är server uppe och snurrar. Dags för minecraft!


Om man tycker att formuläret är lite tidsödande och krångligt så tycker man rätt. Vanligtvis gör man hela den här operationen med PowerShell istället.


Klicka på servernamnet, och sedan på ”Connect” nederst på skärmen. När frågan ”Do you want to open or save…” dyker upp klickar du på “Open”. Nästa ruta är ”Remote Desktop Connection”, klicka på ”Connect” nere till höger. Välj ”Use another account”. I rutan ”User name” skriver du ”servernamnetanvändarnamn”, t.ex. ”minecraft01joachim” och i rutan ”Password” skriver du in lösenordet du valde.


I nästa ruta väljer du ”Yes


Efter ett tag loggas du in på din server och ser skrivbordet.


Nu är det dags för vår Line Of Business-applikation!




Det finns en ypperlig instruktion på hur man installerar Minecraft för Windows. Kör du fast här så kika in där.


Eftersom det är en server vi installerat måste vi först se till att kunna surfa på internet. I programmet som är öppet i din server, ”Server Manager”, klickar du på ”Local Server” i kolumnen till vänster. Leta sedan reda på där det står ”IE Enhanced Security Configuration” och klicka på ”On”, välj ”Off” på bägge ställena och klicka ”Ok”.


Starta Internet Explorer från startmenyn och surfa till Under rubriken ”Multiplayer Server” hittar du ”minecraft_server.1.8.exe”. Ladda hem den, och kör. Klart! Nu kan du från barnets (eller din) dator ansluta med Minecraft mot det namn din Cloud Service fick. Kolla i portalen vad det står under rubriken ”DNS Name”, ange det i minecraft under servernamn när du ska ansluta.


Om ditt barn vill ha massa plugins till Minecraft rekommenderar jag dock att du väljer Java-versionen istället. Kolla in guiden jag länkade till ovan för hur du bär dig åt då!


Hur man skapar en virtuell maskin i Azure:



Lycka till och återkom om det är några frågor!



SWE: Lär dig Azure #3 – Websites

I den här delen ska vi ta en titt på hur du kan skapa en egen site genom galleriet och vilka inställningar som finns tillgängliga.

Varför ska du lägga din site i Azure då?

  • Microsoft Azure har stöd för flera språk. Du kan köra .Net, Java, PHP, Node.js och Python. Det räcker och blir över för de flesta.
  • Du får automatisk skalning, dvs när din site går lite trögt för att du har en populär site så skapar vi ytterligare en webserver åt dig automatiskt för att hantera alla besökare. När det lugnat ner sig tar vi bort den. På det sättet sparar du pengar.
  • Du kan använda Microsoft SQL, MySql, DocumentDB och MongoDB som datalagring. Eller Oracle om inte någon av de andra passar.
  • Vi installerar uppdateringar på din webserver. Mycket populärt hos de som tycker patcha är tråkigt.
  • Vi tar backup på din site.

Är du utvecklare? Då kan du hantera din site direkt från Visual Studio. Kolla in för mer information om det. Och missa inte att du kan köra continous integration för din site. Från Visual Studio Online, GitHub, TeamCity, Hudson eller BitBucket.

Det finns fler fördelar såklart, men nu är det dags!


Det här mediet tillåter ju inte bilder (bloggen gör ju det, men originaltexten är från Yammer), så det blir en textbaserad genomgång:

  1. Logga in på
  2. Klicka på New längst ner till vänster.
  3. Välj ”Everything” på bladet som visas.
  4. Välj ”Web”
  5. Välj ”Website”
  6. Klicka på ”Create”

På det nya bladet med titeln ”Website” längst till höger måste du nu fylla i lite information:


  1. URL: Välj ett namn till din site. Jag rekommenderar att du väljer det domännamn som du tänkt ge din site. Om du inte ska ha någon egen domän kan du fylla i t.ex. ditt namn eller hitta på något annat.
  2. Web Hosting Plan: Du måste välja en plan. Respektive plan innehåller olika funktionalitet och kostar olika mycket. Om du bara testar kan du välja ”F1” som är gratis. Information om funktioner och pris framgår i respektive ruta. Klicka på ”Web Hosting Plan”, ”Browse all pricing tiers” och skrolla ner för att hitta ”F1”. ”D1” som du hittar bredvid tillåter egna domäner också. Man kan byta plan för sin site, vilket innebär att du kan utveckla den gratis och sedan växla upp till ”S3” som ger dig 10 instanser och 50 GB lagring. Det blev mycket där. Välj ”F1” genom att klicka på den och klicka sedan på ”Select” längst ner. I bladet till vänster måste du ge din plan ett namn längst upp, till exempel ”Web gratis” eller liknande. Du kan ha flera olika planer för dina siter. Klicka OK längst ner.
  3. Resource group: Man kan placera saker i Azure i olika grupper. För enklare hantering eller för att se vad dom kostar t.ex. Vi lämnar den som den är.
  4. Subscription: Har man flera prenumerationer kan man välja i vilken prenumeration man vill placera siten.
  5. Location: Om du till exempel vill ha en kampanjsite där du säljer kaviar till japaner verkar det ju dumt att dom ska surfa hela vägen till sverige. Då kan du placera din site i vårt datacenter ”Japan East”.
  6. Klicka ”Create” längst ner. Rutan ”Add to Startboard” lägger till en länk till din site på förstasidan.
  7. När du klickat ”Create” kan du längst till vänster klicka ”Notifications” och se notifieringen ”Creating website”. Det blir en glad grön smiley när den är klar.
  8. Klicka på den gröna smileyn så öppnas bladet för din website. Längst upp finns det blåa ikoner. Klicka på ”Browse”
  9. En ny flik öppnas i din browser med din nya site! Grattis!


Vill man inte göra en egen site så kan man välja ett färdigt CMS (Content Management System) i galleriet. Ett av dom mest populära är WordPress. Det finns en utmärkt genomgång i hur du gör en site med WordPress färdiginstallerat på Säg att du har en kund som behöver en ny kampanjsite igår. Då tar det ca 45 sekunder att installera WordPress och ytterligare 120 sekunder att lägga till och verifiera kundens domän. Din bloggande tonåring grejar det själv. Vill du ha nåt annat system har vi mallar för Joomla, Kentico, Orchard, mojoPortal och Umbraco. Och WordPress på japanska.

Via portalen kan du även installera en SharePoint-farm. Automatiskt. Portalen tar hand om all konfiguration och installation. Det är nästan bättre än skivat bröd! Det finns en hel artikel om det på


När din site väl är uppe kan du scrolla neråt i bladet. Då hittar man fler smarta funktioner inbyggt i Azure. Gruppen monitorering visar grundläggande information och man kan genom att klistra in en kodsnutt på sin site få ännu mer information om t.ex. antal besök, browsers och så vidare. Gruppen Usage visar hur mycket lagringsutrymme man konsumerat, mängden minne / CPU som instansen använder och om autoskalningen är påslagen. Här ser man också vilken typ av instans man valt. Operations innehåller loggar för nerladdning eller streaming när man får se dom i realtid. Här hittar man även consolen som ger en access till filsystemet och man kan se backuper här också. Deployment visar hur många staging-slottar man har, dvs ytterligare siter för t.ex. utveckling eller test. Sedan har vi networking för den hybrida anslutningen till infrastrukturen man har hemma så att säga, och sist hittar vi inställningar för domäner och SSL-certifikat.


Om Websites:

Om WordPress:

Utveckla med Asp.Net och Azure:

Video om autoskalning:

Hybrid-ansluten website:

Om du har några frågor så kommentera gärna artikeln, eller skicka ett mail!