> For the complete documentation index, see [llms.txt](https://axiomemu.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://axiomemu.gitbook.io/docs/joinserver/allowableiplist.md).

# AllowableIpList.txt

JoinServer rejects every incoming GameServer connection whose remote IP is not in this file. The check runs at socket accept time via a condition callback, before any bytes are read and before authentication.

## File Location

```
JoinServer/AllowableIpList.txt
```

Loaded once at startup, after the TCP listen socket is up and the UDP heartbeat target has been resolved. Changes require a JoinServer restart.

## Format

```
0
"127.0.0.1"
"10.0.0.5"
"10.0.0.6"
end
```

* First line: section number `0`
* Middle lines: one IPv4 address per line, double-quoted
* Last line: the literal token `end`

Rules:

* IPv4 only
* Exact string match against the dotted-quad form of the connecting socket's remote address; no CIDR, no wildcards, no hostnames
* Whitespace and blank lines between entries are ignored
* `//` starts a line comment and is skipped to end of line
* The file is parsed as a script, not line-by-line; keep the `0` and `end` markers
* Only section `0` is scanned for addresses; any other section number is silently skipped

## Important Behavior

* A missing, empty, or malformed file results in an empty whitelist, which blocks every GameServer
* Addresses are compared to the remote IP as seen by the OS. Behind NAT, list the public IP that reaches JoinServer, not the private one the GameServer binds to
* `127.0.0.1` allows only loopback connections from the same host; it does not cover any LAN IP
* Duplicate entries are silently collapsed into a single whitelist slot
* No wildcard support; every GameServer needs its own line
* The parser enforces a one-second wall-clock limit on the whole file; oversized or malformed files will abort loading with an error box and leave the whitelist empty

## Examples

{% tabs %}
{% tab title="Single host" %}
{% code title="AllowableIpList.txt" %}

```
0
"127.0.0.1"
end
```

{% endcode %}
{% endtab %}

{% tab title="Multiple GameServers" %}
{% code title="AllowableIpList.txt" %}

```
0
"10.0.0.5"
"10.0.0.6"
"10.0.0.7"
end
```

{% endcode %}
{% endtab %}
{% endtabs %}

## Common Issues

* **GameServer connects and instantly drops** - the IP JoinServer sees is not the one in the file. Check what the OS reports on the JoinServer host, not what the GameServer thinks its IP is
* **All GameServers rejected after restart** - file saved without the `end` line, or the `0` header is missing
* **Works on one host, fails on another** - NAT or a proxy changed the source IP; add the translated address

## Related

* [JoinServer.ini](/docs/joinserver/joinserver-ini.md) - port, database, and license configuration
* [DataServer AllowableIpList.txt](/docs/dataserver/allowableiplist.md) - identical format, separate file, GameServer IPs that may reach DataServer
