How to configure IpAddress.dat and the ServerList in MU Online
Learn how to correctly configure the server's IpAddress.dat and the client's ServerList so players can connect without network errors.
Setting up the network is one of the most frustrating steps for anyone just getting started with a private MU Online server, and also one of the biggest sources of support tickets with the classic "connects and drops" message. In practice, most of these problems are not in the emulator or the client
Setting up the network is one of the most frustrating steps for anyone just getting started with a private MU Online server, and also one of the biggest sources of support tickets with the classic "connects and drops" message. In practice, most of these problems are not in the emulator or the client, but in how IP addressing was defined in the server's configuration files and in the ServerList that ships with the player's client. In this tutorial you will understand the difference between internal and external IP, how the connection flow works behind the scenes, how to configure the GameServer's and ConnectServer's IpAddress.dat, how to use No-IP for those without a static IP, and how to prepare the client's ServerList so it points to the right place. The goal is that by the end you can get anyone on the internet to log into your server without mysterious drops.
Prerequisites
Before touching the IP files, make sure the basics are already working. Configuring the network on top of a server that does not yet start correctly will only multiply the variables in the problem. If you don't have the structure set up yet, start with the general guide on how to create a MU Online server and then come back here.
- A MU Online server already installed with ConnectServer, GameServer, DataServer, and JoinServer operational in a local environment.
- Administrative access to the machine hosting the server (Windows Server or Windows desktop).
- A MU Online client compatible with your emulator's version/season for testing.
- Knowledge of your external IP (you can find it by visiting a site like whatismyip from the server machine).
- Access to the router's control panel, if you plan to host on a residential network, to configure port forwarding.
- Optionally, an account with a dynamic DNS service such as No-IP.
Understanding internal, external, and loopback IP
Every machine on a network has at least two addresses relevant to us. The internal IP (or private) is the address the router assigns to the machine within the local network, usually in the 192.168.x.x or 10.0.x.x range. The external IP (or public) is the address by which your network appears to the rest of the internet, assigned by your provider. There is also the loopback address, 127.0.0.1, which points the machine to itself and is only useful for local testing.
The confusion arises because, when you configure everything on the machine itself, using 127.0.0.1 works perfectly. The player on the outside, however, has no way to reach your 127.0.0.1 or your 192.168.x.x — those addresses are not routable over the internet. That is why the server "works on my PC" but nobody from outside can get in.
| IP type | Example | Reach | When to use |
|---|---|---|---|
| Loopback | 127.0.0.1 | The machine itself only | Isolated local tests |
| Internal/private | 192.168.0.10 | Local network (LAN) | Tests on the same network |
| External/public | 200.150.x.x | The entire internet | Production, external players |
| No-IP hostname | meumu.ddns.net | The entire internet | Production without a static IP |
How the connection flow works
Understanding the flow keeps you from configuring the wrong file. In short, the process happens like this:
- The player opens the client, which reads the ServerList to learn where the ConnectServer is.
- The client connects to the ConnectServer and requests the list of available servers (Season, PvP, etc.).
- The ConnectServer responds with the server names and, crucially, with the IP and port of the corresponding GameServer.
- The client then leaves the ConnectServer and connects directly to the GameServer using that IP.
The critical point is in step 3: the IP that the ConnectServer hands to the client comes from the server's configuration file (frequently IpAddress.dat or an equivalent section of the ConnectServer's ServerList.dat). If the internal IP is set there, the outside client receives 192.168.0.10 and tries to connect to that unreachable address, resulting in the drop after server selection.
Configuring the server's IpAddress.dat
The name and structure of this file vary by emulator. In many popular emulators the GameServer uses a file called IpAddress.dat inside the data folder, while the ConnectServer uses its own ServerList.dat. The example below is illustrative and you should adapt it to your emulator's documentation.
A typical GameServer IpAddress.dat looks like this:
; IpAddress.dat - illustrative example, varies by emulator
[GameServerInfo]
ServerName = ViciadosMU
GameServerCode = 0
IpAddress = 200.150.10.20 ; EXTERNAL IP or No-IP hostname
Port = 55901
The golden rule is: the IP field here must be the address by which players reach the server, that is, the external IP or the No-IP hostname in production. On a VPS, this field takes the VPS's public IP. In a residential environment, it takes your connection's external IP or the dynamic hostname.
The ConnectServer, in turn, usually has its own list, something like:
; ConnectServer's ServerList.dat - illustrative example
[ServerList]
0 200.150.10.20 55901 Season X Server
1 200.150.10.20 55902 Hard PvP Server
Here each line defines a server visible on the selection screen. The columns are normally code, GameServer IP, port, and display name. Again, the IP must be the external one.
Using No-IP for those without a static IP
Residential connections almost always have a dynamic IP, which changes from time to time. If you hard-code the external IP in the file and the provider changes your address, the server "vanishes" from the internet. The solution is a dynamic DNS service like No-IP, which creates a hostname (e.g., meumu.ddns.net) always pointed at your current IP.
General steps:
- Create a No-IP account and register a free hostname.
- Install No-IP's DUC (Dynamic Update Client) on the server machine. It detects IP changes and updates the hostname automatically.
- In the server files, in place of the external IP, put the hostname (
meumu.ddns.net). - Do the same in the client's ServerList.
That way, even if the IP changes, both the server and the client always resolve the hostname to the correct address. Keep in mind that No-IP's free hostname needs to be confirmed periodically so it does not expire.
Configuring the client's ServerList
The client's ServerList is the file that tells the game where the ConnectServer is. It usually sits encrypted inside the client's Data folder, with a name like ServerList.dat or inside a packed file. Many emulators provide a tool to edit and recompile this file, since it is not plain text.
The logical content is simple:
; Client's ServerList (after decryption) - varies by emulator
IP = meumu.ddns.net
Port = 44405
The IP here must point to the ConnectServer, and the Port must be the ConnectServer's port (commonly 44405). After editing, recompile/re-encrypt the file with the emulator's tool and distribute the updated client to players. A common mistake is editing the text file and forgetting to re-encrypt, which makes the client ignore the change.
Opening ports on the firewall and the router
The correct IP is useless if the ports are closed. In the Windows firewall, you need to open the ports used by the ConnectServer and by every GameServer. In addition, on a residential network, you must configure port forwarding on the router, pointing the external ports to the internal IP of the server machine.
| Service | Common port (varies by emulator) | Protocol |
|---|---|---|
| ConnectServer | 44405 | TCP/UDP |
| GameServer 1 | 55901 | TCP |
| GameServer 2 | 55902 | TCP |
| DataServer | 55960 | TCP (internal) |
The DataServer and the JoinServer normally only need internal communication, so do not expose them to the internet unnecessarily. Expose only the ConnectServer and the GameServers.
Testing the connection end to end
After configuring everything, test methodically:
- Start all services in the correct order (DataServer, JoinServer, ConnectServer, GameServer).
- Test locally first with
127.0.0.1to make sure the server works. - Ask someone on another network (or use a 4G/mobile connection) to test external access with the client configured with the hostname/external IP.
- Use the command
telnet meumu.ddns.net 44405from another machine to confirm the ConnectServer's port responds. - If the ConnectServer responds but the GameServer drops, the problem is almost certainly the internal IP configured in the GameServer's
IpAddress.dat.
Common errors and fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| Connects and drops when selecting the server | Internal IP in the GameServer's IpAddress.dat | Replace it with the external IP or No-IP hostname |
| "Disconnected" on the initial screen | The client's ServerList points to the wrong ConnectServer IP/port | Correct and re-encrypt the ServerList |
| Works only on the LAN | Port forwarding not configured on the router | Forward the ConnectServer and GameServer ports |
| Server vanishes after hours | External IP changed (dynamic connection) | Use No-IP with the DUC client active |
| Nobody connects at any time | Windows firewall blocking ports | Create inbound rules for the ports used |
| ServerList edit ignored | The file was not re-encrypted | Recompile with the emulator's tool |
Maintenance best practices
Document all ports and IPs in a separate reference file, so you don't rely on memory when you need to migrate machines. Whenever you change host or VPS, review every file that contains an IP, since it's easy to forget a secondary GameServer. Keep one copy of the client configured for production and another for local testing, avoiding accidentally sending a client with 127.0.0.1 to players. Finally, if you use No-IP, periodically check that the DUC is running as a service and that the hostname has not expired.
Launch checklist
- GameServer IpAddress.dat with the external IP or No-IP hostname
- ConnectServer ServerList.dat with the external IP of the GameServers
- Client ServerList pointing to the correct ConnectServer and re-encrypted
- No-IP configured with the DUC client running (if dynamic IP)
- ConnectServer and GameServer ports opened in the Windows firewall
- Port forwarding configured on the router (if residential network)
- Successful local test with 127.0.0.1
- Successful external test from another network/4G
- Telnet to the ports responds from outside the network
- Production client distributed without loopback or LAN addresses
Frequently asked questions
Do I need a static IP to host a MU Online server?
It is not mandatory. You can use a dynamic DNS service like No-IP to map a hostname to your residential IP, but a static IP (VPS or dedicated) reduces downtime and makes maintenance easier.
Why can players log in but get dropped when selecting the server?
Almost always the GameServer's IpAddress.dat points to the machine's internal IP instead of the external IP. The ConnectServer hands that IP to the client, which then tries to connect to an address unreachable over the internet.
Which port does the ConnectServer use by default?
It varies by emulator, but the most common ConnectServer port is 44405 UDP/TCP. The GameServer usually uses 55901 and the following ports. Always check your emulator's documentation.
Can I use the same configuration file for localhost and the internet?
Not recommended. For local testing use 127.0.0.1, but for production you need the external IP or a No-IP hostname. Keep separate versions to avoid confusion.
What should I do if the firewall is blocking connections?
Open the ConnectServer and GameServer ports in the Windows firewall and on the router (port forwarding). Without this, the client never even receives a response from the server.