Odd SOCKS
As a follow-on from my last post I’ll discuss the networking on my Fedora 11 machine. I’m not a massive networking geek; I know quite a bit, but mostly through trial-and-error as a step to getting something else working. For this reason I’ve never introduced something unnecessary into the mix for its own sake, and thus all I knew about SOCKS was that there’s version 4 and 5 in the wild, and it’s used by The Onion Router. Since I’ve always used TOR for HTTP, and used a privacy-filtering-type proxy like Privoxy to handle the HTTP<->SOCKS tunneling, I’ve never bothered learning more about it.
Now, my office machine is set up to route through a SOCKS proxy on a different machine on the ethernetwork. Web browsing is simply a matter of Firefox’s Edit->Settings->Advanced->Network->Settings. However, Thunderbird (which has exactly the same connection changing interface as Firefox) can’t connect through IMAP this way. This is due to IMAP not going over HTTP. The same applies to SVN, ping, etc. There is a solution though, which is to use connect-tunnel to run a local server for redirecting calls to any port through a HTTP proxy. Running a connect-tunnel command like:
./connect-tunnel -P 192.168.1.1:1080 -T 10234:mysite.com:3690will allow us to run a command like
svn co svn://localhost:10234 which will think it’s checking
out a subversion repository from the current machine on port 10234, when
in fact it is being routed through a HTTP proxy on port 1080 of
192.168.1.1 to the remote machine at mysite.com on port 3690.
This is great, but the proxy isn’t HTTP, it’s SOCKS, so we need some
way of tunneling this HTTP connection through SOCKS (so, in this
example, we’d have a SOCKS proxy redirecting HTTP traffic which is
encapsulating an SVN connection). This was fine for Firefox, which has
built-in facilities to redirect over a SOCKS proxy, but not all
applications do (especially if they don’t even know they’re being
tunneled through HTTP in the first place!). This is where we use a
“socksify” program, which intercepts HTTP requests and redirects them
without the application which made them knowing about it. There are a
few of these, for example Dante contains such functionality and is in
Debian, but unfortunately it isn’t in Fedora and I was after something I
wouldn’t have to compile (due to dependency hell). Fedora does contain
tsocks which is pretty simple to set up and use, and worked for some
applications. It could be used either via
tsocks my_application_name (eg.
tsocks evolution to run the Evolution mail reader through
SOCKS), or via adding its library to the LD_PRELOAD
environment variable, which affects all subsequently executed
applications (eg. put it in your .bash_profile). However I found it
didn’t work for some programs. I then tried proxychains, which I’m
pretty happy with. It is called in a similar way to tsocks, eg.
proxychains evolution, and works in some cases where tsocks
doesn’t.
Aside from this I also recommend setting environment variables, such
as http_proxy (which, once again, can be done via
.bash_profile) and your desktop’s settings (I found Gnome’s
to be useless here, since I didn’t come across any application which
actually paid attention to it, but KDE applications consistently adhere
to this setting, even if not all of them wind up working properly). For
Subversion the /etc/subversion/servers file is a good place
to put HTTP proxy settings, and try using http:// for the repository
address, as this may be configured to work as well as svn://.
Basically, try everything you can find, try them in combination and try layering/tunneling them. Even if you don’t seem to need one method now, the next application you try may need it 😉