Por que o ip_forwarding = 1 falha com VPN?

1

Meu computador oferece um AP Wifi para compartilhar sua conexão de Internet eth. Trabalha sem dor.

Eu decidi conectar meu computador ao meu servidor VPN (meu servidor remoto distante eth ), para que meus "clientes WifiAP" navegassem na Internet depois de terem sido sintonizados na minha VPN. E isso não funciona totalmente.

O que funciona : meu computador pode navegar na web e ipecho.net/plain processa o IP do servidor VPN distante. Tudo certo. Os clientes WifiAP podem fazer ping no IP do servidor VPN distante.

O que falha : Os clientes WifiAP não podem pingar mais nada e absolutamente nenhum domínio (Impossível alcançar 8.8.8.8 IP do GDNS ... sem resolução de domínio).

Breve, sem VPN, o Sr. Anybody pode entrar no wifi e navegar na WWW. Com VPN, só o meu computador pode fazer.

ip_forwarding não é para tunelamento?

O que está errado? Como posso consertar isso?

por ArchiT3K 17.09.2015 / 13:33

2 respostas

2

Qual é o problema

Então, o que você quer é que a transferência de endereços de rede funcione (NAT). Eu não pretendo ser um especialista em iptables , mas posso ver com base nesta parte do seu iptables-save :

*nat
:PREROUTING ACCEPT [1710:298954]
:INPUT ACCEPT [1480:280336]
:OUTPUT ACCEPT [28:4162]
:POSTROUTING ACCEPT [86:6162]
-A PREROUTING -i wlan0 -p tcp -m mark --mark 0x3e7 -m tcp --dport 80 -j DNAT --to-destination 13.37.42.1:80
-A PREROUTING -i wlan0 -p tcp -m mark --mark 0x3e7 -m tcp --dport 443 -m conntrack --ctstate NEW -j DNAT --to-destination 13.37.42.1:80
-A POSTROUTING -o eth0 -j MASQUERADE #####this line
-A POSTROUTING -o wlan0 -j MASQUERADE

... e esta parte:

*filter
:INPUT ACCEPT [6041:840617]
:FORWARD ACCEPT [380:110945]
:OUTPUT ACCEPT [753:102159]
-A FORWARD -i wlan0 -j ACCEPT  #####this line
COMMIT

... parece que você está encaminhando as coisas que chegam em wlan0 , que têm permissão para MASQUERADE on eth0 . No entanto, sua tabela de roteamento direcionará todo o tráfego geral por meio da interface tun0 , porque uma das duas linhas com GENMASK 128.0.0.0 sempre corresponderá antes do destino default em eth0 with GENMASK 0.0.0.0 . Isso significa que você está encaminhando pacotes wlan0 de entrada para eth0 , mas seu tráfego geral passa pela interface tun0 . Você deseja encaminhar wlan0 pacotes para tun0 .

Solução possível

Você pode corrigir isso, sem alterar nenhum de seus iptables (mais uma vez, não sou um iptables expert e seu iptables é muito mais complicado que o meu) executando:

sudo iptables --table nat --append POSTROUTING --out-interface tun0 -j MASQUERADE

Como faço NAT

Eu escrevi este pequeno script para configurar o NAT nos meus computadores, porque eu nunca consigo lembrar os comandos. Portanto, na ausência do restante de iptables , você pode executar nat tun0 wlan0 para passar a conexão à Internet em tun0 para wlan0 .

#!/bin/bash
# I named this script "nat"
if [ $# -lt 2 ]
        then
        echo usage: nat \<internet connection iface\> \<recieving iface\>
        exit 0
fi

internetiface=$1;
receivingiface=$2;

sudo iptables --table nat --append POSTROUTING --out-interface $internetiface -j MASQUERADE
sudo iptables --append FORWARD --in-interface $receivingiface -j ACCEPT


echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
    
por 17.09.2015 / 18:16
0

Não há nada errado com sua configuração da VPN e das regras de firewall. O que você está perdendo é o fato de que você tem apenas um gateway, 192.168.0.1, e que só é acessível via eth0, e é claro que não é acessível via wlan0, apenas verifique sua tabela de roteamento.

Esse comportamento é normal : em todos os sistemas operacionais, só pode haver uma interface vinculada ao gateway, porque o kernel deve saber inequivocamente como rotear pacotes.

Em todos os sistemas operacionais ... exceto Linux, onde você pode adicionar uma segunda (e uma terceira tabela de roteamento), desde que você também adicione regras que digam ao kernel quando usar cada uma das tabelas de roteamento inequivocamente . Isso é o que você precisa fazer: configurar uma tabela de roteamento segundo e adicionar uma regra que diz que todos os pacotes provenientes da sub-rede tun0 devem ser roteados por meio dessa segunda tabela de roteamento.

Isso é chamado de roteamento de políticas. Você faz isso da seguinte maneira: escolha um nome para a nova tabela e, em seguida,

     echo 200 <NAME1> >> /etc/iproute2/rt_tables
     ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>

(aqui DEV1 é wlan0, NET1 e SRC1 são a rede e o endereço IP wlan0 já tem),

     ip route add default via <IP1> table <NAME1>

(IP1 é o gateway da sua lan) e, por último,

     ip rule add from <IP1> table <NAME1>

Aqui IP1 é a sub-rede da interface tun0.

Isso é tudo.

    
por 18.09.2015 / 19:22