Roteamento granular com iptables e iproute2 sobre VPN

0

Em um host na minha casa, tenho um host para uma VPN que preciso para alguns fins. Vivendo temporariamente no Japão, ele funciona como um NAT para alguns dispositivos, então eu ainda posso usar minha NETFLIX e alguns outros serviços. No entanto, eu quero que o servidor ainda use a rede normal para downloads / navegação na web. Atualmente, o seguinte é uma cópia barebones da minha configuração:

ip rule show

0:      from all lookup local
32764:  from all fwmark 0x1 lookup 10
32767:  from all lookup main
32768:  from all lookup default

ip route show table 10

default dev ppp0 scope link

iptables-save

*mangle
:PREROUTING ACCEPT [11:822]
:INPUT ACCEPT [11:822]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [8:872]
:POSTROUTING ACCEPT [8:872]
-A OUTPUT -s 192.168.1.102 -j MARK --set-mark 0x1
COMMIT
*nat
:PREROUTING ACCEPT [2831:752380]
:POSTROUTING ACCEPT [107531:7116617]
:OUTPUT ACCEPT [107652:7124121]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [41463962:7467495526]
-A FORWARD -i eth0 -p ppp+ -j ACCEPT
-A FORWARD -i ppp+ -o eth0 -j ACCEPT
COMMIT

Eu gostaria de afirmar que minha configuração real do iptables é mais elaborada, incluindo algumas declarações de log para novas conexões do lado FORWARD da casa e para evitar muitos logs, há um cobertor aceito para conexões ESTABLISHED, RELACIONADAS antes da instrução de log e mais endereços IP na tabela mangle. Esta configuração serve o seu propósito para os meus dispositivos, no entanto eu apenas tentei ssh'ing para ele de um controle remoto e não pode. A razão é óbvia, as respostas do meu serviço ssh estão sendo roteadas eth0 em vez de ppp0. O que me leva à minha pergunta.

É possível ter o fwmark 1 aplicado a todas as sessões originadas sobre o ppp0? Eu sei, através de alguma escavação, que conntrack pode realizar correspondências com base no ip de origem do host de origem da sessão, mas posso fazer algo semelhante para o dev de origem?

O objetivo geral é que o ssh possa ser executado a partir da sub-rede privada, meu endereço IP original (ip japonês 204.xxx.xxx.xxx) ou o ip da vpn (23.xxx.xxx.xxx) sem alterar constantemente o configuração. Uma solução deselegante que só permitiria ssh sobre o privado e a VPN estaria aplicando fwmark em qualquer sub-rede diferente da 192.168.xxx.xxx sendo o 22 o esporte na tabela mangle, porém isso não permitiria ssh sobre o ip japonês .

    
por darkdragn 22.04.2014 / 03:07

1 resposta

0

Use o CONNMARK para marcar as conexões:

iptables -t mangle -A INPUT -i ppp+ -j CONNMARK --set-mark 0x1
iptables -t mangle -A OUTPUT -m connmark --mark 0x1 -j MARK --set-mark 0x1
    
por 15.06.2014 / 11:45