Şeffaf bir SOCKS proxy'si hangi hedef IP'nin kullanılacağını nasıl biliyor?


18

Giden TCP bağlantısı için saydam proxy sunucusunu destekleyen iki SOCKS proxy var: Tor ve redsocks . HTTP yakınlık farklı olarak, bu ÇORAP vekiller şeffaf vekil olabilir herhangi bir meta veri veya başlıkları olmadan şifrelenmiş protokol ve protokolleri giden TCP bağlantısı.

Bu proxy'lerin her ikisi de, giden TCP trafiğini proxy'nin yerel bağlantı noktasına yeniden yönlendirmek için NAT kullanılmasını gerektirir. Örneğin, TransPort 9040yerel makinemde Tor ile çalışıyorsam , böyle bir iptables kuralı eklemem gerekir:

iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-port 9040

Bildiğim kadarıyla, bu orijinal hedefi IP ve port yerini alacak 127.0.0.1ve 9040bu nedenle bu (gibi başlıkları olmadan şifreli (SSH gibi) akışı veya bir olduğu göz önüne alındığında, whois ), nasıl vekil orijinal hedef IP ve port biliyor?

Yanıtlar:


28

İşte böyle yapar:

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 orijinal hedef adresini geçersiz kılar ancak eskisini hatırlar. Uygulama kodu daha sonra özel bir soket seçeneği isteyerek kodu alabilir SO_ORIGINAL_DST.


1
Müthiş cevap! Yani bu, proxy yazılımını NAT ile aynı bilgisayarda çalıştırmanız gerektiği anlamına geliyor, değil mi?
hololeap

4
Kesinlikle, @hololeap. Proxy sunucusu paket yeniden yönlendiricisi olarak farklı bir sistemde çalışacaksa, Cisco'nun WCCP'si gibi protokollere ihtiyacınız vardır .
Celada
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.