GNU/Linux >> Tutoriels Linux >  >> Linux

TCP peut-il fournir plus de 65535 ports ?

En regardant le RFC pour TCP :RFC 793 - Transmission Control Protocol, la réponse semblerait être non en raison du fait qu'un en-tête TCP est limité à 16 bits pour le champ du port source/destination.

IPv6 améliore-t-il les choses ?

Non. Même si IPv6 nous donnera un espace d'adressage IP beaucoup plus grand, 32 bits contre 128 bits, il n'essaie pas d'améliorer la limitation des paquets TCP de 16 bits pour les numéros de port. Fait intéressant, la RFC pour IPv6 :Internet Protocol, Version 6 (IPv6) Specification, le champ IP devait être élargi.

Lorsque TCP s'exécute sur IPv6, la méthode utilisée pour calculer la somme de contrôle est modifiée, conformément à la RFC 2460 :

Tout protocole de transport ou autre protocole de couche supérieure qui inclut les adresses de l'en-tête IP dans son calcul de somme de contrôle doit être modifié pour une utilisation sur IPv6, afin d'inclure les adresses IPv6 128 bits au lieu des adresses IPv4 32 bits.

Alors, comment pouvez-vous obtenir plus de ports ?

Une approche consisterait à empiler des adresses IP supplémentaires en utilisant davantage d'interfaces. Si votre système dispose de plusieurs cartes réseau, cela est plus facile, mais même avec une seule carte réseau, vous pouvez utiliser des interfaces virtuelles (alias. alias) pour allouer plus d'adresses IP si nécessaire.

REMARQUE : L'utilisation d'alias a été remplacée par iproute2 que vous pouvez utiliser pour empiler les adresses IP sur une seule interface (c'est-à-dire eth0 ) à la place.

Exemple

$ sudo ip link set eth0 up
$ sudo ip addr add 192.0.2.1/24 dev eth0
$ sudo ip addr add 192.0.2.2/24 dev eth0
$ ip addr show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc
      pfifo_fast state DOWN qlen 1000
    link/ether 00:d0:b7:2d:ce:cf brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.1/24 brd 192.0.2.255 scope global eth1
    inet 192.0.2.2/24 scope global secondary eth1

Source :iproute2 :La vie après ifconfig

Références

  • OpenWrt Wiki » Documentation » Réseaux » Interfaces réseau Linux
  • Quelques commandes utiles avec iproute2
  • Guide pratique du routage avancé et du contrôle du trafic sous Linux
  • Plusieurs routes par défaut/IP de passerelle publique sous Linux
  • Aide-mémoire iproute2 - Site de Daniil Baturin

Est-il possible de configurer un système Linux pour qu'il fournisse plus de 65 535 ports ?

Non.

L'intention serait d'avoir plus de 65 000 démons à l'écoute sur un système donné.

Ensuite, vous avez besoin :

  • un iptables configuration qui redirige sur le contenu du trafic ou

  • un "service courtier de services" ou "service multiplexeur" qui acceptera les connexions entrantes sur un seul port et les acheminera vers le démon approprié "derrière lui". Si vous souhaitez que les protocoles standard passent sans modification, vous devrez peut-être implémenter le reniflage/la reconnaissance de protocole dans ce service de multiplexeur, d'une manière qu'un IDS ou un pare-feu de couche 7 analyserait ; tout à fait possible avec la grande majorité des protocoles.

Selon le deuxième élément, vous pouvez concevoir ce service pour gérer plus de 2 ^ 16 "ports" si vous le souhaitez vraiment. Je suis sûr que l'impact sur les performances sera minime par rapport à la charge de 2 ^ 16+ auditeurs en cours d'exécution.

Les démons sous Linux peuvent écouter sur les sockets unix qui existent dans le système de fichiers, de sorte que votre "service multiplexeur" puisse maintenir un mappage interne du port externe <-> socket unix interne. Vous rencontrerez probablement une limite de processus du noyau (processus de 32 Ko ?) avant de manquer d'inodes sur n'importe quel système de fichiers moderne.


Ce n'est pas parce qu'il n'y a pas de bonne réponse que je voulais intervenir.

Une façon de faire serait d'ajouter une option IP qui spécifie l'extension du port. L'option doit être conçue pour tenir dans la partie facultative de l'en-tête IP et serait ignorée par des sauts inconnus.

Vous utiliserez cette option et ses informations d'information pour étendre la source, la destination ou les deux numéros de port.

Les limitations ne fonctionneront pas automatiquement dans les logiciels existants simplement en ajoutant l'option de toute façon, elles devront être réécrites pour tirer parti de l'option, quelle que soit la manière dont elle est implémentée, les logiciels et les pare-feu existants ignoreront le paquet ou le traiteront comme d'habitude en utilisant la valeur dans les champs du port source et de destination.

En bref, ce n'est pas facile à faire et il serait préférable d'utiliser un seul écouteur réutilisable et les données contenues dans la charge utile du paquet.

Vous pouvez également autoriser plus facilement la réutilisation des ports dans le logiciel, ce qui peut aider à surmonter cette limitation en réutilisant les ports du serveur pour plusieurs connexions client.

Rtsp, par exemple, peut utiliser l'en-tête SessionId conjointement avec divers autres en-têtes dans la charge utile du paquet IP pour déterminer la connexion pour laquelle la demande a été émise et agir en conséquence, par ex. si la socket à partir de laquelle le message a été livré n'est pas la même que l'adresse distante de la socket à laquelle la session correspond, alors on peut soit autoriser la mise à jour d'une session avec la nouvelle socket pour traitement, soit refuser le message ou une variété d'autres actions selon l'application.

Un serveur HTTP peut également faire cela ou tout autre type de serveur.

L'élément clé à retenir lorsque vous autorisez la réutilisation des ports est que vous devez également prendre en compte l'adresse IP source.


Linux
  1. 14 ports réseau courants que vous devez connaître

  2. CentOS / RHEL :Comment configurer vsftpd pour utiliser des ports autres que les ports par défaut 20 et 21

  3. Comment puis-je tuer le port TCP 16969 dans Bash ?

  4. Comment puis-je exécuter SSH sur un port autre que 22 ?

  5. Comment puis-je vérifier quels ports sont occupés et quels ports sont libres sur ma machine Linux ?

Comment faire une analyse de port sous Linux

Zorin OS 15 plus beau et utile que jamais

Ouvrir un port sous Linux

Tuer le processus en cours d'exécution sur le port 80

Puis-je utiliser ufw pour configurer une redirection de port ?

Liaison aux ports inférieurs à 1024 sans accès root