Eqemu and firewalls/routers. Ugg. Heres the deal.
Most consumer grade routers/firewall use what is called "statefull packet inspection", what this means is that for traffic to be allowed into the INTERNAL network it MUST have orginated from the INTERNAL network. So, when your world server connects to the Login servers the firewall tracks that information and will allow the traffic back into the orginatating source ie: world server.
The plot thickens however because most people only have 1 PUBLIC IP address. To get around the limitations of that, once again most firewall/routers use what is called NAT ( Network Address Translation ).
So, the firewall/router takes the internal IP address of the traffic request, remaps it to the public IP address and sends the traffic out to the internet. It does this by reassigning the requesting private IP:port to the public IP:port. - ie: 192.168.0.1:80 gets remaped to x.x.x.x:80, and sends the traffic. The firewall/router REMEMBERS this information and when the request comes back, it forwards that traffic to the requesting computer.
( This is REALLY basic. There is alot more going out but hopefully you get the idea ).
You dont mention what type router/firewall you have so this will be a generic setup.
The world server connects to the Eqemu Login servers on the ports listed in your Loginserver.ini ie: 5997. Once that connection is established the server shows up in the list. If you allow port 5997 traffic to your internal world server all will be good. Although this isnt really required because the your world server established the connection to the login servers. But to be safe, you should port forward port 5997 to your internal world server's internal IP address.
Once someone selects your server from the list, the eqemu login server hands out the PUBLIC IP address of your world server ( THIS IS YOUR PUBLIC IP ) and directs the client to connect to your world server IP on port 9000. Since your router/firewalll will see this traffic as comming in it will drop the packets since there was no coresponding outbound request. This is why players will get errors when they try to connect to your world server if port 9000 isnt redirected to the internal IP address of the world server computer.
IMPORTANT: In the Loginserver.ini file your IP address MUST be listed as your PUBLIC IP. NOT the internal network IP of the world server computer.
Once a client is connected to the worldserver, the worldserver knows the ip address of the client that has connected. ( Keep that in mind ).
Step 1: Setup port forwarding in your firewall to allow port 5997 traffic to your world server.
Step 2: Setup port forwarding in your firewall to allow port 9000 traffic to your world server.
Lets say your worldserver is 192.168.0.1
Port forward port 5997 and port 9000 to 192.168.0.1
If all is good. Players will be able to connect to the "world server". If they cant then double check and make sure that port 9000 is being forwarded to the correct computer.
One other thing to note: the zone servers also connect to the world server using port 9000. The world server keeps track of the zone servers and knows what ports the zone servers are listening on. But since both the world server and zone server computers are INSIDE your lan that traffic never hits the router/firewall.
Step 3:
Setup port forwarding in your firewall to allow ports 7995-7999, these are the default boot5zone.bat ports.
ie: If your zoneserver IP is 192.168.0.2 then you would port forward 7995-7999 to that PRIVATE ip address.
This is what happens when a client attempts to connect to the zone server.
The world server says "ok, this client ( i already know his IP )wants to zone to arena" lemme see, the arena zone isnt running so i will tell the zone server to bootup the arena zone. Since i know that once the zone is booted up it will be listening on port 192.168.0.2:7995 in this case, i will tell the client to connect to the zoneserver on 192.168.0.2:7995.
Now, here is the rub. As far as the zoneservers are concerned, there is no PUBLIC IP. It only understands the private IP that you setup in the bootzone.bat file. Those IP's are what the zoneservers are listening on. And as far as the client is concerned there is no PRIVATE IP, only the public ip he connected on.
Since the worldserver knows the public IP of the client, it send the information back that says ok, the zone is ready and waiting for you to enter. The client says ok. i will connect to the zoneserver using the PUBLIC IP that the worldserver gave me and the port it told me to connect on. ie

.x.x.x:7995.
If the port isnt allowed then you cant connect. If it is allowed, the client connects and all is good.
Lets say your worldserver is 192.168.0.1
and your zoneserver is 192.168.0.2
The typical bootzone.bat file might look like this:
start zone . 192.168.0.2 7995 192.168.0.1
start zone . 192.168.0.2 7996 192.168.0.1
start zone . 192.168.0.2 7997 192.168.0.1
start zone . 192.168.0.2 7998 192.168.0.1
start zone . 192.168.0.2 7999 192.168.0.1
If the ports are forwarding correctly then the client should'nt have any troubles connecting to the zoneserver once the worldserver hand them off. I have had some problems with Linksys firewall/routers dropping connections. If that happens the client of course goes LD. Other than that, i have used Dlink, SMC, TrendNet products without any issues.
Sorry this turned into a book but i hope the information helps you understand what is going on with firewalls/routers.
If you have any question please feel free to PM me and i will try to help as much as i can.
Krusher