routing / NATing 2 VPNs com iptables

2

Aqui está minha configuração:

Internet - router - Unix router - VPN1
                                - VPN2

router: 192.168.2.1/24
Unix router: 192.168.2.55/24
VPN1: 10.0.1.0/24 (Unix router: 10.0.1.10)
VPN2: 10.0.2.0/24 (Unix router: 10.0.2.10)

Qualquer que eu tente, eu continuo recebendo alguns pacotes sendo mal direcionados em uma VPN ou outra, ou mesmo através da conexão direta. Eu tentei usar connmark sem sucesso.

A conexão de saída padrão do meu roteador Unix precisa ser através da conexão direta, não das VPNs.

Eu também gostaria de poder obter algum tráfego direcionado de uma das VPNs para o meu roteador Unix. É aí que fica complicado controlar corretamente o caminho inverso.

Não importa se os servidores VPN têm acesso à LAN 192.168.2.0/24, mas seria bom ter isso.

Alguém pode me apontar na direção certa usando iptables ou iproute2 ?

Aqui estão os meus resultados atuais com o conjunto de opções iroute do OpenVPN:

 # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp4s0f0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:1b:21:4e:3d:8a brd ff:ff:ff:ff:ff:ff
3: enp4s0f1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:1b:21:4e:3d:8b brd ff:ff:ff:ff:ff:ff
4: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:23:54:27:2b:c5 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::223:54ff:fe27:2bc5/64 scope link
       valid_lft forever preferred_lft forever
5: br0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:23:54:27:2b:c5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.55/24 brd 192.168.2.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::223:54ff:fe27:2bc5/64 scope link
       valid_lft forever preferred_lft forever
6: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:7d:a4:f6 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe7d:a4f6/64 scope link
       valid_lft forever preferred_lft forever
7: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:41:24:60 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe41:2460/64 scope link
       valid_lft forever preferred_lft forever
18: tun2: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.0.2.10 peer 10.0.2.1/32 scope global tun2
       valid_lft forever preferred_lft forever
19: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.0.1.10 peer 10.0.1.1/32 scope global tun1
       valid_lft forever preferred_lft forever

 # ip route
default via 192.168.2.1 dev br0  metric 5
10.0.1.0/24 via 10.0.1.1 dev tun1
10.0.1.0/24 via 10.0.2.1 dev tun2
10.0.1.1 dev tun1  proto kernel  scope link  src 10.0.1.10
10.0.2.0/24 via 10.0.1.1 dev tun1
10.0.2.0/24 via 10.0.2.1 dev tun2
10.0.2.1 dev tun2  proto kernel  scope link  src 10.0.2.10
104.223.87.195 via 192.168.2.1 dev br0
192.168.2.0/24 dev br0  proto kernel  scope link  src 192.168.2.55
204.44.85.107 via 192.168.2.1 dev br0
    
por Julie Pelletier 14.05.2017 / 03:16

1 resposta

0

Para começar, meu problema principal era com net.ipv4.conf.default.rp_filter e net.ipv4.conf.all.rp_filter , que precisam ser definidos em 2 . Veja /etc/sysctl.conf para alterá-lo e use sysctl -p /etc/sysctl.conf para aplicar a mudança ao vivo.

Dito isso, a solução completa para controlar o tráfego de retorno é primeiro rastrear as conexões com connmark :

iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark ! --mark 0x0 -j ACCEPT
iptables -t mangle -A PREROUTING -i tun1 -j MARK --set-xmark 0x1
iptables -t mangle -A PREROUTING -i tun2 -j MARK --set-xmark 0x2
iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark

Então você precisa configurar rotas baseadas em políticas. Você deve definir duas novas tabelas de roteamento em /etc/iproute2/rt_tables , como:

101     VPN1
102     VPN2

Em seguida, faça rotas para ambas as direções em cada tabela. No meu caso, os IPs do cliente VPN que recebo são 10.0.1.10 e 10.0.2.10 e minha interface de rede local é 192.168.2.55 . Então eu faço:

ip route add 192.168.2.0/24 via 192.168.2.55 table VPN1
ip route add 192.168.2.0/24 via 192.168.2.55 table VPN2

Em seguida, defina a regra para seguir essas tabelas com base no conjunto de marcações:

ip rule add fwmark 1 table VPN1
ip rule add fwmark 2 table VPN2

Por fim, no upscript.sh da minha VPN, defino o gateway padrão como:

ip route add default via 10.0.1.1 table VPN1

.. para VPN1 e

ip route add default via 10.0.2.1 table VPN2

.. para VPN2.

Se você quiser que os servidores VPN possam rotear o tráfego diretamente para sua LAN, você precisará usar, com o OpenVPN, a instrução iroute para esse cliente em cada servidor ( ccd/client ) e também adicionar essa entrada de rota em seu arquivo de configuração ('openvpnserver.conf').

Agora inicie as suas VPNs e o tráfego deve sempre voltar para onde chegou, conforme necessário.

Note que teria sido possível reverter o disfarce nos servidores VPN, mas isso ocultaria o IP de origem que não era aceitável para mim.

    
por 18.05.2017 / 03:35