seleção múltipla de tráfego VPN tuntap

1

Eu tenho um aplicativo php / bash em cima de uma máquina linux (centos ou debian, mas suponho redhat apenas no caso de a resposta precisar de um dialeto diferente) conectando-se à porta 80.

Na verdade, eu sou perfeitamente capaz de abrir uma VPN via openvpn na linha de comando do linux. Eu uso a opção "route-nopull" no arquivo de configuração .ovpn para manter o servidor acessível, então eu tenho o dispositivo tuntap à mão no modo de espera ativo assim que decido rotear o tráfego através dele.

É bom saber que tenho tun e provedores de tap, mas meu provedor favorito usa tun.

Até hoje eu só tive que direcionar o tráfego:

sudo route add 123.123.123.123 tun0

simples & funky. Agora preciso abrir várias requisições independentes, e o nopull-route me permite conectar várias VPNs prontas para serem usadas: tun0 tun1 tun2 ... Meu problema é que minha "solução de roteamento" força as requisições de aplicativos apenas em uma via serial um dispositivo e preciso esperar antes de uma segunda conexão! Além disso, é demais para minhas habilidades ... Eu preciso compartilhar ideias e alguma ajuda técnica.

Eu tenho pouca habilidade com o iptables e penso que talvez o proxy reverso possa permitir que eu gire solicitações para, por exemplo, localhost: 9990 - > tun0, localhost: 9991 - > tun1 etc, mas eu não tenho experiência em proxy reverso e eles normalmente não suportam dispositivos tuntap. Tenho certeza de que outra solução é iptables com várias tabelas de roteamento: 123.123.123.123:9990 - > marcado para rt0 - > reescrito como 123.123.123.123:80 - > rt0 roteia através do tun0 que é seu gateway padrão etc etc para o tun1 ans etc.

Mas isso é realmente demais para minhas habilidades !!! Além disso, estou com medo de comprometer minha configuração de trabalho com uma suposição incorreta e testes confusos.

Obrigado por ler e ajudar.

    
por fab 23.10.2015 / 22:21

1 resposta

0

Por que eu precisava conseguir isso e divagações sobre como usar o "paralelismo" mundial são apenas bla bla bla que não orientam a solução.

Eu resolvi e documentei aqui: link

Isso fará com que o kernel rotule permanentemente os pacotes, habilite várias rotas e até mesmo redes não atestadas na máquina:

nano /etc/sysctl.conf

net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
net.ipv4.ip_forward = 1

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 >| $f ; done

Isto irá inicializar o iptables e, em particular, mangle e nat, que são necessários para marcar o tráfego:

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

adicione a edição de rotas alternativas:

nano /etc/iproute2/rt_tables

Adicionar (nomes são suas referências):

1 tunnel0
2 tunnel1

adicione rotas e regras, usamos IDs de tabelas em vez de nomes mais imediatos. Como você pode notar, o gateway é irrelevante, especialmente para túneis que podem ter gateways dinâmicos:

ip route add 0.0.0.0/0 dev tun0 table 1
ip route add 0.0.0.0/0 dev tun1 table 2

adicione regras para marcar o tráfego e vincular-se à tabela correspondente:

ip rule add from all fwmark 1 table 1
ip rule add from all fwmark 2 table 2
ip route flush cache

verifique se você gosta:

ip route show table 1
ip route show table 2
ip rule show

Se você perder alguma coisa, pode excluir desta forma:

ip rule del table 1
ip route flush table 1

AGORA A PARTE AUSENTE: ISSO NÃO VAI TRABALHAR:

iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 1

ESTE VAI:

iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK --set-mark 1
iptables-save

Você precisa selecionar tráfego e enviá-lo simultaneamente em um dispositivo / túnel? Não tem problema, eu resolvi isso também:

iptables -A OUTPUT -t mangle -p tcp --dport 10001 -j MARK --set-mark 1
iptables -A OUTPUT -t mangle -p tcp --dport 10002 -j MARK --set-mark 2
iptables -t nat -A OUTPUT -p tcp --dport 10001 -j DNAT --to :80
iptables -t nat -A OUTPUT -p tcp --dport 10002 -j DNAT --to :80

NAT obrigatório para resposta

iptables -t nat -A POSTROUTING -o $DEV1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $DEV2 -j MASQUERADE

iptables-save
    
por 07.11.2015 / 18:38