Starter pack to build and run WiiLink WFC-Server in Docker.
Note
This project is not affiliated with WiiLink.
This project requires the following prerequisites:
- docker + docker-buildx-plugin (podman with docker shim might work too)
- git
- wget
- openssl
- sed
- Wii Client CA files (read below)
- a domain name to host wfc-server under IF you want to use the gecko codes. This guide uses
example.localas an example. - a custom DNS Server that can rewrite the domain
*.nintendowifi.netto point to your wfc-server's ip, IF you want to connect using the wii-ssl-bug or nds-constrain't methods.
Then you proceed as follows:
- Clone this repository
- Copy Wii Client CA files
clientca.pemandclientcakey.peminto the cloned directory. - Run the setup script with your domain name as an environment variable:
WWFC_DOMAIN=example.local ./setup.sh - You can then start the server with
docker compose upand stop it withdocker compose down.
Use the gecko codes created in wwfc-data/patches in your games to connect by custom domain name.
In order for DS games to connect without patching games, we need to create a custom Certificate using the Wii Client certificate.
These are not console-unique and can be pulled from any Wii.
You may also use Dolphin to get the certificate files:
Tools>Perform Online System UpdateTools>Manage NAND>Extract Certificates From NANDFile>Open User FolderWii/clientca.pemWii/clientcakey.pem
The setup script performs the following tasks:
- build necessary payload files and associated game patches, allowing Wii games to connect by using your domain name when the patch is applied*
- create an ssl certificate that will exploit the wii-ssl-bug, allowing games using Wii IOS36 or below to connect by only using a custom dns server**
- create an ssl certificate that will exploit the nds-constrain't bug, allowing NDS games to connect by only using a custom dns server**
- create a default tls certificate allowing https connection for modern browsers
- initialize the postgres database schema used by wfc-server
* your domain should have a dns entry *.example.local pointing to your wfc-server's ip address
** your custom dns server should rewrite the domain *.nintendowifi.net to point to your wfc-server's ip address
This project uses three docker images:
- docker.io/library/golang for building wfc-server
- docker.io/library/postgres for storing wfc-server data (users, friend codes etc.)
- docker.io/devkitpro/devkitppc (see their Dockerfiles) for building wfc-patcher-wii
Check the docker/ directory, setup.sh script and docker-compose.yml to see how the images are being used.
Consult the WiiLink error codes for error code explanation.
If you are using this project in WSL, it is simplest to enable WSL2 Mirrored Networking mode. If you want to connect using a real device, allow incoming connections through the Windows firewall (see Microsoft Documentation). This has security implications! You may want to host this on a server instead.
Ports are set in the docker-compose.yml and wfc-server-config.xml if you need a reference.