Salta el contingut

Reserva de Ports

Informació extreta de Windows 10 forbidden port bind.

Contextualització

Al Mòdul MP08 utilitzarem serveis web que haurem de servir per alguns ports, de vegades els registrats i d'altres vegades, altres ports que necessitem. Sovint creiem que Windows ens deixa utilitzar qualsevol port que no tinguem utilitzat, però en algunes ocasions i segons el que tinguem instal·lat, windows es reserva uns ports, de forma aleatòria, i ningú ens asssegura que el port que podem obrir avui el podrem obrir també demà.

Sol solventar-se reiniciant l'ordinador, ja que aquest reserva aleatòriament altres ports, però la millor opció és tenir ja reservats els ports amb els que sovint treballem.

Si executem la següent comanda, en Windows, netsh interface ipv4 show excludedportrange protocol=tcp podrem veure els ports que no podrem utilitzar en la sessió.

C:\MVD>netsh interface ipv4 show excludedportrange protocol=tcp

Protocolo tcp Intervalos de exclusión de puertos

Puerto de inicio    Puerto final
----------          --------
      1898        1997
      1998        2097
      2180        2279
     50000       50059     *

* - Exclusiones de puertos administrados.

Aquests rangs de ports que ara són del 1898 al 1997, del 1998 al 2097 i del 2180 al 2279 aniran variant cada vegada que reiniem l'ordinador. En algun cas, poden incloure algun port que necessitem utilitzar i llavors ens sortirà un error semblant a

Error: Unable to start container: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:8000: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

Solució

Per evitar-ho el que farem serà reservar els rangs de ports que utilitzarem per tal que Windows mai els inclogui en aquesta llista. El que farem serà afegir-los de la mateixa manera que estan els ports de la darrera línia de l'execució de la darrera comanda hl_lines="1-2"

     50000       50059     *
* - Exclusiones de puertos administrados.

Per això utilitzarem la comanda netsh interface ipv4 add excludedportrange ...

C:\MVD>netsh interface ipv4 add excludedportrange ?

Uso: add excludedportrange [protocol=]tcp|udp
             [startport=]<entero> [numberofports=]<entero>
             [[store=]active|persistent]

Parámetros:

      Etiqueta           Valor
      protocol       - Uno de los valores siguientes:
                       tcp: agrega una exclusión para TCP.
                       udp: agrega una exclusión para UDP.
      startport      - El número de puerto inicial para una exclusión.
      numberofports  - El número de puertos comenzando desde startport
                       para una exclusión.
      store          - Uno de los valores siguientes:
                       active:     configuración solo dura hasta
                                   siguiente arranque.
                       persistent: el cambio es permanente.
                                   Este es el valor predeterminado.

Notas: agrega una exclusión para un bloque consecutivo de puertos.

Ejemplo:

      add excludedportrange protocol=tcp startport=50000 numberofports=20

excloent tots aquells ports i/o rang de ports a utilitzar.

Com a administrador

Per executar la comanda netsh interface ipv4 add excludedportrange ... caldrà haver iniciat la sessió del cmd com Administrador.

En el nostre cas reservarem els ports 8000, 8080, 8888, i del 40000 al 4010. Podem fer-ho amb les següents comandes:

netsh interface ipv4 add excludedportrange protocol=tcp startport=8000 numberofports=1 store=persistent
netsh interface ipv4 add excludedportrange protocol=tcp startport=8080 numberofports=1 store=persistent
netsh interface ipv4 add excludedportrange protocol=tcp startport=8888 numberofports=1 store=persistent
netsh interface ipv4 add excludedportrange protocol=tcp startport=40000 numberofports=11 store=persistent

Al posar la opció persistent aquesta reserva quedarà per sempre en el nostre PC i per tant no tindrem problemes per a utilitzar aquests ports.

i els ports per defecte dels serveis?

Els ports per defecte dels serveis http (80), https (443), ssh (22), ftp (20, 21), etc estan dins el rang dels primers 1024 i no crec que Windows s'atreveixi a utilitzar-los. Podem afegir els ports del mysql (3306), postgreSQL (5432), etc.

Amb les següents comandes reservarem els ports reservats (20-22, 80 i 443)i els de BD (3306 i 5432).

netsh interface ipv4 add excludedportrange protocol=tcp startport=20 numberofports=3 store=persistent
netsh interface ipv4 add excludedportrange protocol=tcp startport=80 numberofports=1 store=persistent
netsh interface ipv4 add excludedportrange protocol=tcp startport=443 numberofports=1 store=persistent
netsh interface ipv4 add excludedportrange protocol=tcp startport=3306 numberofports=1 store=persistent
netsh interface ipv4 add excludedportrange protocol=tcp startport=5432 numberofports=1 store=persistent

I ens assegurem que tenim reservats els ports que voldrem utilitzar algun dia

C:\MVD>netsh interface ipv4 show excludedportrange protocol=tcp

Protocolo tcp Intervalos de exclusión de puertos

Puerto de inicio    Puerto final
----------          --------
        20          22     *
        80          80     *
       443         443     *
      1898        1997
      1998        2097
      2180        2279
      2764        2863
      2864        2963
      2964        3063
      3306        3306     *
      5432        5432     *
      8000        8000     *
      8080        8080     *
      8888        8888     *
     40000       40010     *
     50000       50059     *

* - Exclusiones de puertos administrados.

i si vull eliminar alguna exclusió?

De la mateixa manera que es poden afegir rangs d'exclusió de ports, aquests també poden eliminar-se amb la comanda netsh interface ipv4 delete excludedportrange .... En aquest cas cal eliminar el mateix rang que hem afegit, i si cal, després podràs afegir ports d'un en un o en altres intervals.

C:\MVD>netsh interface ipv4 delete excludedportrange ?

Uso: delete excludedportrange [protocol=]tcp|udp
             [startport=]<entero> [numberofports=]<entero>
             [[store=]active|persistent]

Parámetros:

      Etiqueta           Valor
      protocol       - Uno de los valores siguientes:
                       tcp: elimina una exclusión para TCP.
                       udp: elimina una exclusión para UDP.
      startport      - El número de puerto de inicio de una exclusión
                       creada anteriormente.
      numberofports  - El número de puertos comenzando desde startport
                       de una exclusión creada anteriormente.
      store          - Uno de los valores siguientes:
                       active:     la eliminación solo dura hasta
                                   siguiente arranque.
                       persistent: la eliminación es permanente.
                                   Este es el valor predeterminado.

Notas: elimina una exclusión de bloques consecutivos de puertos.
         Los valores de startport y numberofports deben ser
         exactamente los mismos que en la exclusión creada previamente.

Ejemplo:

      delete excludedportrange protocol=tcp startport=50000 numberofports=20

Per exemple, en aquest cas ho escriurem de forma més abreujada...

netsh int ipv4 del ex tcp 40000 11