DNS + HTTP server for distribution of PS3 HFW (Hybrid Firmware) updates, enabling installation without a USB drive on consoles with OFW (Official Firmware) or HFW (Hybrid Firmware).
This server intercepts PS3 update requests and serves a custom HFW PUP file instead of downloading from Sony's servers. It works by:
- DNS Server: Redirects PS3 update domains (
*.ps3.update.playstation.net) to the machine - HTTP Server: Serves the spoofed
updatelist.txtandPS3UPDAT.PUPfile
Important: The DNS server runs on port 53 (the standard DNS port). The PS3 can only be configured with an IP address for DNS, not a port number, so port 53 is mandatory.
- Java 17 or higher
Go to the Releases page and download the latest hfwserver-*.jar file.
Download the HFW firmware from the PS3-Pro/Firmware-Updates GitHub repository:
curl -L -o firmware/PS3UPDAT.PUP \
"https://github.com/PS3-Pro/Firmware-Updates/releases/download/HFW/Hybrid_Firmware.PUP"The server reports version 9.00 to force the PS3 to always perform the update, even if 4.92 is already installed.
Create the following structure:
ps3-hfw-update-server/
├── hfwserver-{version}.jar
└── firmware/
└── PS3UPDAT.PUP
Linux/Mac:
java -jar hfwserver-{version}.jar --verboseWindows:
java -jar hfwserver-{version}.jar --verboseThe server will auto-detect your network IP address. You can also specify it manually:
java -jar hfwserver-{version}.jar --local-ip 192.168.1.100 --verboseNote: DNS runs on port 53 and HTTP on port 80 (standard ports required by PS3).
From the PlayStation 3 main menu:
- Go to Settings > Network Settings
- Select Internet Connection Settings
- Confirm Yes when prompted about disconnecting from the internet
- When prompted to "Select a setting method," choose Custom
- Choose your connection method:
- Wired Connection (for Ethernet cable)
- Wireless (scan for your Wi-Fi network and enter the password)
- IP Address Setting: Choose Automatic (or Manual if you prefer a static IP)
- DHCP Host Name: Select Do Not Set
- DNS Setting: Select Manual
- Enter your server's IP address in both Primary DNS and Secondary DNS fields
- Scroll through remaining settings with defaults:
- MTU: Automatic
- Proxy Server: Do Not Use
- UPnP: Enable
- Press X or Enter to save your settings
- Make sure the server is running
- On PS3, go to Settings > System Update
- Select Update via Internet
Docker is the easiest way to run the server 24/7 on cloud servers (tested on Linux/Mac).
docker pull ghcr.io/pcamposu/ps3-hfw-update-server:latest1. Clone repository:
git clone https://github.com/pcamposu/ps3-hfw-update-server.git
cd ps3-hfw-update-server2. Configure LOCAL_IP:
Edit docker-compose.yml and set the LOCAL_IP environment variable to your server's IP address:
- LAN deployment: Use your local network IP (e.g.,
192.168.1.100) - VPS/Cloud deployment: Use your server's public IP address
IMPORTANT: LOCAL_IP is REQUIRED in Docker. The default value 192.168.1.100 MUST be changed to your actual IP address. The PS3 will be redirected to this IP, so it must be reachable from your PS3.
3. Start server:
Production (ports 53/80):
docker compose build --no-cache
docker compose up -d --force-recreateDevelopment (ports 53/80):
docker compose -f docker-compose.dev.yml build --no-cache
docker compose -f docker-compose.dev.yml up --force-recreate4. View logs:
docker compose logs -f5. Stop server:
docker compose downDeploy to any cloud provider (AWS, GCP, Azure, DigitalOcean):
ssh user@your-server
curl -fsSL https://get.docker.com | sh
usermod -aG docker $USER
mkdir -p ~/ps3-hfw-server/firmware
cd ~/ps3-hfw-server
curl -L -o firmware/PS3UPDAT.PUP \
"https://github.com/PS3-Pro/Firmware-Updates/releases/download/HFW/Hybrid_Firmware.PUP"
# Run container (replace YOUR_SERVER_IP with your LAN IP or public IP for VPS)
docker run -d \
--name ps3-hfw-server \
--restart unless-stopped \
-p 53:53/tcp \
-p 53:53/udp \
-p 80:80/tcp \
-e LOCAL_IP=YOUR_SERVER_IP \
-e UPSTREAM_DNS=8.8.8.8 \
-e VERBOSE=false \
--pull always \
--cap-add=NET_BIND_SERVICE \
ghcr.io/pcamposu/ps3-hfw-update-server:latestImportant: Replace YOUR_SERVER_IP with:
- Your LAN IP (e.g.,
192.168.1.100) for local network deployment - Your public IP for VPS/cloud deployment (use
curl -4 ifconfig.meto find it)
View logs:
docker logs -f ps3-hfw-serverStop server:
docker stop ps3-hfw-server && docker rm ps3-hfw-server- Java 17 or higher
- Gradle (included via wrapper)
git clone https://github.com/pcamposu/ps3-hfw-update-server.git
cd ps3-hfw-update-server
./gradlew clean buildThe JAR will be created at: build/libs/hfwserver-{version}.jar
java -jar build/libs/hfwserver-{version}.jar --verbose| Option | Description | Default |
|---|---|---|
--upstream-dns |
Upstream DNS server | 8.8.8.8 |
--local-ip |
Local IP (auto=detect) | auto |
-v, --verbose |
Enable verbose logging | false |
-h, --help |
Show help | - |
Note: DNS runs on port 53 and HTTP on port 80 (standard ports required by PS3).
The firmware file must always be at ./firmware/PS3UPDAT.PUP.
The server reports version 9.00 to force PS3 updates (hardcoded in UpdateListService).
When your PS3 tries to update:
- PS3 sends DNS query for
dus01.ps3.update.playstation.net - This server intercepts the query and returns the server's IP
- PS3 connects to this server instead of Sony's servers
The HTTP server serves:
/update/ps3/list/{region}/ps3-updatelist.txt- Spoofed update list with Target ID/PS3UPDAT.PUP- Your HFW firmware file
src/main/groovy/com/pcamposu/ps3/hfwserver/
├── Ps3HfwUpdateServerApplication.groovy
├── config/
│ ├── CliConfig.groovy
│ └── DnsServerConfig.groovy
├── dns/
│ └── Ps3DnsServer.groovy
├── http/
│ ├── controller/
│ │ └── Ps3UpdateController.groovy
│ └── service/
│ └── UpdateListService.groovy
├── model/
│ └── RegionInfo.groovy
└── util/
└── NetworkUtils.groovy
./gradlew testThis project was inspired by and built upon the work of many talented developers in the PS3 homebrew scene:
@LuanTeles, @PS3Xploit, @habib, @Evilnat, @DeViL303, @zecoxao
And many others who have contributed to the PS3 scene over the years. Thank you for paving the way.
This project is licensed under the GNU General Public License v3.0. See the COPYING file for details.
