概要
SOCKS プロキシーは OpenSSH などで手軽に建てられるプロキシーの一つですが、redsocks を使用することで TCP のパケットが透過的に SOCKS プロキシーを経由するように設定す ることができます。今回は EdgeRouter X に redsocks をインストールし、LAN 内のコンピューターから特定の宛先への TCP 通信と名前解決が透過的に SOCKS プロキシーを経由するように設定してみます。
redsocks とは
redsocks は TCP パケットを受け取り、SOCKS/HTTPS プロキシーを通過させて返すソフトウェアです。iptables の REDIRECT や DNAT と組み合わせて、redsocks の動作しているポートにプロキシーを通過させたいパケットを転送して使用します。このとき、iptables が REDIRECT や DNAT で付け替える前の本来の宛先アドレスや宛先ポートは、getsockopt()
でソケットを取得する際の SO_ORIGINAL_DST
というオプションによって取得されるため1、iptables のルールを設定するホストと redsocks が動作するホストは同一のマシンである必要があります。
TCP の場合
iptables の DNAT ルールによって redsocks に向けられたパケットが SOCKS プロキシーに転送されます。