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
デフォルトでは上のように、プロクシサーバとしてlocalhostのtcp/1080を使うようになっている。
OpenSSHのdynamic port forwardingがTCP BINDやUDP Associateに対応していないため、とりあえずのサポートはTCP CONNECTのみ。 インターネットに出れるSSHサーバさえあれば、あとはクライアント側でこれを使うだけでどのサーバでもapt-getなどできて便利だと思う。