worksofliam / blog

Blog
28 stars 5 forks source link

Azure - Running Warcraft vanilla servers (2017?) #1

Open worksofliam opened 5 years ago

worksofliam commented 5 years ago

Intro

I tried out Azure to host a vanilla World of Warcraft servers. I played a lot of Warcraft between 2012 and 2015 and have always been interested in how these servers are hosted. There have been a lot of vanilla servers that have been shut down by Blizzard, but I am not intending in hosting a public server.

Running the server locally

This is the fun part. Running your server locally and connecting to your own private Warcraft – such a thrill! But what if you want friends to join (for a LAN party, say?). The one thing I would do is run the emulator on a dedicated machine on the name network. Boom! All your friends can play with you locally.

So, what if you wanted to continue playing after the party over the internet – you’d have to port forward and expose your IP+open ports. Most home IPs are not static and is likely to change which can be annoying.

The ports I forwarded are:

Honestly, I think you can ignore the UDP as I think (cannot confirm) that the emulator just uses TCP. Open those ports, change the realmlist.wtf file to point to your external IP address and launch the game client to sign in with the default account provided.

set realmlist 123.456.789.12

Moving to Azure

I have never used Azure before, so I was able to sign up for a 30 day free trial and get 120 Pound for free in credit. This is more than enough to create a single VM instance. I created a Windows Server 2012 R2 server. I named the instance wowvm.

image

Next, I would suggest doing the port forwarding – to do this all you have to do is create Endpoints within the virtual machine. Once again, I create the same ports as before:

image

Now is the awkward – or at least it was for me – getting the server files onto the VM instance. You should only really continue if you can get the server running on your local machine and can connect to it from your Warcraft client. Really, you just need to get the emulator folder onto the VM. I put my folder into a RAR file, then uploaded to Dropbox and then downloaded onto the VM from the Dropbox website.

We need to set it up so our login server will point to the correct place our world server is hosted - luckily for us it's the same VM instance and therefore the same external IP address as the login server. The realm list is stored in a table called realmlist within the realmd database - which is inside the MySQL instance we have running. Now you will need to decide on what you'd like your realm to be called (mine is Barold) and you will also need to find the DNS name from your VM instance. I prefer to use the DNS name as the IP will change every time you start up your VM.

image

To update the world server IP address and Realm name, you will need to turn the world server and login server off but have the MySQL instance running. Now you will need to run a MySQL client on the VM instance, but I just use the command line. You can also find the default MySQL login details within the realmd.conf file. I will be using the default username and password for this example.

mysql -u root -pascent realmd

mysql> select * from realmlist;
+----+--------+-----------+------+------+------------+----------+----------------------+------------+-------------+
| id | name   | address   | port | icon | realmflags | timezone | allowedSecurityLevel | population | realmbuilds |
+----+--------+-----------+------+------+------------+----------+----------------------+------------+-------------+
|  1 | MaNGOS | 127.0.0.1 | 8085 |    4 |          0 |        1 |                    0 |          0 | 5875 6005   |
+----+--------+-----------+------+------+------------+----------+----------------------+------------+-------------+
1 row in set (0.00 sec)

mysql> update realmlist set name='Barold', address='wowvm1234.cloudapp.net' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

This is a picture of me now running the server on my VM instance – notice how the Realm name is ‘Barold’.

image

And this is me, signed in to the login server and selecting my character – notice the realm name.

image

paracitic commented 4 years ago

could you elaborate on setting up the endpoints in the Azure VM? i'm trying to do this same thing and im stuck on endpoints.... i cant find them anywhere on the Azure dashboard.