Novato em redes. Tenho duas interfaces no host: eth0
e tun0
no meu cliente OpenVPN. Os endereços IP são:
eth0 192.168.1.22
tun0 10.1.0.8
Questão 1
Paraextrovertidotráfego alterando o endereço de destino para tun0
forçá-lo a usar a VPN?
Não, mas usar o endereço do gateway para tun0 sim. Testado com o seguinte:
iptables -t nat -N VPN
iptables -t nat -I OUTPUT -j VPN
iptables -t nat -A VPN -p tcp -j DNAT --to-destination 10.1.0.170
Onde 10.1.0.170
estava o endereço do gateway da VPN (encontrado usando ip route
).
- O exemplo acima cria uma cadeia NEW (
-N
) para a tabela nat (-t
). - O salto para a cadeia VPN é de
OUT
(logo após o aplicativo local). Usando insert(-I
) para substituir outras regras em OUT. - Está implícito que, para o tráfego originado de qualquer origem, altere o destino para o gateway do
tun0
dispositivo.
Pergunta 2(a)
Para o tráfego de saída, o endereço de destino é o endereço IP da interface eth0
ou é o endereço do gateway? Supondo que eth0
seja a interface/gateway padrão.
Pergunta 2(b)
Para o tráfego gerado pelo aplicativo local, qual é o endereço de origem?
Questão 3
Isso pode ser resolvido apenas pelo iptables ou preciso modificar a tabela de roteamento? Como ambas as interfaces estão no mesmo host (ou seja, na mesma caixa debian).
Informação adicional
Estou tentando entender os princípios para poder aplicá-los ao meu caso. Existem três sub-redes de endereço I no total, a terceira está no intervalo 172.17.42.1/16 associada a outra interface virtual docker0
.
Essencialmente, quero direcionar o tráfego deapenas172.17.42.8 através da VPN.
Responder1
Em primeiro lugar, a excelente figura vinculada à página iptables do wiki do ArchLinux é útil para identificar o fluxo de pacotes através das várias iptables
cadeias (na parte inferior da resposta).
Cópia de segurança
iptables-save > back.up.file
Verifique o seu tipo de distribuição Linux, precisei acrescentar sudo
porque não era root.
Questão 2(a), 2(b)
Para determinar os endereços de origem e destino, achei as funções LOG
e TRACE
muito úteis:
iptables -t filter -I OUTPUT -m limit --limit 5/m --limit-burst 10 -j LOG --log-prefix "ABC-LOG-PREFIX "
A tabela padrão é, filter
mas eu a declarei explicitamente para que você possa ver a sintaxe, especialmente se quiser explorar outras tabelas mangle
, nat
etc. Inseri a regra -I
porque queria que os pacotes fossem registrados antes que outras regras fossem aplicadas. Adicionado um limite de taxa para que o arquivo de log não fique saturado -m limit --limit 5/m --limit-burst 10
. Finalmente foi adicionado um prefixo para que o arquivo de log possa ser pesquisado facilmente --log-prefix
. Por exemplo, no Linux Mint:
cat /var/log/kern.log | grep "ABC-LOG-PREFIX"
Em segundo lugar, para depuração, o TRACE
comando rastreará um pacote durante todo o processo:
IPTABLES -t raw -A PREROUTING -p tcp -j TRACE
Atenção, isso rastrearátodospacotes tcp, para mais informações vejaAdministrador Berlim
Questão 3
Como ambas as interfaces ( eth0
e tun0
) estavam no mesmo host, no diagrama de filtro de pacotes abaixo você pode ver que o tráfego de saída começa no mesmo ponto. A rota que um pacote segue é determinada pelo gateway padrão e sua interface associada, que pode ser determinada executando iproute2
:
ip route
Isso mostrará o gateway padrão, quais interfaces são usadas para quais intervalos de endereços.
Diagrama de fluxo de pacotes
Responder2
Pelo que sei, você está falando sobre tunelamento dividido (ou melhor, tentando desativá-lo).
Dê uma olhada na diretiva de gateway de redirecionamento no OpenVPN:https://openvpn.net/index.php/open-source/documentation/howto.html#redirect
Responder3
Nos exemplos a seguir, o nome do dispositivo VPN é tun0 (OpenVPN) e o gateway VPN é 172.21.23.172
#1 - Instale VPN em seu roteador Linux (estou usando ipvanish com openvpn)
#2 – Roteie o tráfego usando iptables
sudo iptables -t nat -A POSTROUTING -o [VPN dev] -j MASQUERADE
exemplo:
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
#3 – Configure tabelas de roteamento (para garantir que todo o tráfego seja roteado através da VPN)
sudo ip route add default via [VPN ipv4 address] dev [VPN dev]
exemplo:
sudo ip route add default via 172.21.23.172 dev tun0
#4 - Verifique se os dispositivos na rede estão realmente roteando através da VPN executando estes comandos:
Janelas: tracert 1.1.1.1
Linux:traceroute 1.1.1.1
Você Terminou!