Pour ce qui est du surf anonyme (tout ce qui se base sur du TCP, donc en gros, le http, le ftp et les protocoles mail), il y a la solution
TOR.
Les paquets de données échangés se baladent dans tout un tas de noeuds entre la machine de l'utilisateur et le serveur, où chaque noeud ne connaît que les deux noeuds qui sont autour de lui.
L'anonymat est relativement bon (tout dépend où on situe la relativité), dans le sens où l'information qui se balade ne contient aucune donnée perso du type IP. Mais comme signalé dans le Wiki, il convient d'utiliser un bloqueur de script en parallèle, car les appli Java ont la fâcheuse tendance de vouloir tout savoir.
L'inconvénient principal reste la lenteur de la connexion qui en résulte. M'enfin j'ai pas plus d'expérience que ça sur Tor, j'ai juste fait joujou avec deux minutes, ça me mettait une IP basée en Italie par exemple. Mais ça change dans le temps.
Après, il y a le réseau
I2P ou aussi
Freenet. A chaque fois le principe est d'être un noeud du système, donc l'information transite par chez nous, même si on n'est ni émetteur ni récepteur. Apparemment, Freenet est celui qui offre le plus de garantie pour son anonymat, et c'est aussi le plus utilisé. Bon, j'ai pas encore testé, donc je ne sais pas si c'est facilement accessible à l'utilisateur lambda ou s'il faut se taper quelques configurations techniques.
Sinon, pour ce qui est de l'échange de fichier pur et dur (donc c'est pas ça qui va anonymiser vos recherches Google), y'a des protocoles comme
Mute et son successeur fork Kommute. C'est du p2p avec une couche anonymisante.
ANts est une autre alternative.