Как получить информацию с машины, находящейся за серым ip адресом?
Писать своего ничего не нужно.
С target.host настраиваете беспарольную ssh авторизацию и запускаете команду
ssh -CND user@remote.host -R 80:127.0.0.1:apache_port
и собственно после этого можете обращаться на remote.host на порт 80 так, как будто апач у вас запущен на нём, а не на target.host.
чтобы в случае разрывов ssh самостоятельно восстанавливал соединение, можете использовать утилиту autossh.
Опции -CND нужны для того, чтобы ssh сжимал трафик и не запускал оболочку.
ssh -CND user@remote.host -R 80:127.0.0.1:apache_portвообще не уверен что такое сработает, т.к. вы попытаетесь занять 80 порт, на котором как я понял из объяснения и так висит apache. Так что лучше заменить 80 на что-то левое (например. 8791), а на «сервере» описать как и хотел TC virtualhost (test.example.com) и указать ему ProxyPass на 127.0.0.1:8791/.
К тому же пример с 80 портом и пользователем «user» неработоспособен, т.к. порт привилегированный и пользователь не сможет его слушать.

> Опции -CND нужны для того, чтобы ssh сжимал трафик и не запускал оболочку. 
Опция -D нужна для динамического проброса портов в другую сторону (читай создание локального socks через удалённый сервер). А все ключи, включая нужный нам -R стоит писать до имени хоста к которому мы подключаемся, хотя ssh, наверное, «съест» и такой вариант.