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:
- Dateiname
- IP von S
- Port, auf welchem S hört
- Dateigröße
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