[megoldva] Melyiket? Tinyproxy vagy Apache mod_proxy

Egy belső hálózaton kéne fogadnom kívülről http kéréseket olyan hostnevekre, amelyek a külvilágban nem léteznek. Arra gondoltam, hogy a legegyszerűbb, ha beállítok egy (nem transzparens) proxyt, amelyre a routerről egy port forwarddal lehet bejutni.
Http proxy gyanánt squidet használtam már – úgy 15 éve –, most viszont semmi cache, filter stb. nem kell, csak annyi, hogy a belső hálózatról menjen a névfeloldás. Ahogy néztem, a tinyproxy rényleg pici, de minden requesthez új processt indít, az apache mod_proxyjáról semmit nem tudok.
A proxynak egy Xen dom0-jában (jut neki kb. 300 MB RAM, és talán egy fél processzormag), illetve a Google cloudjában f1-micro instance-ekben kellene futnia.
Ki melyikre szavazna?

A megoldás az nginx lett :)

Hozzászólások

egyik se, nginx;)

// Happy debugging, suckers
#define true (rand() > 10)

"Egy belső hálózaton kéne fogadnom kívülről http kéréseket olyan hostnevekre, amelyek a külvilágban nem léteznek"
Elég katyvasz lett a nyitód, de azt hiszem sejem már mit szeretnél, egyébként nginx alatt így tudod megoldani:
location / {
resolver dns.ip.ci.me;
proxy_pass http://$http_host$uri$is_args$args;
}

// Happy debugging, suckers
#define true (rand() > 10)

"kívülről http kéréseket olyan hostnevekre, amelyek a külvilágban nem léteznek."

Ezt nem értem. Ha nem léteznek, hogyan kérdeznek? Milyen neveket/címeket kérdeznek a kliensek?

Igen, ez oké. Nálunk van ide-oda proxy, keresztül kasul. De akkor se értem. Ami nálunk van pl.:

- a kliens lekérdezi a http://app.domain.hu/blabla-t (ezt ugye fel tudja oldani)
- az app.domain.hu-n ülő nginx (vagy mikor mi, talán más már nincs) átpasszolja ezt valami belső névre, sőt IP címre

Ez tiszta sor, de ilyenkor a kliensnek nem kell tudnia (sőt, nem is javasolt, eheh) a belső címet, nevet, csak a külsőt. Szóval a "kívülről http kéréseket olyan hostnevekre, amelyek a külvilágban nem léteznek" állítás nem teljesül.

Hacsak nem az van, hogy a router külső lábának 80-as (vagy bármilyen) portját belöki a titkos.internal.domain-ra (ami utóbbi kívülről nem oldható fel), ám ekkor még proxy is felesleges, egyszerű nat és csá. Már ha nem bonyibb a helyzet, vagy egészen más, de valahogy nem áll össze a kép. Ráadásul később forward proxy-t említ, és ha nem tévedek, neki inkább reverse proxy kéne.

szerintem ő úgy képzeli, hogy tesz egy proxyt a publikusra, azt megadja a kint levő browsernek, hogy ő a proxy (és mittomén foxyproxyval vagy ilyesmivel lekorlátozza a belső nevekere), és akkor a kilens tudja a belső nevet, a proxy meg majd megoldja neki.

Működőképes, de Én is inkább valami reverse proxyra lőnék egyébként, de lehet van, ahol az problémás...

Szokatlan, de nem tudok jobbat.
Van egy kész, zárt rendszer, a gépek a tűzfalon futó DNS-t használják névfeloldásra. Ebből most egy gépet ki kell vennem, és ráhagynom az ügyfélre, hogy azt használ amit akar, csak a kliensszoftvert adjuk mi, viszont ha lehet, nem kényszeríteném a fejlesztőt, hogy írja át az egész kódot. Ha proxyzok, akkor elég annyi, hogy ha a hostnév .local-ra végződik, akkor egy

request.WebProxy=new WebProxy(proxyurl)

sor a kódban megoldja (C#). Minden egyéb ötlet a szerveroldal lényeges módosítását igényelné.
(A Google Cloud úgy jön ide, hogy a fizikai vason Xen-ben futó cucc gyakorlatilag a cloudban futó környezet másolata, tesztelni viszont könnyebb a cloudban, mint kimenni a helyszínre.)

De, elvileg elég lenne. Sőt, még jobb lenne, ha felvehetném a neveket az ügyfél routerébe. De a megrendelő ragaszkodik ahhoz, hogy ami nem a miénk, azt ne kellejen izélgetni.
Így az egyetlen dolog, amit biztosan tudok: a saját routerem DHCP-n kap egy címet, és ahhoz az ügyfél DNS-e bejegyzi a hostnevet. (Még az sem biztos, hogy tudok a routerem WAN oldalára fix IP-t biztosítani.)

Tele vagyok ilyen hívással:

var request=CreateHttpRequest(SignUrl(url, method), method);

Ha forward proxyt használok, akkor a CreateHttpRequest()-be elég ennyi:


if(request.Host.EndsWith(".local"))
  request.Proxy=proxy;

Ha reverse proxyt használnék, akkor az összes hívást kézzel kellene átírni, hogy ne a reverse proxy miatti elérési utat használja az aláíráshoz...

a tinyproxy rényleg pici, de minden requesthez új processt indít,

ez biztos? Mar van vagy 10 eve, hogy hasznaltam, de akkor inkabb preforkolt...

--
"what is mostly works", "mods that I describe is choosed" (hrgy84 "nem vagyok anyanyelvi angolos")