Einrichtung eines Proxy-Servers
S.Goertz
- webserver
Hallo,
wir haben uns jetzt entschlossen, einen Proxy-Server einzurichten. Wir nutzen die AOL-DSL-Flatrate, welche die nutzung eines Routers ausschließt. Wir haben noch einen "alten" PC ungenutzt rumstehen, den wir mit entsprechender Netzwerkkarte ausrüsten würden (16MB-Ram 133Mhz). Da fängts schon an: Was für eine Karte braucht man da? Da wir mit 2PCs ins Internet wollen, müssten es ja schon 1 ein- und min.2 ausgänge sein. oder muss man das ganz anders machen?
Wie ein Proxy funktioniert ist mir im groben schon klar (hoffe ich): Er wählt sich beim Provider (AOL) ein und ist der Nutzer. Dann hat der Proxy eine interne IP und die Clienten, die dann auf ihn zugreifen. Die Anfragen ins Internet werden dann vom Proxy gesendet und anschließend zum internenen clienten geleitet. Von "außen" merkt man also nicht, dass da mehr als einer dran ist.
Meine Frage(n) also:
Über jede Art von Antwort bin ich dankbar. Hilftreiche Links nehme ich auch gerne entgegen.
Gruß,
S.Goertz
Hallo,
also, meiner Meinung nach braucht ihr folgendes:
Hope this helps!
Rouven
Moin!
wir haben uns jetzt entschlossen, einen Proxy-Server einzurichten. Wir nutzen die AOL-DSL-Flatrate, welche die nutzung eines Routers ausschließt.
Schließen die Nutzungsbedingungen wirklich explizit nur einen "Router" aus? Oder nicht vielleicht doch die parallele Mehrfachnutzung? Denn das, was du als "Proxy" bezeichnest, fällt technisch gesehen dennoch unter den weitgefaßten Begriff "Router", wobei auch den AOL-Leuten klar sein dürfte, dass ein echter Router gar nicht an einer AOL-DSL-Leitung zu betreiben wäre, sondern (weil AOL eben nur eine IP-Adresse zuweist) immer irgendeine Art von Network Adress Translation notwendig ist.
Ob du nun einen Proxy benutzt, ist letztendlich zweitrangig. Du wirst auf NAT nicht verzichten können, wenn du z.B. Mails abrufen willst - es sei denn, du setzt auch noch einen SOCKS-Proxy ein, und ein damit zurechtkommendes Mailprogramm. Und dann wäre da noch FTP, was auch mit einem HTTP-Proxy nichts anfangen kann.
Leider kann man sehr wohl feststellen, ob der Nutzer der DSL-Leitung wirklich nur einen Rechner angeschlossen hat, oder ob er hinter einem NAT-Router sitzt. Es gibt immer irgendwelche technischen Hinweise. Insbesondere können NAT-Router die TCP-Sequenz-Nummern nicht umändern. Wenn man also hinter dem Router Betriebssysteme einsetzt, die keine absolut zufälligen Startwerte wählen (was derzeit wohl nur *BSD macht), kann man anhand der Nummern Rückschlüsse auf den mitsurfenden Rechnerpark ziehen. Ein Proxy mag die Problematik aber durchaus abmildern, weil der echt eigene Verbindungen ins Netz aufbaut.
Nur hilft das nichts, wenn die Nutzungsbedingungen explizit nur einen Rechner pro Zeit und Leitung erlauben.
- Sven Rautenberg
Hi!
Ein Proxy mag die Problematik aber durchaus abmildern, weil der echt eigene Verbindungen ins Netz aufbaut.
Mal wieder ein kleines OT ;-)
Hatte mich immer schonmal interessiert, ich weiß eigentlich auch was ein Proxy macht(bzw. dachte ich es immer zu wissen), nur irgendwie bekomme ich nicht wirklich heraus wie das praktisch funktioniert. Was macht ein HTTP-Proxy denn genau? Er arbeitet doch wie ein HTTP-Server, lauscht also an irgendeinem Port, aber was macht er wenn er einen Request bekommt? Ich hätte jetzt mal einfach gedacht, man gibt halt die IP-Adresse + Port des Proxis in den Einstellungen der Clientsoftware an(z.B. Browser), dann öffnet man ganz normal irgendeine Internetseite, nur anstatt den Hostnamen aufzulösen... wird der Request vom Client komplett so wie er ist(?) an den Proxy geschickt, dieser holt sich dann den Hostnamen aus dem HTTP-Header, guckt in seinen Cache oder holt sich sonst den Inhalt ganz einfach als wäre er der Client und schickt die Ausgabe mit eigenen Headern dann an den eigentlichen Client zurück. Aber ganz so einfach scheint es nicht zu funktionieren. Ich habe es einfach mal mit einem Echo-Server probiert, den ich mir mal in PHP geschrieben hatte. Das funktioniert prima, damit kann ich z.B. den HTTP-Request des Browsers schön auslesen, aber nur wenn ich direkt einen Request an diesen Server schicke. Dann dachte ich ich weise diese Echo-Server-Adresse mal einfach als Proxy zu, aber das scheint nicht zu funktionieren, es passiert einfach nichts. Ich habe mir mal den TCP-Traffic angesehen, da gehen dann zwar ein paar SYN-ACK Pakete zwischen "Proxy-Server" und Client hin und her, aber nichts mit HTTP, ich würde doch zumindest erwarten dass der Client seinen HTTP-Request sendet, das macht er aber nicht - und da weiß ich jetzt nicht wieso. Dass da keine Mißverständnisse aufkommen, es ist bisher ein reiner TCP-Echo-Server der nur das ausgibt was er empfängt, aber ich dachte das würde vielleicht reichen um den ersten Schritt eines Proxies zu simulieren(so wie es für einen Websever auch klappt, halt das empfangen eines HTTP-Request), aber es klappt überhaupt nichts. Und ich weiß auch das PHP nicht die Programmiersprache der Stunde ist wenn es darum geht solche Software zu programmieren, aber mir geht es ja auch nur um das Verstehen, weniger um irgendwas produktives ;-)
Wo liegt denn jetzt mein Verständnisproblem bzgl. der Funktionsweise eines Proxies?
Grüße
Andreas
Moin!
[echo-server...]
Wo liegt denn jetzt mein Verständnisproblem bzgl. der Funktionsweise eines Proxies?
Die Frage ist: WIE hast du den Echo-Server programmiert.
Ganz banal würde ich davon ausgehen, dass du einfach ein PHP-Skript geschrieben hast, es "echo.php" benannt und dort sozusagen "print_r($_SERVER)" reingeschrieben hast.
Sowas kann als Proxy-Check nicht funktionieren!
Der HTTP-Request unterscheidet sich nämlich ein kleinwenig. Statt "GET /ressource.ext HTTP/1.0" sendet der Browser jetzt "GET http://www.example.com/ressource.ext HTTP/1.0". Dadurch weiß der Proxy, welchen Server er nach der Ressource befragen muß.
Das Problem des Echo-Servers ist nur, dass da noch ein Apache dazwischenfunkt. Der kann natürlich einen Request nach "GET /echo.php HTTP/1.0" ausführen und verstehen, aber nicht einen nach "GET http://www.heise.de HTTP/1.0" - da startet das echo-Skript erst gar nicht.
Du mußt dir einen echten echo-Daemon schreiben, der auf einem Port lauscht und alles, was reinkommt, als nettes HTML verpackt wieder zurückschickt. Der sollte dann auch in der Lage sein, normale HTTP-Connections zurückzusenden.
- Sven Rautenberg
Hallo Sven,
Der HTTP-Request unterscheidet sich nämlich ein kleinwenig. Statt "GET /ressource.ext HTTP/1.0" sendet der Browser jetzt "GET http://www.example.com/ressource.ext HTTP/1.0". Dadurch weiß der Proxy, welchen Server er nach der Ressource befragen muß.
nur als Nachtrag:
http://www.schroepl.net/cgi-bin/http_trace.pl
ist natürlich kein richtiger HTTP-Proxy - aber er demonstriert die entsprechende Request-Umsetzung recht anschaulich.
Viele Grüße
Michael
Hallo Michael,
nur als Nachtrag:
http://www.schroepl.net/cgi-bin/http_trace.pl
ist natürlich kein richtiger HTTP-Proxy - aber er
demonstriert die entsprechende Request-Umsetzung recht
anschaulich.
Oder eben
http://forum.de.selfhtml.org/cgi-bin/http_trace.pl bzw.
http://forum.de.selfhtml.org/http_trace.txt
:)
Gruesse,
CK
Hi!
Oder eben
http://forum.de.selfhtml.org/cgi-bin/http_trace.pl bzw.
http://forum.de.selfhtml.org/http_trace.txt
Danke!
Grüße
Andreas
Hi!
Die Frage ist: WIE hast du den Echo-Server programmiert.
Ganz banal würde ich davon ausgehen, dass du einfach ein PHP-Skript geschrieben hast, es "echo.php" benannt und dort sozusagen "print_r($_SERVER)" reingeschrieben hast.
Nicht ganz, ich habe auf folgendem Beispiel aufgebaut: http://www.php3.de/manual/de/ref.sockets.php#sockets.examples, und erstmal nur ein paar Kleinigkeiten eingebaut(Ermittlung eigener öffentlichen IP beim Start...)
Der HTTP-Request unterscheidet sich nämlich ein kleinwenig. Statt "GET /ressource.ext HTTP/1.0" sendet der Browser jetzt "GET http://www.example.com/ressource.ext HTTP/1.0". Dadurch weiß der Proxy, welchen Server er nach der Ressource befragen muß.
Ah ja, das habe ich inzwischen auch gemerkt. Wäre auch komisch wenn es anders wäre, aber der Server funktioniert anscheinend nur wenn ich mich direkt per putty mit RAW einlogge. Sobald ich einen HTTP-Request dahin schicke wird dieser zwar ausgegeben, aber ab da ist der Server tot, liegt wohl daran dass der Server kein HTTP "spricht" und der Browser etwas verwirrt ist... ;-)
Das Problem des Echo-Servers ist nur, dass da noch ein Apache dazwischenfunkt.
nene, der läuft alleine und lauscht auf Port 10.000, das funktioniert wie gesagt für reine Echos, auch für einmalige HTTP-Requests, sehr schön, aber dann ist halt Ende. Ich muss halt anstatt "Rohdaten" auszugeben im Prinzip das ausgeben was der Server(an den ich den ehemligen Request schicke) zurückgibt. Nur was genau ändern proxies an den jeweiligen Requests? OK, aus "GET http://www.example.com/ressource.ext HTTP/1.0" muss ich GET /ressource.ext HTTP/1.0" machen, und was ist mit dem HOST-HEader? Ist das doch Sache des Clients, oder? Den Domainnamen verwende ich nur um mir über DNS die IP zu besorgen, wobei, das kann PHP ja auch automatisch bei fsockopen machen. Und wo schreiben die proxies noch so rein? Und was ist mit dem Response? Wenn ich mich recht entsinne merkt der Server nichts davon das ein Proxy dazwischen hängt, also müßte ich doch im Prinzip den empfangenen Response direkt weiterleiten. Hm, nur die Frage an wen ;-) Am einfachsten wäre es wohl ich mache alles in einem Prozess, von der Entgegennahme des Requests vom Client, über die Umschreibung und Weiterleitung des Request, das einlesen des Response und das Ausgeben dessen 1:1, so müsste es eigentlich funktionieren, schwieriger wird es nur wenn der Server verschiedene Clients unterstützen soll, mit HTTP/1.1, keep-alive und pipelining würde das wohl etwas stressig, aber ich fände es schon gut sowas auf Basis von HTTP/1.0 aufzubauen, dann müsste ich eben die komplizierten Teile bei den Requests ersetzen, die Server werden dann ja wissen was zu tun ist ;-)
Du mußt dir einen echten echo-Daemon schreiben, der auf einem Port lauscht und alles, was reinkommt, als nettes HTML verpackt wieder zurückschickt. Der sollte dann auch in der Lage sein, normale HTTP-Connections zurückzusenden.
Stimmt das mache ich mal als erstes, halt schön mit HTTP-Headern, also einen kleinen spartanischen möchtegern-webserver ;-)
Danke Dir!
Viele Grüße
Andreas
Hallo,
AOL gestattet absolut keine mehrfache Nutzung der Leitung. Deshalb ist die Nutzung eines Proxys auch nicht erwünscht. Meine Formulierung bezog sich vielmehr auf die tatsache, dass es keine funktionierenden Router für AOL gibt, weil die irgendein "unnormales" Protokoll nutzen. Es behaupten zwar immerwieder Hersteller, sie haben es gaschafft, aber die Nutzung eines Routers und AOL führt garantiert zu schwierigkeiten. Deshalb haben wir uns für eine weitere Möglichkeit entschieden.
Da wir sowohl, http, als auch email, als auch ftp nutzen, ist ein http-proxy wohl auszuschließen!? was gibt es für alternativen?
Wie sieht das mit der hardware aus? was für vorraussetzungen braucht die netzwerkkarte? gibt es da karten, die gleich mehrere ausgänge haben, oder muss man da noch nen switch (oder sowas) zwischen schalten?
Gruß,
S.Goertz
Moin!
AOL gestattet absolut keine mehrfache Nutzung der Leitung. Deshalb ist die Nutzung eines Proxys auch nicht erwünscht. Meine Formulierung bezog sich vielmehr auf die tatsache, dass es keine funktionierenden Router für AOL gibt, weil die irgendein "unnormales" Protokoll nutzen. Es behaupten zwar immerwieder Hersteller, sie haben es gaschafft, aber die Nutzung eines Routers und AOL führt garantiert zu schwierigkeiten. Deshalb haben wir uns für eine weitere Möglichkeit entschieden.
AOL ist bekannt dafür, proprietäre Protokolle zu benutzen. Das ist vielleicht toll für AOL, weil sie dadurch ihren Werbepartnern garantieren können, dass die Benutzer die Popups sehen - weil man die AOL-Software benutzen muß. Das bedeutet aber auch, dass AOL grundsätzlich alles in diese Software reinprogrammieren kann, was auf dem fraglichen Rechner nachsieht, welche anderen Programme da noch so laufen, oder welche anderen Rechner übers Netzwerk angeschlossen sind.
Da wir sowohl, http, als auch email, als auch ftp nutzen, ist ein http-proxy wohl auszuschließen!? was gibt es für alternativen?
Proxys für alle drei Protokolle einrichten. Einer allein reicht jedenfalls nicht.
Wie sieht das mit der hardware aus? was für vorraussetzungen braucht die netzwerkkarte? gibt es da karten, die gleich mehrere ausgänge haben, oder muss man da noch nen switch (oder sowas) zwischen schalten?
Du brauchst eine Netzwerkkarte für das DSL und eine für dein privates Netz. Bei mehr als zwei privaten Rechnern (also DSL plus noch einer) brauchst du, wenn du Twisted Pair verkabelst, einen Hub oder Switch. Du kannst natürlich auch 10MBit-Koaxial verkabeln - aber das macht heute niemand mehr, diese Verkabelung ist langsam und scheiße.
Was du aber eigentlich viel dringender brauchst, ist ein vernünftiger DSL-Provider. Einer, der nicht das AOL-Protokoll benutzt, bei dem man mit PPPoE ins Internet kommt - weil das die Möglichkeiten eröffnet, bekannte Standardsoftware für die einzelnen Problemstellungen einzusetzen.
- Sven Rautenberg
Hallo
Bedenke die genannten rechtlichen Aspekte.
Ansonsten gibt es einen guten "All-In-One"-Softwareproxy (HTTP, HTTPS, POP3, SMTP, FTP, ...), den JanaServer. Ist Freeware. http://janaserver.de
Du kannst anstelle von 2 Netzwerkkarten in einem PC auch ein HUB oderein Switch verweden. Daran werden dann alle PCs sowie das DSL-Modem angeschlossen.
Mehrere Netzwerkkarten in einem PC funktionieren auch unter Win9x, allerdings brauchst du da ein paar Handgriffe. Lies dazu auch http://windowsnetzwerke.de
Grüße
David