Om het ook toegankelijk te laten zijn voor mensen achter een http-proxy, is er ondersteuning toegevoegd voor verbindingen via een http-tunnel.
Het implementeren ging redelijk vlot, er moesten twee punten worden opgepakt,
- configuratie van de apache server voor het toestaan/ondersteunen van de tunnel
- client-side verbinden via de proxy
1. Tunnel configureren in Apache
Uiteraard moeten hiervoor mod_proxy & mod_proxy_connect modules geïnstalleerd zijn.<VirtualHost *:80>
ServerName tunnelvhost.company.nl
DocumentRoot /var/www/html
# alleen 'CONNECT' toestaan
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^CONNECT [NC]
RewriteRule ^/(.*)$ - [F,L]
ProxyRequests On
ProxyMaxForwards 15
# alleen tunnels naar poort 8077 toestaan
AllowCONNECT 8077
# standaard alles blokkeren
<Proxy *>
Order deny,allow
Deny from all
</Proxy>
# tunnels naar tunnelvhost.company.nl toestaan
<ProxyMatch (tunnelvhost\.company\.nl)>
Order allow,deny
Allow from all
</ProxyMatch>
</VirtualHost>
2. Client-side aanpassingen
De client-side code van meekijken.info is gemaakt in C++. Handmatig wordt een socket(2) gemaakt waarmee de verbinding tot stand komt. Aan de applicatie hoeven maar enkele wijzigingen te worden gemaakt. Er moet nu verbonden worden met poort 80 van de webserver en het CONNECT commando moet worden meegegeven,
CONNECT tunnelvhost.company.nl:8077 HTTP/1.1
Host: tunnelvhost.company.nl
Vervolgens wordt de http-response header uitgelezen,
HTTP/1.0 200 Connection Established
Proxy-agent: Apache/2.4.25 (Debian)
Nadat deze header is uitgelezen, is de tunnel tot stand gebracht en werkt de verbinding als of er direct een verbinding is gemaakt op poort 8077.