2 votes

PF ne transmet pas le trafic entrant sur le loopback d'un port à un autre

Scénario

J'ai un serveur qui écoute sur le port 3000 sur localhost . Je veux que le trafic entrant localhost:8080 à transmettre à ce serveur.

Mon installation :

  1. Le serveur écoute sur le port 3000 ; n 8080
  2. pfctl : rdr pass log on lo0 proto tcp from any to any port 8080 -> 127.0.0.1 port 3000
  3. surveiller toutes les connexions entrantes sur le port 8080 sur lo0 interface : sudo tcpdump -nn -i lo0 dst port 8080 -v

Test

curl localhost:8080

Attendu

  1. sur le port 3000 reçoit la demande de curl
  2. tcpdump retourne quelque chose comme : 127.0.0.1.57330 > 127.0.0.1. 3000 < more-info >

Réalité

  1. curl obtient curl: (7) Failed to connect to localhost port 8080: Connection refuse
  2. tcpdump renvoie 127.0.0.1.57330 > 127.0.0.1. 8080 < more-info >

\=> la sortie tcpdump signifie que la règle n'a pas été appliquée puisque le port de destination est toujours 8080 et non 3000 .

Question

Où ma configuration a-t-elle mal tourné et comment y remédier ?

1voto

poige Points 898

Tout d'abord, ce n'est pas pfctl (qui avance), mais plutôt PF. pfctl est juste un utilitaire de contrôle (d'où "ctl").

Maintenant, au débogage. Vous n'avez donné aucune de ces informations, donc tout est basé sur ma propre expertise et mes hypothèses, lire "suppositions".

pfctl -si devrait vous montrer si PF est effectivement activé. Oui, des règles peuvent y être chargées, mais étant désactivé, il ne traitera pas le trafic.

pfctl -vsn devrait montrer si vos règles NAT obtiennent des résultats ou pas.

Et si vous avez d'autres règles PF appliquées, vous avez intérêt à être sûr qu'il n'y a pas de set skip on lo0 .

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X