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 :)
- 1919 megtekintés
Hozzászólások
egyik se, nginx;)
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
Nginx – tudtommal – nem tud forward proxyt.
- A hozzászóláshoz be kell jelentkezni
Ha jol ertem mire kellene, akkor haproxy :)
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
"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)
- A hozzászóláshoz be kell jelentkezni
Ez tényleg működni tűnik.
Így viszont marad ez, mert nginx úgyis van több VM-ben is, ráverem a melót az egyikre.
- A hozzászóláshoz be kell jelentkezni
"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?
- A hozzászóláshoz be kell jelentkezni
Én sem értem. A leírásban még google cloud is szerepel, miszerint ott fog futni. Hmm?
- A hozzászóláshoz be kell jelentkezni
a nem transzparens proxy, ami ott ül a szélén már nyilván feloldja őket...
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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...
- A hozzászóláshoz be kell jelentkezni
Hacsak úgy nem. Bár elég szokatlan megoldás :D
- A hozzászóláshoz be kell jelentkezni
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.)
- A hozzászóláshoz be kell jelentkezni
Ööö... lehet hogy nem értek valamit, de nem lenne elég a hosts fájlban felvenni a kérdéses .local címeket és jónapot? Persze ez több dolog miatt is lehet problémás, csak egy ötlet.
- A hozzászóláshoz be kell jelentkezni
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.)
- A hozzászóláshoz be kell jelentkezni
Hát igen, amit az ügyfél akar, azt megkapja :D Még ha balgaságnak tűnik is.
- A hozzászóláshoz be kell jelentkezni
ha egyébként fix belépési pontok vannak, akkor azért lehet, hogy egy reverse proxy jobb lenne. gondolom valami dns bejegyzésed van, lehet mögé tenni pathokat ilyen http://enhostnevem/hulyeugyfel/tokom1, tokom2 stb, aztán azt hivogatni.
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
Ha a reverse proxyban beállítod a Host header-t az segíthet ezen a problémán.
Apache HTTPD esetében a mod_headers RequestHeader direktívával tudod megoldani
Nginx-nél a proxy_set_header a barátod
- A hozzászóláshoz be kell jelentkezni
ja, hogy kódba belegyógyítottátok a pathokat...
- A hozzászóláshoz be kell jelentkezni
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")
- A hozzászóláshoz be kell jelentkezni
Esetleg VPN?
- A hozzászóláshoz be kell jelentkezni