For anybody with a jailbroken PS3 you might have heard about the DNS man-in-the-middle method of preventing forced upgrades. All you need to do is change your PS3's DNS server to an external one, but relying on somebody else's service in this case is both unreliable and insecure. Here's how you do it yourself with OpenWrt!
First, you need to make dnsmasq resolve Sony's update servers DNS names to your own router's IP instead. Modify/add these names to your router's IP address in /etc/hosts:
192.168.1.1 router openwrt fus01.ps3.update.playstation.net fjp01.ps3.update.playstation.net feu01.ps3.update.playstation.net fkr01.ps3.update.playstation.net fuk01.ps3.update.playstation.net fmx01.ps3.update.playstation.net fau01.ps3.update.playstation.net fsa01.ps3.update.playstation.net ftw01.ps3.update.playstation.net fru01.ps3.update.playstation.net fcn01.ps3.update.playstation.net
Next, create the directory /www/update/ps3/list, and create the file ps3-updatelist.txt with the following content:
# EU
Dest=85;CompatibleSystemSoftwareVersion=1.0000-;
Dest=85;ImageVersion=0000b99c;SystemSoftwareVersion=3.5500;CDN=http://deu01.ps3.update.playstation.net/update/ps3/image/eu/2010_1207_ca595ad9f3af8f1491d9c9b6921a8c61/PS3UPDAT.PUP;CDN_Timeout=30;
# US
Dest=84;CompatibleSystemSoftwareVersion=1.0000-;
Dest=84;ImageVersion=0000b99c;SystemSoftwareVersion=3.5500;CDN=http://dus01.ps3.update.playstation.net/update/ps3/image/us/2010_1207_ca595ad9f3af8f1491d9c9b6921a8c61/PS3UPDAT.PUP;CDN_Timeout=30;
Now make the following symlinks:
root@OpenWrt # ln -s /www/update/ps3/list /www/update/ps3/list/eu
root@OpenWrt # ln -s /www/update/ps3/list /www/update/ps3/list/us
And you're done!
Next time you launch a game, your PS3 will check http://fus01.ps3.update.playstation.net … telist.txt (if you're in the US) and make sure you are at least on "CompatibleSystemSoftwareVersion". Since that DNS name points to OpenWrt, and our webserver has a modified ps3-updatelist.txt, you won't need to update because we only require version 1.0000 "ImageVersion" is the version it will try to fetch if you use system update. I've modified that to use 3.55 which is the latest jailbreakable firmware at the moment.