transfert iptables entre deux interfaces


26

J'ai donc une box Linux avec deux interfaces sans fil, l'une est une station et l'autre un AP.

wlan0 (station) - Connecté à la connexion Internet

wlan1 (AP) - D'autres clients s'y connectent.

Je souhaite que les clients connectés à wlan1 puissent accéder à Internet sur wlan0. Et je voudrais le faire avec iptables car mon noyau n'a pas de support de pontage ...

Voici ce que j'ai essayé jusqu'à présent avec iptables mais cela ne fonctionne pas:

iptables -A FORWARD -i wlan0 -o wlan1 -j ACCEPT
iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT

J'apprécierais toute aide.


1
IPTABLES est un filtre de paquets avec état, il autorise / supprime / supprime les paquets. Ce n'est pas un routeur ou un pont. Vos commandes ajustent le pare-feu pour autoriser le trafic, mais elles ne font rien pour le transférer.
Zoredache

Remplacez donc le noyau par un qui possède les fonctionnalités dont vous avez besoin. C'est "une boîte Linux", après tout.
Michael Hampton

Puis-je réaliser ce que j'essaie de faire avec «route»? J'examinerai également la reconstruction du noyau avec le support du pont, mais je me demanderai s'il existe d'autres options.
couvée

Route lui indique où aller une fois qu'il est activé. Michael vous a expliqué ce que vous devez faire pour prendre en charge le routage. ALORS vous devez l'activer via sysctl.
Magellan

Réponses:


35

Tout d'abord, pour permettre aux hôtes se connectant sur votre interface privée de sortir sur Internet, vous n'avez pas besoin de ponter les interfaces, vous devez router les paquets arrivant sur une interface, vers l'autre, où ils sortent à l'état sauvage.

Pour ce faire, il vous suffit de:

  1. Activez le transfert sur votre box Linux:
  2. Autorisez des paquets spécifiques (ou tous) à traverser votre routeur
  3. Comme quelqu'un l'a dit, comme netfilter est un pare-feu sans état, autorisez le trafic pour les connexions déjà établies
  4. Changer l'adresse source des paquets sortis sur Internet

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT
    iptables -A FORWARD -i wlan0 -o wlan1 -m state --state ESTABLISHED,RELATED \
             -j ACCEPT
    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
    

Ça devrait le faire.


Je pense que vous voulez probablement dire: echo 1 >/proc/sys/net/ipv4/ip_forwardpour la première ligne
Jason Tan

c'est ça ... je ne sais pas ce qui est arrivé à la dernière partie de cette ligne ... corrigée.
Torian

Je pense que vous devez également configurer les clients pour qu'ils utilisent la boîte Linux comme passerelle.
Jason Tan

Et pour que le transfert persiste lors des redémarrages, vous voulez faire ceci: 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'
Jason Tan

1
@StudentsTea Oui, vous le faites, à moins que votre iptables" FORWARDtable est réglé sur une politique d' accepter globalement. natCependant, vous auriez toujours besoin des règles de table.
Thomas Ward
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.