Skip to content

Instantly share code, notes, and snippets.

@Nachlor
Last active July 17, 2026 21:32
Show Gist options
  • Select an option

  • Save Nachlor/fdf2a5f9de1c14aecfc4c8617401a2f3 to your computer and use it in GitHub Desktop.

Select an option

Save Nachlor/fdf2a5f9de1c14aecfc4c8617401a2f3 to your computer and use it in GitHub Desktop.
Lanemu P2P VPN LAN Gaming

Lanemu P2P VPN LAN Gaming

Table of Contents

Usage

  • Download and extract the latest Lanemu release by selecting your OS under Packages
  • Launch Lanemu
    • Windows
      • Run Lanemu.exe
    • Linux
      • Run Lanemu.desktop or Lanemu-pkexec / Lanemu-run0
  • Do you want to join 'Default network'?
    • Click No
  • Click the Options icon and select Global tab
    • Specify Your Name
    • Specify any port in "Listen on Port" (e.g., 5521)
      • At least one user should enable UPnP or forward the port(s) on the router
        • All used TCP and UDP ports are displayed in the Protocol selection
        • Legacy TCP port is unnecessary if all users are able to connect via RUDP
      • If nobody can set up port forwarding (stuck behind NAT)
        • Lanemu might be able to connect peers by using STUN and UDP hole-punching
          • STUN only works if all peers set Protocol to RUDP + UDP or RUDP
          • Created network must include BitTorrent Trackers / DHT Nodes
          • Peers behind Symmetric NAT won't be able to connect to anyone
        • In case of Symmetric NAT, all users can try hyper-nat (everyone must set Protocol to TCP + UDP)
        • If connection via hyper-nat is unsuccessful, all users can route Tailscale or other similar VPN through Lanemu
          • Lanemu allows Layer 3 VPNs to work in games that require Broadcast / Multicast
          • Replace all instances of PublicIP:Port with Tailscale or other VPN IP (e.g., 100.111.88.108:5521)
        • Alternatively, one user (Host PC) can create a tunnel (e.g., playit.gg)
          • Lanemu supports TCP+UDP or UDP-only / TCP-only tunnels
          • Tunnel type requirements (TunnelIP:TunnelPort -> 127.0.0.1:LanemuPort)
            • TCP+UDP
              • Lanemu Protocol: RUDP + UDP (Legacy TCP) or TCP + UDP
                • Example: tcp-udp-tunnel.gl.at.ply.gg:6411 -> 127.0.0.1:6411
                • TunnelPort and LanemuPort must be identical
                • RUDP + UDP needs 1 tunnel with 2 sequent ports (e.g., 6411 & 6412)
                  • STUN server field in the Network tab must be empty
              • Lanemu Protocol: RUDP (Legacy TCP)
                • Example: tcp-udp-tunnel.gl.at.ply.gg:6411 -> 127.0.0.1:5521
                • TunnelPort and LanemuPort can be the same or different
            • UDP-only
              • Lanemu Protocol: RUDP + UDP
                • Example: udp-tunnel.gl.at.ply.gg:6411 -> 127.0.0.1:6411
                • TunnelPort and LanemuPort must be identical
                • RUDP + UDP needs 1 tunnel with 2 sequent ports (e.g., 6411 & 6412)
                  • STUN server field in the Network tab must be empty
              • Lanemu Protocol: RUDP
                • Example: udp-tunnel.gl.at.ply.gg:6411 -> 127.0.0.1:5521
                • TunnelPort and LanemuPort can be the same or different
            • TCP-only
              • Lanemu Protocol: TCP
                • Example: tcp-tunnel.gl.at.ply.gg:6411 -> 127.0.0.1:5521
                • TunnelPort and LanemuPort can be the same or different
    • Click OK
  • Steps for Host PC
    • If you are using hyper-nat
      • Modify hyper-nat options.json file
        {
            "schema": [
                {
                    "mode": "server",
                    "proto": "tcp",
                    "port": "5521",
                    "host": "127.0.0.1",
                    "secret": "SomeUniqueTextThatIsTheSameForAllPorts"
                },
                {
                    "mode": "server",
                    "proto": "udp",
                    "port": "5521",
                    "host": "127.0.0.1",
                    "secret": "SomeUniqueTextThatIsTheSameForAllPorts"
                }
            ]
        }
      • Launch hyper-nat
        • Windows
          • Run hyper-nat.exe
        • Linux
          • Open the Terminal in Lanemu -> hyper-nat folder
            • npm install
            • npm run start
      • Windows : Allow hyper-nat through Windows Firewall
        • Check both Private and Public networks
        • Click Allow access
      • Copy your public key from the Console / Terminal
        • Windows
          • Highlight it and press CTRL + C
        • Linux
          • Highlight it and press CTRL + SHIFT + C
      • Send your public key to every Client
    • Create a network
      • Click the New Network icon
      • Select Simple tab
        • Specify Network Name
      • Select Advanced tab
        • If you are using UPnP / Port Forwarding or Tunneling Services
          • Specify your PublicIP:Port or TunnelIP:Port in Known Hosts
            • Example: 82.129.80.111:5521 or udp-tunnel.gl.at.ply.gg:6411
        • If you are using hyper-nat
          • Specify these network settings
            • Known Hosts: 127.0.0.1:5521
            • BitTorrent Trackers: Empty
            • BitTorrent DHT Nodes: Empty
      • Click OK
    • Windows : Allow OpenJDK through Windows Firewall
      • Check both Private and Public networks
      • Click Allow access
    • Create an invitation
      • Click the Invite Someone icon
      • Check Allow invitation of others
      • Click Generate Invitation
      • Click Save to a File
      • Click Close
    • Send the invitation file to every Client
      • You may also send a pre-configured profile.ini file that automatically accepts your invitation on first launch
        default.autoInvite=invitation_file.txt
  • Steps for Client PC
    • If you are using hyper-nat
      • Temporarily close Lanemu
        • Right click Lanemu tray icon and select Quit
      • Modify hyper-nat options.json file
        {
            "schema": [
                {
                    "mode": "client",
                    "proto": "tcp",
                    "port": "5521",
                    "serverport": "5521",
                    "publicKey": "CopyPasteTheServerPublicKeyHere"
                },
                {
                    "mode": "client",
                    "proto": "udp",
                    "port": "5521",
                    "serverport": "5521",
                    "publicKey": "CopyPasteTheServerPublicKeyHere"
                }
            ]
        }
      • Launch hyper-nat
        • Windows
          • Run hyper-nat.exe
        • Linux
          • Open the Terminal in Lanemu -> hyper-nat folder
            • npm install
            • npm run start
      • Windows : Allow hyper-nat through Windows Firewall
        • Check both Private and Public networks
        • Click Allow access
      • Wait until hyper-nat establishes connection to the server
        • The window closes if connection fails, you might have to retry several times
      • Relaunch Lanemu
    • Join a network
      • Click the Accept Invitation icon
      • Click Load from File
      • Click OK
    • Windows : Allow OpenJDK through Windows Firewall
      • Check both Private and Public networks
      • Click Allow access
    • Wait for connection
      • If connection did not occur automatically
        • Option 1 : Click the Connect to Known IPs icon at the bottom
        • Option 2 : Click the Information icon at the bottom and select Connections tab
          • If you are using hyper-nat
            • Enter 127.0.0.1:Port (e.g., 127.0.0.1:5521) next to the Connect To button and click it
          • If you are using other connection method
            • Enter a peer PublicIP:Port or TunnelIP:Port next to the Connect To button and click it

Troubleshooting (Linux)

Troubleshooting (Windows)

  • Disable SSDP Discovery
    • Open Control Panel
    • Click System and Security
    • Click Administrative Tools
    • Open Services
    • Right click SSDP Discovery and select Properties
    • Click Stop
    • Startup type: Disabled
    • Click Apply and OK
  • Enable DirectPlay and Media Features
    • Open Control Panel
    • Click Programs
    • Click Turn Windows features on or off
    • Expand Legacy Components
      • Check DirectPlay
    • Check Media Features
    • Click OK
  • Allow DirectPlay and game through Windows Firewall
    • Open Control Panel
    • Click System and Security
    • Click Allow an app through Windows Firewall
    • Click Change settings
    • Click Allow another app
    • Click Browse
      • DirectPlay
        • Go to C:\Windows\SysWOW64
        • Select dplaysvr.exe and click Open
      • DirectPlay 8 (x32)
        • Go to C:\Windows\System32
        • Select dpnsvr.exe and click Open
      • DirectPlay 8 (x64)
        • Go to C:\Windows\SysWOW64
        • Select dpnsvr.exe and click Open
      • Game
        • Go to game directory
        • Select game executable and click Open
    • Click Network types
      • Check Private and Public
      • Click OK
    • Click Add
    • Click OK

Recommendations

@Nachlor

Nachlor commented Aug 1, 2025

Copy link
Copy Markdown
Author

yes, my VPS support both UDP and TCP port forwarding !

Make sure everyone has Dolphin allowed on Windows Firewall for both Private and Public networks.

If someone has any other VPNs installed (e.g., Radmin, Hamachi, ZeroTier, GameRanger), it would be better to disable their network adapters.

Not sure about Dolphin, but maybe it has a setting for choosing which network adapter to use?

@pftmclub

pftmclub commented Aug 2, 2025

Copy link
Copy Markdown

yes, my VPS support both UDP and TCP port forwarding !

Make sure everyone has Dolphin allowed on Windows Firewall for both Private and Public networks.

If someone has any other VPNs installed (e.g., Radmin, Hamachi, ZeroTier, GameRanger), it would be better to disable their network adapters.

Not sure about Dolphin, but maybe it has a setting for choosing which network adapter to use?

The problem is both of them can't ping each other with indirect status through command prompt

Just found new alternative to lanemu with NAT traversal and relay server support. Will you look at it and make a tutorial for it?

https://github.com/anywherelan/awl

@Nachlor

Nachlor commented Aug 2, 2025

Copy link
Copy Markdown
Author

The problem is both of them can't ping each other with indirect status through command prompt

I doubt that indirect connection is the issue here. Could you test any other PC game with LAN multiplayer?

Just found new alternative to lanemu with NAT traversal and relay server support. Will you look at it and make a tutorial for it?

https://github.com/anywherelan/awl

Not a fan of it because it's a Layer 3 VPN (incompatible with games like Blur that don't have a Direct IP option and rely on auto-discovery via Broadcast / Multicast).

@Nachlor

Nachlor commented Aug 2, 2025

Copy link
Copy Markdown
Author

Just found new alternative to lanemu with NAT traversal and relay server support.

Besides, you can use hyper-nat for NAT Traversal (hole-punching). You can recreate Lanemu network and specify two IPs in Known Hosts (PublicIP:6666;127.0.0.1:6666), so users can connect automatically with or without hyper-nat (clients should temporarily close Lanemu before connecting to your hyper-nat server). BitTorrent Tracker and DHT are not necessary because your VPS is hosted 24/7 and its PublicIP isn't likely to change.

@pftmclub

pftmclub commented Aug 3, 2025

Copy link
Copy Markdown

Just found new alternative to lanemu with NAT traversal and relay server support.

Besides, you can use hyper-nat for NAT Traversal (hole-punching). You can recreate Lanemu network and specify two IPs in Known Hosts (PublicIP:6666;127.0.0.1:6666), so users can connect automatically with or without hyper-nat (clients should temporarily close Lanemu before connecting to your hyper-nat server). BitTorrent Tracker and DHT are not necessary because your VPS is hosted 24/7 and its PublicIP isn't likely to change.

May i ask why is the "host" section have to be 127.0.0.1 ? What's happend if i set it to PublicIP ? Can the two computer connect to my VPS Public IP from Hyper-nat then ping each other with their Dynamic IP instead?

And latency from Lanemu Virtual IP are not stable sometimes, you can see the suddenly 85ms latency while the Pubic IP got stable ~25ms
image

@Nachlor

Nachlor commented Aug 3, 2025

Copy link
Copy Markdown
Author

May i ask why is the "host" section have to be 127.0.0.1 ? What's happend if i set it to PublicIP ? Can the two computer connect to my VPS Public IP from Hyper-nat then ping each other with their Dynamic IP instead?

Actually, I haven't tested a scenario where both port forwarding and hyper-nat are used. The 127.0.0.1:6666 would be required if you hosted a hyper-nat server without port forwarding (this IP connects a client to itself, which in turn connects to your hyper-nat server).

What happens if you use hyper-nat and don't specify 127.0.0.1:6666 in Known Hosts? Try it with 3 or more users and check if everyone gets a direct connection.

And latency from Lanemu Virtual IP are not stable sometimes, you can see the suddenly 85ms latency while the Pubic IP got stable ~25ms

Spikes can happen from time to time. Does it always repeat when you ping the VPN IP?

@pftmclub

pftmclub commented Aug 3, 2025

Copy link
Copy Markdown

May i ask why is the "host" section have to be 127.0.0.1 ? What's happend if i set it to PublicIP ? Can the two computer connect to my VPS Public IP from Hyper-nat then ping each other with their Dynamic IP instead?

Actually, I haven't tested a scenario where both port forwarding and hyper-nat are used. The 127.0.0.1:6666 would be required if you hosted a hyper-nat server without port forwarding (this IP connects a client to itself, which in turn connects to your hyper-nat server).

Then i just have to use the VPS Public IP if i hosted a hyper-nat server on VPS , right ?

What happens if you use hyper-nat and don't specify 127.0.0.1:6666 in Known Hosts? Try it with 3 or more users and check if everyone gets a direct connection.

What's i truly mean is that can both client connected to each other using hyper-nat but without VPN if i specify VPS public IP on hyper-nat server?

And latency from Lanemu Virtual IP are not stable sometimes, you can see the suddenly 85ms latency while the Pubic IP got stable ~25ms

Spikes can happen from time to time. Does it always repeat when you ping the VPN IP?

Yes, it's always repeat when i open Lanemu then ping the VPN IP after few second . There is no spikes when i ping the public IP itself

@Nachlor

Nachlor commented Aug 3, 2025

Copy link
Copy Markdown
Author

Then i just have to use the VPS Public IP if i hosted a hyper-nat server on VPS , right ?

What's i truly mean is that can both client connected to each other using hyper-nat but without VPN if i specify VPS public IP on hyper-nat server?

Keep it simple and host both Lanemu and hyper-nat on the same VPS:

Lanemu

  • I'd recommend adding both IPs to Known Hosts (VPS_PublicIP:6666;127.0.0.1:6666). If your VPS ever shuts down, some other user can copy your hyper-nat options.json file and act as a server :)

hyper-nat

  • Don't change the "host" section from options.json file, just leave it at "127.0.0.1".

Yes, it's always repeat when i open Lanemu then ping the VPN IP after few second . There is no spikes when i ping the public IP itself

Perhaps it's not noticeable during gameplay? If everything feels smooth, I wouldn't worry about it.

@Monsterovich

Monsterovich commented Aug 8, 2025

Copy link
Copy Markdown

And latency from Lanemu Virtual IP are not stable sometimes, you can see the suddenly 85ms latency while the Pubic IP got stable ~25ms

This is unlikely to be related to Lanemu. Packets are being lost. I can reproduce this randomly on any public IP address. Just make sure you have UDP mode enabled. I would avoid TCP/UDP in TCP when possible.

@pftmclub

Copy link
Copy Markdown

@Nachlor : Hyper-NAT are switch to read-only repo and they are dead, TCP connection does not work anymore.
image

i hope there is a way to fix this in future

@Nachlor

Nachlor commented May 30, 2026

Copy link
Copy Markdown
Author

@Nachlor : Hyper-NAT are switch to read-only repo and they are dead, TCP connection does not work anymore.

You can ignore this "error", it only appears if the exposed app hasn't been launched for a while.

I just opened Lanemu a bit later and everything went back to normal.

There's another similar project being developed, but the client config only seems to support one protocol (TCP or UDP) at a time:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment