Wie mIRC einrichten, um hinter einem Router Dateien versenden zu können?



Vorweg

Dieses Tutorial ist gedacht für den "Normalfall": Man besitzt einen NAT-Router und einen oder mehrere Rechner hinter diesem in einem LAN, die über den Router ins Internet gehen. Wer mit irgendeiner T-Online-Software oder sonstigen Späßen zu schaffen hat, dem kann ich auch nicht mehr sagen als: Ab in den nächsten Laden gehen und einen Router kaufen. T-Online-Software ist Scheiße. :)

Desweiteren werde ich hier nicht explizit darauf eingehen, wie man eine tolle Personal Firewall DCC-fit bekommt. Warum? Diese Dinger sind Schrott - aus Prinzip. Eine schöne Demonstration dieser Tatsache gibt es z.B. hier. Falls das immernoch nicht überzeugend genug ist, kann man sich aus den Infos hier ja selbst zusammenreimen, wie man seine tolle PF einzurichten hat.

Ich rede hier auch nur von mIRC ohne zusätzliche "Scriptpakete" (OCRANA-IRC oder wie sie alle heißen ...). Hat dein Scriptpaket eigenständige Mechanismen, um zum selben Ziel zu kommen, oder verändert es den Ablauf eines DCC's gravierend, kann das zu unvorhergesehenen Auswirkungen führen.

Andere Clients lassen sich bestimmt auf ähnliche Art und Weise einstellen. Wenn nicht, sollte man über einen Wechsel dringend nachdenken.

Übrigens: Diese Anleitung gilt auch für "DCC Chats", die irgendwie ein bisschen aus der Mode gekommen sind. Jedenfalls laufen die dann auch.


Wie funktioniert DCC überhaupt?! (O_O)

Dieser Abschnitt ist für's Einrichten nicht zwingend notwendig. Für's Hintergrundverständnis aber bestimmt nicht verkehrt. ;)

Das Prinzip vom mIRC-DCC ist eigentlich denkbar einfach und ähnelt ein bisschen dem passiven Modus bei FTP. Der Versender haut ein Angebot an den Empfänger raus und bietet ihm somit die Datei an. Dann allerdings macht sich der Versender selbst zum Server und öffnet einen Port, auf dem sich sein Partner die Datei abholen kann, so er denn will. Er wird also nicht selbst aktiv und initiiert eine Verbindung, sondern macht nur ein Angebot und wartet dann darauf, dass sich jemand die Datei abholt. Das hat den Vorteil, dass jeder, der nicht hinter einer (entsprechend "falsch" konfigurierten) Firewall sitzt, auf diese Art und Weise Dateien empfangen kann! Die ausgehende Verbindung des Empfängers ist "technisch" gesehen nämlich keine andere als z.B. der Aufruf von www.google.de - und soetwas können NAT-Router ja problemlos erledigen.

Damit sei schonmal etwas festzuhalten, was oft falsch verstanden wird: Schlägt ein mIRC-DCC fehl und ist keine Firewall im Spiel, dann ist in 99% der Fälle der Versender schuld!


Etwas konkreter an einem Beispiel:

Angenommen der Versender S will dem Empfänger E eine Datei schicken. Das erste, was dann passiert, ist ein Request, den S ganz trivial per PRIVMSG (also per Query, wenn man so will) an E schickt. Der ist lediglich mit ein paar Sonderzeichen ausgestattet, sodass er in normalen Queries nicht auftaucht. Darin stehen dann folgende Informationen:
S hat also nun seinen Port offen und harrt der Dinge, die da kommen. E dagegen weiß nun: "Aha, da bietet mir einer eine Datei an und ich weiß auch, wie groß sie ist und wo ich sie kriege. Die hol' ich mir!"

E verbindet sich also zu S, sobald die Verbindung steht, bläst S die File rüber und fertig.

Noch einmal: Der Empfänger initiiert eine Verbindung zum Versender - daraus folgt, dass sich der Versender (in der Regel) richtig einzustellen hat, nicht der Empfänger!

Wer dagegen als Sender oder Empfänger hinter einer richtigen Firewall sitzt, dem unterstelle ich ganz dreist, dass er weiß, wie er diese einzustellen hat - weiß er es nicht oder hat er keinen Zugriff darauf (Firma, Schule, ...), dann ist es schon gewollt, dass DCC's nicht funktionieren.


Wieso kommt es hinter einem Router überhaupt zu Problemen?

Die ganze Problematik, die ein Versender hat, ist schlichtweg: "Welche IP und welchen Port muss ich denn dem Empfänger mitteilen, damit seine Verbindung zu mir auch zustande kommt?" Wir erinnern uns: Ein Rechner hinter einem Router weiß in der Regel nicht die IP des Routers im Internet - aber genau diese muss er dem Empfänger mitteilen.

Desweiteren muss S auf einem Port hören, auf den E auch Zugriff hat. Ein (sinnvoll eingestellter) Router verwirft ja zunächst einmal alle Anfragen von außen aus dem Internet auf Ports, mit denen er nichts anzufangen weiß.

Hat man mehrere Rechner im LAN und will jedem einzelnen erlauben, Dateien per DCC zu verschicken, müssen die folgenden Schritte natürlich auf jedem Rechner ausgeführt werden. Wichtig ist dabei, dass jede Kiste ihre eigene Portspanne erhält: Rechner A hat 30000-30100, Rechner B 30101-30200, und so weiter.

Der Empfänger muss wie gesagt gar nichts einstellen.

Sitzen beide Seiten hinter einem Router, könnte man den Vorgang wie folgt darstellen:





Wie komme ich (automatisiert) an meine IP im Internet?

Die einfachste Möglichkeit dürfte sein, ein Script auf einem Webserver aufzurufen, das einem die IP ansagt. Ein solches wäre zum Beispiel das hier. Achtung, wer mit einem Proxy surft, wird hier im Browser vermutlich nicht die richtige IP sehen. Das ist aber für uns egal, denn der Browser-Proxy wird völlig umgangen.

Als nächsten Schritt benötigt man ein mIRC-Script, das diese Seite aufruft, die IP ausliest und mIRC bekannt gibt. Wie genau jenes funktioniert, sei hier einmal egal. Eine Version, die alle gängigen Bedürfnisse befriedigen dürfte (automatisches Setzen beim mIRC-Start, Multiserver-fähig, direkt schon verdrahtet mit dem oben genannten php-Script), findet sich hier. Rechtsklick, "Save link as" und die Datei im mIRC-Ordner direkt speichern.

Dieses Script muss nun in mIRC geladen werden - ergo mIRC starten und in der Eingabezeile folgendes eingeben:
/load -rs getip.mrc
Ab dem nächsten mIRC-Start ist das Script aktiv und setzt die richtige IP. Falls es nötig sein sollte, im normalen Betrieb ohne Neustart von mIRC die IP zu setzen, genügt ein Aufruf von:
/getip


Es könnte passieren, dass dies nun mit mIRC-eigenen Verfahren kollidiert - denn mIRC unterstützt es von Haus aus, sich selbst vom IRC-Server die richtige IP zu holen. Wieso dann überhaupt ein extra Script? Ganz einfach, manche IRC-Server sind einfach blöd und bekommen's nicht auf die Reihe, einem die korrekte IP anzusagen. Die Methode mit externem Script ist unabhängig vom IRC-Server und somit wesentlich zuverlässiger.

Ab/in mIRC 6.17 sind es zwei Häkchen, die entfernt werden müssen. Erstmal durch's Menü hangeln: View -> Options -> Connect -> Local info. Dann auf der rechten Seite die beiden Haken unter "On connect, always get" entfernen:




Welche Ports? Teil 1: mIRC

Dieser Teil könnte etwas kniffliger werden, denn es gibt ein Problem, das ich hier nicht pauschal lösen kann: Wenn mIRC auf einem Port lokal (und somit erst einmal nur im LAN) hört und auf Verbindungen wartet, ist das gut und schön. Aber der Router muss das wissen - und eingehende Verbindungen von außen auf diesen Rechner und diesen Port weiterleiten. Wie man also Ports am eigenen Router weiterleitet, ist bitte dem Handbuch zu entnehmen. Ich werde es hier mit Screenshots anhand meines eigenen Routers demonstrieren, aber wie gesagt, das ist nicht allgemeingültig.

Zuerst der leichte Teil. Man sucht sich eine gewisse Spanne von Ports aus, die man mIRC zuteilen möchte (es kann ja sein, dass man einmal mehrere DCC's zur gleichen Zeit laufen haben will und natürlich gilt: pro DCC ein dedizierter Port!). Am besten geeignet sind hier besonders hohe Ports, die sonst nie gebraucht werden, also beispielsweise 30000 bis 30100 - dann hat man Platz für 101 gleichzeitige (ausgehende) DCC's.

Hat man sich für schöne Ports entschieden (bitte berücksichtigen, dass eventuell Tauschbörsen oder anderes böses Getier auch Ports benötigt, die weitergeleitet werden wollen), geht's also zurück in mIRC: View -> Options -> Connect -> Options -> Knopf "Advanced" auf der rechten Seite:



Wichtig ist hier, dass oben der Haken bei "DCC" drin und unten der Haken bei "Randomize Ports" draußen ist (und natürlich, dass die richtigen Ports gesetzt sind). Die Sockets muss man nicht an eine IP binden, bei Problemen könnte man das aber ausprobieren - dann im Feld unten die eigene LAN-IP eintragen (also nicht die des Routers!) und den Haken setzen.


Welche Ports? Teil 2: Am Router freigeben

Der Router muss nun wissen, welche Ports (die von außen aus dem Internet angesprochen werden) er auf welchen Rechner / welche IP lokal im Netzwerk weiterleiten muss. Dazu müssen wir erstmal unsere eigene IP kennen, sofern wir das nicht sowieso schon wissen. Also: Start -> Ausführen -> "cmd" -> Ok. Im daraufhin erscheinenden DOS-Fenster dann einmal schön
ipconfig /all
eingeben und man müsste in etwa eine solche Ausgabe erhalten:
C:\WINDOWS>ipconfig /all

Windows-IP-Konfiguration

        Hostname. . . . . . . . . . . . . : hurz
        Primäres DNS-Suffix . . . . . . . :
        Knotentyp . . . . . . . . . . . . : Unbekannt
        IP-Routing aktiviert. . . . . . . : Nein
        WINS-Proxy aktiviert. . . . . . . : Nein

Ethernetadapter LAN-Verbindung:

        Verbindungsspezifisches DNS-Suffix:
        Beschreibung. . . . . . . . . . . : NVIDIA nForce Networking Controller
        Physikalische Adresse . . . . . . : XX-XX-XX-XX-XX-XX
        DHCP aktiviert. . . . . . . . . . : Nein
        IP-Adresse. . . . . . . . . . . . : 192.168.0.33
        Subnetzmaske. . . . . . . . . . . : 255.255.255.0
        Standardgateway . . . . . . . . . : 192.168.0.2
        DNS-Server. . . . . . . . . . . . : XXX.XXX.XXX.XXX

C:\WINDOWS>
Unter Umständen können hier noch weitere Interfaces stehen. Meistens wird das richtige Interface von Windows einfach "LAN-Verbindung" genannt. Lässt sich nicht pauschal beantworten, welches man nun nehmen muss. In der Zeile "IP-Adresse" steht jedenfalls die Information, die wir wollen. In meinem Fall ist meine im LAN also die 192.168.0.33.

Gut, wir wissen jetzt die Ziel-IP ("Ziel" aus Sicht des Routers) und welche Ports freigegeben werden müssen. Als nächstes muss der Router über unser Vorhaben unterrichtet werden. Die meisten Router lassen sich über ein "Web"-Interface konfigurieren, also über den Browser. Dazu ruft man im Programm seiner Wahl (ausnahmsweise geht auch mal etwas im Internet Explorer ...) die IP des Routers auf, bspw. http://192.168.0.2. Nach einer Passwortabfrage müsste man sich also in dessen Config befinden, welche bei mir so aussieht:



Mittels "Advanced Features" -> "Open Ports" -> Auswahl eines Slots gelange ich dann in ein Fenster dieser Art:



Wie man sieht, habe ich da bereits die entsprechenden Einstellungen vorgenommen: An die IP 192.168.0.33 sollen die TCP-Ports (ja, TCP - nicht UDP, das ist etwas anderes und für uns hier völlig uninteressant) 30000 bis 30100 weitergeleitet werden. Nicht mehr und nicht weniger. Damit weiß der Router dann, dass Pakete/Anfragen aus dem Internet, die an ein Port aus dieser Spanne adressiert sind, an denselben Port auf der IP 192.168.0.33 geschickt werden müssen. Die Verbindung des DCC-Datei-Empfängers kommt also von nun an zum richtigen Zielrechner durch.

Fertig!

August 2007