
私が知る限り、発信TCP接続の透過的なプロキシをサポートする2つのSOCKSプロキシがあります。トルそしてレッドソックス。 HTTPプロキシとは異なり、これらのSOCKSプロキシは透過的にプロキシを使用できます。どの暗号化されたプロトコル、メタデータやヘッダーのないプロトコルを含む発信TCP接続。
両方のプロキシが発信 TCP トラフィックをプロキシのローカルポートにリダイレクトするには、NAT が必要です。たとえば、TransPort 9040
ローカルコンピュータでTorを実行している場合は、次のiptablesルールを追加する必要があります。
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-port 9040
127.0.0.1
私が知っている限り、これは元の宛先IPとポートを次に置き換えるので、9040
これは暗号化されたストリーム(SSHなど)またはヘッダーのないストリーム(例:誰ですか?)、プロキシは元の宛先IPとポートをどのように知っていますか?
答え1
ここ実行方法:
static int getdestaddr_iptables(int fd, const struct sockaddr_in *client, const struct sockaddr_in *bindaddr, struct sockaddr_in *destaddr)
{
socklen_t socklen = sizeof(*destaddr);
int error;
error = getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, destaddr, &socklen);
if (error) {
log_errno(LOG_WARNING, "getsockopt");
return -1;
}
return 0;
}
iptablesは元の宛先アドレスを上書きしますが、古いアドレスは覚えています。その後、アプリケーションコードは特別なソケットオプションを要求してそれを取得できますSO_ORIGINAL_DST
。