I’ve run private Lineage 2 servers for over a decade, and I can tell you from experience that nothing is more frustrating than watching your friends stare at a “connection failed” message while your own client logs in just fine. This L2J server connection troubleshooting guide is the exact playbook I wish someone had handed me the first time I hit this wall.
If players can’t connect to your L2J server, the cause is almost always one of a handful of misconfigurations. We will walk through every layer of the stack, from the LoginServer.properties file to your router’s NAT table, so you can pin down the failure and get your server live for 2026 and beyond.
Table of Contents
Understanding L2J Server Architecture: Login Server vs Game Server
L2J server connection troubleshooting starts with understanding that an L2J server is actually two separate services running on your machine: a Login Server and a Game Server. They talk to each other, but your players connect to each one on a different port.
The Login Server listens on port 2106 by default. Its only job is authentication. When a player enters their username and password in the Lineage 2 client, the client connects here first, the server checks the credentials against the MySQL database, and returns a session ticket.
The Game Server listens on port 7777 by default. After authentication, the client disconnects from the Login Server and reconnects here using the ticket. This is where your actual gameplay sessions live.
A third port, 9014, is typically used for the telnet admin interface. Players never use it, but if it is blocked, you will not be able to administer the server remotely.
This is why your friends can sometimes see the server in the list but still cannot log in. One port may be open and the other closed, or vice versa. Both must be reachable for a full connection to succeed.
Why Players Can’t Connect to Your L2J Server: The 8 Most Common Causes
When players can’t connect to your L2J server, the root cause is one of the following eight issues in roughly nine out of ten cases. I have ordered them from most to least common based on what I see in forums and in my own server admin work.
Closed or unforwarded ports: 7777 and 2106 are blocked by your router or Windows Firewall. This is the single most common reason for L2J connection failed errors.
Wrong ExternalHostname: Your ExternalHostname is set to 127.0.0.1 or your LAN IP. External players cannot reach a local address. It must be your WAN IP, Hamachi IP, or DDNS hostname.
Windows Firewall blocking Java: Even when ports are open, Windows Defender can block the Java process outright. The client then times out with no useful error.
Protocol revision mismatch: The MinProtocolRevision or MaxProtocolRevision in your server config does not include your client’s revision. Authentication will fail with a generic message.
L2.ini ServerAddr is wrong: Your friends have not updated L2.ini on their client, so they are still trying to connect to the official Lineage 2 servers or a blank address.
Router NAT without forwarding: You connect fine locally because you hit 127.0.0.1, but your router is not passing incoming connections back to your PC.
Dynamic IP changed: Your ISP gave you a new public IP after a router reboot, but your friends and your L2.ini still point to the old one.
Database connection failure: The MySQL service is down or the server cannot reach it. Authentication always fails when this happens, even if ports are perfect.
How to Configure L2J Server Ports (7777, 2106, 9014)
L2J server port forwarding is the most important step. If you skip this, every other fix is wasted. The default ports are 2106 for login, 7777 for game, and 9014 for telnet admin. All three are TCP, not UDP.
Open your LoginServer.properties file (or server.properties, depending on your L2J build) and verify this line exists exactly:
LoginPort = 2106
Then open your GameServer.properties file and confirm:
GameserverPort = 7777
Both ports must be greater than 1024 so you do not need root privileges. Do not change these unless you have a specific reason and you have updated every client config to match.
For the telnet interface, the setting is usually TelnetPort = 9014 in the LoginServer configuration. This one only matters if you administer the server remotely, but it is worth opening for completeness.
After editing, restart both the Login Server and Game Server processes so the new values load.
ExternalHostname vs InternalHostname: The Setting That Breaks Most Servers
The ExternalHostname vs InternalHostname settings are the single biggest source of “it works for me but not for my friends” pain in L2J server setup. Each server has two hostnames because the server needs to give different addresses to local and remote clients.
InternalHostname is the address used when the client is on the same machine or LAN as the server. The correct value is almost always 127.0.0.1. Some admins use their LAN IP, but 127.0.0.1 is safest and most common.
ExternalHostname is the address given to anyone connecting over the internet. It must be reachable from outside your network. Use one of the following:
Your public WAN IP (find it at whatismyip.com while the server is running). A Hamachi IP like 25.x.x.x if you are using Hamachi. A DDNS hostname such as yourserver.no-ip.org if your public IP is dynamic.
The most common mistake I see is leaving ExternalHostname as 127.0.0.1 after copying a friend’s config. Once you do that, no external player can ever connect, regardless of port forwarding.
Firewall Configuration for L2J Server on Windows 10/11
L2J firewall settings on Windows 10 and 11 are deceptively important. Modern Windows Defender Firewall is aggressive and will silently drop incoming Java traffic unless you explicitly allow it.
Open Windows Security, then Firewall and network protection, then Advanced settings. You will see the Windows Defender Firewall with Advanced Security panel.
Create a new Inbound Rule for each port. Set the rule type to Port, choose TCP, and enter 2106, 7777, and 9014 in three separate rules (or one rule with all three ports separated by commas).
For each rule, choose “Allow the connection”, apply to Domain, Private, and Public profiles, and name them clearly. Something like “L2J Login 2106” makes future edits easier.
You also need an inbound rule for the Java executable itself. In the rule type, choose Program, then browse to your javaw.exe or java.exe (usually in C:Program FilesJavajre*bin). This rule ensures that even if a player somehow connects on an unexpected port, the OS does not block the Java process.
If you want to confirm the firewall is the problem during testing, temporarily disable it from the control panel. If connections suddenly work, you have found your culprit. Just remember to turn it back on and create proper rules.
Router Port Forwarding for L2J Server: Step-by-Step
L2J port forwarding on your router is what allows external traffic to actually reach your PC. Windows Firewall protects your machine; port forwarding tells the router where to send the traffic in the first place.
Step 1: Set a static LAN IP for the PC running the server. In Windows, open Network and Sharing Center, click your adapter, Properties, IPv4, and manually assign an IP like 192.168.1.50. Make sure this IP is outside your router’s DHCP range.
Step 2: Log into your router’s admin panel. This is usually 192.168.1.1 or 192.168.0.1 from a browser. Credentials are typically on a sticker on the router.
Step 3: Find the Port Forwarding, NAT, or Virtual Server section. The wording varies by brand. Common locations include Advanced, NAT Forwarding, or Gaming sections.
Step 4: Create three entries. Service name: L2J-Login. External Port: 2106. Internal Port: 2106. Internal IP: your static LAN IP. Protocol: TCP.
Repeat this step for ports 7777 and 9014. Use the same internal IP for all three. After saving, reboot the router so the rules take effect.
Router UI differences are huge between brands, but the principle is identical. If you have a TP-Link, Netgear, ASUS, or Linksys, look under “Advanced” or “NAT Forwarding”. Cisco and Ubiquiti routers hide it under “Services” or “Firewall Rules”.
Client-Side Setup: Editing L2.ini for Connection
Even with a perfectly configured server, players cannot connect until their L2.ini points at it. The L2.ini file lives in the system folder of your Lineage 2 client, and it tells the game where to find Login Servers.
Open L2.ini in a text editor and find the line starting with ServerAddr=. Replace its value with the same address you used for ExternalHostname in the server config. If you used your WAN IP, put it here. If you used a DDNS hostname, put that here.
The ServerPort= line should remain 2106. Do not change this to 7777. The client first contacts the Login Server on 2106, gets its server list, then connects to the Game Server on 7777 automatically.
If you cannot edit L2.ini directly because of file protection, use a tool like L2FileEdit (also called L2Dat EncDec) to open the file. Most L2J distributions include a pre-configured system file that you can drop into the client’s system folder to override the default.
Every player who wants to connect must edit their L2.ini to match your server’s ExternalHostname. There is no way around this. Send them the exact line to paste in, or better, ship a pre-edited system folder with your client.
Protocol Revision Mismatch: MinProtocolRevision and MaxProtocolRevision Explained
L2J MinProtocolRevision and MaxProtocolRevision are the top cause of authentication failures that look like network problems but are actually config mismatches. They define which client builds are allowed to log in.
In your LoginServer.properties you will see two settings like these:
MinProtocolRevision = 746
MaxProtocolRevision = 850
The client revision must fall between Min and Max, inclusive. If your client is revision 900 and your Max is 850, the server will reject login with a generic message that looks like a connection problem.
To fix this, look up your client’s revision in its own l2.ini or version files. Then update your server’s settings so Min <= client revision <= Max. Save and restart the Login Server.
A common pattern is to set Min to a low number and Max to a very high number during testing, so any client revision is accepted. Once stable, tighten it to your actual target audience.
Dynamic DNS Solutions for L2J Servers on Dynamic IPs
Most home ISPs assign dynamic IPs that change every time the router reboots, sometimes more often. The moment your IP changes, every client with the old number in L2.ini loses connection. This is one of the most under-addressed problems in L2J server hosting.
Dynamic DNS solves this by giving you a hostname like yourserver.ddns.net that always points to your current public IP. A small client runs on your server PC and updates the hostname whenever your IP changes.
No-IP is the most popular free option. Sign up at noip.com, create a hostname, then install their DUC (Dynamic Update Client) on the server. Configure it with your account credentials and pick your hostname. The hostname will resolve to your current IP within seconds of any change.
Once DDNS is working, use your hostname instead of the IP for ExternalHostname on the server and ServerAddr in L2.ini. Now IP changes are invisible to your players.
Alternatives include DynDNS (paid now), DuckDNS (free, simple), and Cloudflare API integrations. The setup is similar: get a hostname, run an updater, point your server and clients at the hostname.
Hamachi and VPN Setup for Local L2J Server Testing
L2J server Hamachi setup is the easiest way to share your server with friends without touching router settings at all. Hamachi creates a virtual private network that makes remote PCs behave as if they are on your LAN.
Install LogMeIn Hamachi on both the server PC and each friend’s PC. The free tier supports up to 5 members, which is enough for most private server testing.
The server admin creates a network and shares the credentials. Friends join with those credentials. Each Hamachi user gets a 25.x.x.x IP that is consistent regardless of their real location.
Set ExternalHostname in your server config to the server’s Hamachi IP (the one shown in the Hamachi client window). Tell your friends to put the same Hamachi IP into their L2.ini ServerAddr line. They connect through Hamachi, never touching your router.
The downside is that Hamachi adds latency, caps free networks at 5 members, and has been less reliable since LogMeIn acquisition. But for pure testing convenience, it is hard to beat.
L2J Server Connection Troubleshooting Checklist
When you are stuck and need a quick reference, run through this L2J server connection troubleshooting checklist in order. Most admins identify the problem within the first three items.
Confirm your WAN IP at whatismyip.com matches the IP your friends are using.
Verify LoginPort 2106 and GameserverPort 7777 are both open with an external port checker tool.
Check that ExternalHostname is set to your WAN IP, Hamachi IP, or DDNS hostname, not 127.0.0.1.
Confirm Windows Firewall has inbound rules for 7777, 2106, 9014 TCP and for javaw.exe.
Verify router port forwarding for 7777, 2106, 9014 all forward to your static LAN IP.
Open GameServer.properties and confirm MinProtocolRevision is less than or equal to your client’s revision, which is less than or equal to MaxProtocolRevision.
Check that each friend has edited L2.ini ServerAddr to match your ExternalHostname.
Confirm MySQL is running and the L2J server can reach the database on its configured port (default 3306, usually local).
If all eight items check out and you still cannot connect, restart everything in this order: router, then MySQL, then Login Server, then Game Server. Half of all “mystery” connection problems resolve with a clean restart.
Common L2J Error Messages and What They Actually Mean
The Lineage 2 client returns fairly unhelpful generic errors. Here is what the common ones actually mean when you see them in 2026‘s typical L2J builds.
“Cannot connect to server” almost always means ports are blocked. Test with an external port scan. If 7777 and 2106 both show closed from outside, you have a port forwarding or firewall issue.
“Authentication failed” with no other detail usually means protocol revision mismatch, database unreachable, or wrong ExternalHostname. Check those three first in that order.
“Server is currently down” or “Server under maintenance” usually means the Game Server started but cannot reach the Login Server, or vice versa. Check that both processes are running and listening.
“Connection timed out” points to a network-layer problem. Either the IP is wrong, the server is offline, or a firewall is dropping packets silently.
“Receive error” or “Disconnected from server” mid-play usually indicates packet corruption or version mismatch mid-stream. Verify Min and Max protocol revisions still match after any client update.
FAQs
Why can’t my friend join my L2J server?
Your friend cannot join your L2J server because one of three things is wrong: your ExternalHostname points to 127.0.0.1 instead of your public IP, your router has not forwarded ports 7777 and 2106 to your PC, or your friend’s L2.ini ServerAddr still points to the official Lineage 2 servers. Fix those three and the connection typically works immediately.
What ports does L2J server use?
L2J servers use three TCP ports by default. Port 2106 is the Login Server for authentication, port 7777 is the Game Server for actual gameplay, and port 9014 is the telnet admin interface. All three are TCP, not UDP, and all three must be open for the server to be fully functional.
How do I fix L2J client authentication error?
To fix an L2J client authentication error, follow these steps in order. First, confirm your client’s protocol revision falls between MinProtocolRevision and MaxProtocolRevision in LoginServer.properties. Second, verify the MySQL database is running and reachable. Third, double-check that ExternalHostname is set to a public IP or hostname, not 127.0.0.1.
Why does it keep saying ‘unable to connect to server’?
The ‘unable to connect to server’ message in Lineage 2 means the client cannot reach the Login Server on port 2106. The most common causes are closed ports, a firewall blocking Java, or a wrong IP address in the L2.ini file. Run an external port scan against 2106, allow Java through Windows Firewall, and verify L2.ini ServerAddr matches your server’s ExternalHostname.
Do I need Hamachi or can I use my public IP for L2J?
You do not need Hamachi for L2J. Using your public IP directly works fine as long as you forward ports 7777, 2106, and 9014 in your router, set ExternalHostname to your public IP, and tell your friends to put that IP in their L2.ini file. Hamachi is purely a convenience that skips router configuration but adds latency and is limited to 5 users on the free tier.
Final Thoughts on L2J Server Connection Troubleshooting
The core reason players can’t connect to your L2J server is usually a single misconfigured layer: a closed port, a wrong hostname, or a protocol mismatch. Work through the troubleshooting checklist top to bottom and you will find the culprit in under an hour, even on your first private server. Once everything is dialed in, save your working config files as a backup, because you will eventually need them.