Pirminiai tikslai permatomame TCP–SOCKS persiuntime
Paaiškina, kodėl permatomam TCP–SOCKS persiuntimui reikia vertėjo, kuris atkuria pirminį tikslą prieš derantis su tarpiniu serveriu.
Užkarda gali pakeisti, kur nukrenta TCP ryšys. Tačiau vien šiuo pakeitimu ji negali išmokyti pradinės programos kalbėti SOCKS.
Įprastas SOCKS serveris laukia derybų, kuriose aprašomas prašomas tikslas. Programa, nežinanti apie tarpinį serverį, vietoje to iš karto siunčia savo protokolo baitus. Nukreipkite tuos baitus tiesiai į SOCKS klausytoją ir abi pusės nesutars dėl pirmojo pranešimo.
Trūkstamas komponentas yra vertėjas
Permatomas TCP–tarpinio serverio komponentas yra tarp tų sąsajų. Jis nustato tikslą, kurio programa iš pradžių prašė, užmezga atitinkamą SOCKS arba HTTP CONNECT sesiją ir tada perduoda programos duomenis gautu srautu.
Savo Linux iptables kelyje redsocks šaltinis gauna išsaugotą tikslą naudodamas SO_ORIGINAL_DST. Kitos operacinės sistemos ir nukreipimo metodai naudoja kitus mechanizmus. Tai nukreipiklio ir tinklo sąrankos savybė, o ne įprasta SOCKS kliento funkcija.
Informacija apie pirminį tikslą taip pat paaiškina, kodėl nukreipimo taisyklės perkėlimas iš tarpinio serverio mazgo į nesusijusius vartus ne visada yra lygiavertis. Priimantis procesas turi gauti metaduomenis, kurių reikalauja jo perėmimo būdas. Kitur perrašytas adresas gali nebeperduoti šios informacijos laukiama forma.
Laikykite vertėjo apimtį aiškią. Veikiantis nukreiptas TCP ryšys neįrodo savavališko UDP, ICMP ar kiekvieno sprendiklio kelio palaikymo. Aukštesnio lygio tarpinio serverio protokolas ir vertėjo įgyvendinimas vis dar apibrėžia palaikomas operacijas.
Kai sąranka nepavyksta iškart po prisijungimo, patikrinkite protokolo ribą prieš išplečiant prieigos taisykles. Visiškai pasiekiamas SOCKS klausytojas gali atmesti baitus, kurie niekada nebuvo SOCKS užklausa.