Se o que você procura é uma solução geral de nível TCP, você deve aceitar
A resposta de Ecolitan como correta e premia a recompensa. Vejo que você demonstrou algum interesse em redirecionar outros serviços.
Se você está interessado apenas em HTTP, ou o rinetd não fará tudo que você precisa, então a resposta do nandoP sobre o uso do .htaccess está no caminho certo (uma solução, pelo menos), mas você precisa saber um pouco mais . Como alternativa, você pode usar um software de proxy dedicado, como verniz ou lula. Se você estiver familiarizado com o Apache, pode ficar com isso.
Um apacherule redirecionaria, por exemplo, o link para link e, a menos que você faça algo a respeito, hostB verá a solicitação chegando como sendo para esse domínio. Dependendo do seu site, você provavelmente precisará consertar as coisas no hostB, a fim de que ele não comece a enviar páginas com URLs que se refiram ao hostb.example.com.
Se você tiver uma versão mais antiga do apache, talvez seja necessário corrigir o cabeçalho do host no hostB, mas, a partir do Apache 2.0.31, há uma diretiva ProxyPreserveHost
(consulte docs para o mod_proxy) que você pode colocar no hostA.
Já faz um tempo que eu precisava disso, e acabei de descobrir sobre o ProxyPreserveHost. Parece que você precisa de algo assim em hostA (não testado):
<VirtualHost *:80>
Servername www.example.com
RewriteEngine on
ProxyPreserveHost on
RewriteCond %{REMOTE_ADDR} ^123\.45\.67\.[0-9]*$
RewriteRule ^(.*)$ http://hostb.example.com/$1 [P]
...
</VirtualHost>
Seria possível adicionar vários domínios a este serverconfig, mas provavelmente é melhor configurar como acima separadamente para cada domínio.
Se o RewriteCond não corresponder, ele processará outras regras na configuração do virtualhost.