kneesocksを作った

proxychains-ngより手軽に使えるSOCKS 5 proxiferを作った。 LD_PRELOADを使ってconnect(2)を置き換えることにより、だいたいのコマンドでSOCKS 5 Proxyを経由するようにする。 最初はsocksifyというコマンド名にしようとしたのだが、すでに存在していたのでkneesocksにした。

使い方としては、OpenSSHのdynamic port forwardingと組み合わせて次のように使う。

$ ssh -D 1080 user@192.168.0.2 -f sleep 3600
$ kneesocks curl http://www.example.com/

これで、直接インターネットにアクセスできないサーバでも、192.168.0.2にあるSSHサーバを経由してアクセスできるようになる。 また、getaddrinfo(3)/gethostbyname(3)を置き換えDNS名前解決をプロクシ側で行うようにするため、自身で名前解決できなくても動く。

設定の変更は環境変数から行う。

$ export socks_proxy=127.0.0.1:1080

デフォルトでは上のように、プロクシサーバとしてlocalhosttcp/1080を使うようになっている。

OpenSSHのdynamic port forwardingがTCP BINDやUDP Associateに対応していないため、とりあえずのサポートはTCP CONNECTのみ。 インターネットに出れるSSHサーバさえあれば、あとはクライアント側でこれを使うだけでどのサーバでもapt-getなどできて便利だと思う。