Portmapping NAT par plages sous Windows (RRAS ou ICS)

La petite astuce qui suit est un prélude au tuto RRAS que je vous prépare.
Tout ceux qui utilisent un (vieux) PC pour router leur connexion, on je pense déja eu besoin de mapper des ports sur le réseau local et on trouvé comment le faire pour un port.
Or, pour monter un serveur FTP en passif, vous savez bien qu’il n’est plus nécéssaire de mapper un port, mais toute une plage, ce qui, vous le pensez bien, peut s’avérer fastidieux avec la méthode classique. (Mapper tout les ports un par un, ca use).
Je dis ici mapper, mais c’est aussi valable pour l’ouverture des ports du firewall, qui marche sur le même principe.

La solution Existe : netsh !
Netsh est un utilitaire en ligne de commande de configuration réseau sous windows.
Il est donc relativement aisé de fabriquer des scripts afin de mapper des plages entières de ports.

Syntaxe pour l’ajout d’un mapping :

netsh routing ip nat add portmapping nom_de_l’interface protocole 0.0.0.0 port_public ip_privée port_privé

protocole : udp ou tcp
nom_de_l’interface : nom donné dans les connexions réseaux a l’interface publique

Exemple :
la commande : “netsh routing ip nat add portmapping ADSL tcp 0.0.0.0 21 192.168.0.1 21”
Mappes le port public 21 vers le port 21 de la machine ayant l’addresse IP 192.168.0.1 du réseau local.

Syntaxe pour la supression d’un mapping :

netsh routing ip nat del portmapping “nom_de_l’interface” protocole 0.0.0.0 port_public

Maintenant, comment scripter tout ca pour mapper une plage complète ??
Il existe dans le shell windows NT une commande bien pratique : la commande FOR (he he, je vois d’ici les regards des codeurs qui s’éclairent).
Syntaxe qui nous interesse :

FOR /L %var in (val_initiale,incrément,valeur_finale) do commande.

Et tout est dit. Mais comme je suis simpa, un exemple, pour mapper par exemple les ports publics 20000 à 20020 sur l’IP locale 192.168.0.2 :

for /L %i in (20000,1,20020) do netsh routing ip nat add portmapping ADSL tcp 0.0.0.0 %i 192.168.0.2 %i

C’est bien gentil tout ca, mais ca reste une sacrée ligne de comande a tapper, donc pourquoi ne pas faire un script.

Ouvrez notepad, et collez la ligne ci-dessous (en remplacant adsl par le nom de votre interface publique) :
for /l %%i in (%3,1,%4) do netsh routing ip nat add portmapping adsl %1 0.0.0.0 %%i %2 %%i

Enregistrez sous ‘addplage.cmd’

Maintenant, pour effectuer le même mapping qu’au dessus il suffit de taper :
addplage tcp 192.168.0.2 20000 20020

Voila voila, je vous sait assez malin pour faire de même avec la supression de plage.

Et apres, on me dit que windows, c’est user friendly…

MOUHAHAHAHAHAHAHA

Linux en firewall, netfilter en stateful rulez da world.
[edit: et le module FTP special. J’avais oublie. C’est pareil pour IRC, y a un module specifique, c’est des protocoles un peu batards :)]

LoneWolf
Pourquoi faire simple quand on peut faire complique avec windows?

[Edité le 19/2/2003 par LoneWolf]

Très bien Tzim, n’hésite pas à poster d’autres trucs sur le réseau, ça intéresse toujours du monde.

J’aimerai bien savoir comment fonctionne le Proxy/NAT qui se cache (sous XP) derrière le titre « Partage de connexion », car je n’ai jamais réussi à le faire fonctionner parfaitement. De plus, il serait intéressant d’avoir des outils espions, de façon à « sniffer » la couche réseau. C’est très chiant de tout faire en aveugle.

Big up Tzim :slight_smile:

Si si, c’est tres interessant. :slight_smile: Et tres bien explique en plus. :smiley:

Pour l’instant, je n’ai jamais eu a faire du portmapping sur plus d’un port a la fois (22, 25, 80…) donc mon AnalogX PortMapper (freeware que je conseille d’ailleurs :slight_smile: ) suffit.
Cela dit, si j’en a parmi vous qui ont deja tente de faire un serveur de jeu derniere une passerelle, je ne vois que la methode de Tzim car y a bien trop de ports a mapper (merci MS :wink: )…

moi c’est routeur hardware seulement, mais merci quand meme, c’est bien expliqué et ca peut servir :wink:

C’est bon a savoir… merci

Si si, c’est dans mes favoris, j’avais étudié le NAT l’année passée, ça m’a rafraichi les idées. Thx Tzim :stuck_out_tongue:

Pas de feedback ? Ca interresse personne ? Ou personne n’a compris ce que je racontes ?