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.

couveuse
la source
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.

Torian
la source
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