
Usei o seguinte guia para configurar meu Raspberry Pi como ponto de acesso:
Raspberry Pi 3 como ponto de acesso wifi
Estou encaminhando wlan0
e eth0
NAT todo o meu tráfego. Funciona bem!
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
Agora quero configurar as mesmas regras, exceto usar interface tun0-00
e encaminhartodosmeu tráfego através do meu túnel VPN. Eu quero enviar tudo isso, não quero que nada vaze para a rede host. Pensando que é algo assim:
sudo iptables -t nat -A POSTROUTING -o tun0-00 -j MASQUERADE
sudo iptables -A FORWARD -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o tun0-00 -j ACCEPT
Infelizmente eu sei que essas regras do iptables não estão completas... O problema é que isso eth0
permanece ativo; a regra original para encaminhar o tráfego eth0
ainda existe.
Quero enviar todo o meu tráfego através do túnel se o túnel estiver aberto; se não, estou bem usando eth0
.
Atualizar:
Usei o sinalizador -I para inserir minhas regras:
sudo iptables -t nat -I POSTROUTING 1 -o tun0-00 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD 1 -i wlan0 -o tun0-00 -j ACCEPT
A cadeia FORWARD:
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- wlan0 tun0-00 0.0.0.0/0 0.0.0.0/0
2 0 0 ACCEPT all -- tun0-00 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 0 0 ACCEPT all -- eth0 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
4 0 0 ACCEPT all -- wlan0 eth0 0.0.0.0/0 0.0.0.0/0
5 0 0 ACCEPT all -- wlan1 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
6 0 0 ACCEPT all -- wlan0 wlan1 0.0.0.0/0 0.0.0.0/0
Ainda sem alegria, o encaminhamento parece não funcionar.
Configuração de VPN do cliente
Eu limpei coisas que pareciam sensíveis:
dev tun
persist-tun
persist-key
cipher AES-256-CBC
auth SHA1
tls-client
client
resolv-retry infinite
remote XXX.XXX.XXX.XXX PORT_NUM udp
lport XXX
verify-x509-name "VPN_Certificate" name
pkcs12 CERT_NAME.p12
tls-auth CERTIFICATE-tls.key 1
ns-cert-type server
redirect-gateway local def1
O pi se conecta perfeitamente e reflete um IP público diferente. Os clientes ainda mostram o pi como gateway, mas não conseguem mais se conectar.
Solução
Primeiro eu precisava adicionar redirect-gateway def1
o arquivo .ovpn no pi.
Então eu precisei digitar o nome da minha interface corretamente... Ugh. Me sinto uma louca, mas aparentemente vi tun0-00
no começo e foi a única vez que existiu. A interface é na verdade apenas tun0
.
Portanto, os comandos apropriados do iptables foram:
sudo iptables -t nat -I POSTROUTING 1 -o tun0 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD 1 -i wlan0 -o tun0 -j ACCEPT
Funciona muito bem agora!
Responder1
Você precisará dos dois conjuntos de regras do iptables
. Os dois conjuntos de regras garantem que o tráfego que sai pelas interfaces especificadas seja mascarado adequadamente. Aqui está minha sugestão, que é um pouco mais simples que a sua:
# Masquerade outgoing traffic
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# Allow return traffic
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Forward everything
iptables -A FORWARD -j ACCEPT
A parte do quebra-cabeça que falta é o roteamento. Se o túnel estiver ativo, você deseja que "todo" o tráfego de saída o utilize. Caso contrário, use a rota normal.
Isso é tratadodentro do OpenVPNusando o redirect-gateway def1
parâmetro na configuração do seu cliente.
Responder2
A ferramenta útil é listar as regras existentes com números de linha:
iptables --line-numbers -t filter -L FORWARD
Você pode excluir as regras com -D
a opção:
iptables -t filter -D FORWARD 1
Você pode inserir uma nova regra no local especificado com -I
a opção:
iptables -t filter -I FORWARD 0 blah-blah-blah
isso inseriria uma nova regra logo no início de uma tabela, para que ela fosse consultada em um primeiro turno.
Editar:
Geralmente, você precisa apenas de uma regra na FORWARD
tabela que corresponda -m state --state RELATED,ESTABLISHED
:
-I FORWARD 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
já que o rastreamento de conexão permitiria que todas as conexões já conhecidas fossem roteadas.
E sim, você precisa configurarroteamento de políticapara encaminhar seu wlan
tráfego não para o gateway padrão que provavelmente é acessível por meio de sua ethernet
interface, mas por meio da vpn
interface.