encaminhamento de iptables entre duas interfaces

26

Então, eu tenho uma caixa Linux com duas interfaces sem fio, uma é uma estação e a outra um AP.

wlan0 (estação) - conectado à conexão à Internet

wlan1 (AP) - Outros clientes se conectam a ele.

Gostaria que os clientes conectados à wlan1 pudessem acessar a internet na wlan0. E eu gostaria de fazer isso com o iptables, pois meu kernel não tem suporte a pontes ...

Aqui está o que eu tentei até agora com o iptables, mas não está funcionando:

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

Eu apreciaria qualquer ajuda.

medíocre
fonte
1
IPTABLES é um filtro de pacotes com estado, que permite / deixa cair / manipula pacotes. Não é um roteador ou ponte. Seus comandos ajustam o firewall para permitir o tráfego, mas eles não fazem nada para realmente enviá-lo.
precisa saber é o seguinte
Portanto, substitua o kernel por um que possua os recursos que você precisa. É "uma caixa de linux", afinal.
Michael Hampton
Posso conseguir o que estou tentando fazer com 'route'? Também analisarei a reconstrução do kernel com suporte a bridge, mas me perguntando se há outras opções.
broody
O percurso indica para onde ir quando estiver ativado. Michael disse o que você precisa fazer para oferecer suporte ao roteamento. Então você precisa ativá-lo via sysctl.
Magellan

Respostas:

35

Primeiro, para permitir que os hosts que se conectam à sua interface privada acessem a Internet, não é necessário fazer uma ponte entre as interfaces, é necessário rotear pacotes que entram em uma interface, na outra, para onde eles saem para a natureza.

Para fazer isso, você só precisa:

  1. Habilite o encaminhamento na sua caixa Linux:
  2. Permitir que pacotes específicos (ou todos eles) atravessem seu roteador
  3. Como alguém afirmou, como o netfilter é um firewall sem estado, permita o tráfego para conexões já estabelecidas
  4. Altere o endereço de origem nos pacotes enviados para a Internet
    eco 1> / proc / sys / net / ipv4 / ip_forward
    iptables -A FORWARD -i wlan1 -o wlan0 -j ACEITAR
    iptables -A FORWARD -i wlan0 -o wlan1 -m state --state ESTABELECIDO, RELACIONADO \
             -j ACEITA
    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Isso deve resolver.

Torian
fonte
Eu acho que você provavelmente quis dizer: echo 1 >/proc/sys/net/ipv4/ip_forwardpara a primeira linha
Jason Tan
é isso ... não sei o que aconteceu com a última parte dessa linha ... corrigida.
Torian
Eu acho que você também teria que configurar os clientes para usar a caixa linux como gateway.
Jason Tan
E para tornar o envio persistem através de reinicializações que você quer fazer isso: 'echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf'
Jason Tan
1
@StudentsTea Sim, você faz, a menos que sua tabela iptables' FORWARDesteja definida para uma política de aceitação global. Você ainda precisará das natregras da tabela de qualquer maneira.
Thomas Ward