OpenVPN: roteando o tráfego VPN sobre eth1 com rota estática como gateway

0

Uma máquina virtual Debian 8 no meu servidor ESXi está executando um servidor OpenVPN que estava funcionando bem até que eu decidi adicionar outra interface à máquina com outro IP. Eu gostaria de usar um IP apenas para o tráfego VPN, não para administração de servidor.

Estes são os dois IPs externos. O provedor com o qual estou usando uma configuração bastante estranha, eu tenho que configurar o gateway para um IP fora da sub-rede. E como muitos sistemas operacionais aceitam isso, tenho que criar uma rota estática.

Isto é o que parece:

root@ln-1:/etc/openvpn# ifconfig
eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx
          inet addr:92.xxx.xxx.xxx  Bcast:92.xxx.xxx.xxx  Mask:255.255.255.255
          inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:271765 errors:0 dropped:10 overruns:0 frame:0
          TX packets:4545 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:16520579 (15.7 MiB)  TX bytes:1027263 (1003.1 KiB)

eth1      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          inet addr:217.xxx.xxx.xxx  Bcast:217.xxx.xxx.xxx  Mask:255.255.255.255
          inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:271152 errors:0 dropped:9 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:16727664 (15.9 MiB)  TX bytes:1598 (1.5 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:45 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:2774 (2.7 KiB)  TX bytes:0 (0.0 B)

E as rotas, eu configurei a rota para 91.xxx.xxx.xxx (que é o gateway) em ambas as interfaces, mas eu fiz o default em eth0 que faz as máquinas usarem aquela por padrão eu acho, mas Eu quero que o tráfego VPN passe pela eth1, usando o mesmo IP do gateway:

root@ln-1:/etc/openvpn# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         91.xxx.xxx.xxx  0.0.0.0         UG    0      0        0 eth0
10.8.0.0        10.8.0.2        255.255.255.0   UG    0      0        0 tun0
10.8.0.2        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
91.xxx.xxx.xxx  0.0.0.0         255.255.255.255 UH    0      0        0 eth1
91.xxx.xxx.xxx  0.0.0.0         255.255.255.255 UH    0      0        0 eth0

E a configuração do iptables:

root@ln-1:/etc/openvpn# iptables-save
# Generated by iptables-save v1.4.21 on Tue May  9 00:08:15 2017
*filter
:INPUT DROP [8286:454500]
:FORWARD DROP [801:48621]
:OUTPUT ACCEPT [4648:980772]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -i eth1 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -o eth1 -j ACCEPT
COMMIT
# Completed on Tue May  9 00:08:15 2017
# Generated by iptables-save v1.4.21 on Tue May  9 00:08:15 2017
*nat
:PREROUTING ACCEPT [19909:1034285]
:INPUT ACCEPT [54:2776]
:OUTPUT ACCEPT [144:10480]
:POSTROUTING ACCEPT [144:10480]
-A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE
COMMIT
# Completed on Tue May  9 00:08:15 2017

SSH Gostaria de falar sobre a eth0, o resto, o tráfego da VPN passa pela porta 443 e, na porta 80, eu sirvo a configuração do OpenVPN para facilitar a localização. A configuração do OpenVPN inclui as seguintes linhas:

local 217.xxx.xxx.xxx
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

O encaminhamento de IP está ativado e tudo funcionou até que eu quisesse usar a eth0 para tudo, exceto o tráfego da VPN, e a eth1 apenas para o tráfego da VPN.

Não consigo fazer isso funcionar, procurei muito, mas não consigo encontrar alguém com uma configuração semelhante que tenha resolvido isso. Qualquer ajuda seria muito apreciada!

Se eu perdi algo relevante, por favor, diga-me e eu adicionarei, é claro, também sou novo para postar coisas neste site, por favor, desculpe-me se estou fazendo algo errado.

EDIT 10 de maio 2017 22:07 CEST: Eu tenho novas informações: Aparentemente, o OpenVPN tenta encaminhar / encaminhar de tun0 para eth0, eu estava experimentando com o logging do iptables:

-A INPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_INPUT_denied: " --log-level 4
-A FORWARD -m limit --limit 3/min -j LOG --log-prefix "iptables_FORWARD_denied: " --log-level 4

O que me mostrou isso:

May 10 21:20:15 ln-1 kernel: [176312.426411] iptables_FORWARD_denied: IN=tun0 OUT=eth0 MAC= SRC=10.8.0.6 DST=157.56.144.215 LEN=89 TOS=0x00 PREC=0x00 TTL=127 ID=1513 PROTO=UDP SPT=57959 DPT=3544 LEN=6

Também estou surpreso de ver PROTO=UDP aqui porque o servidor e o cliente estão configurados para usar o TCP.

    
por krnz 09.05.2017 / 12:00

1 resposta

0

Você pode usar o parâmetro local no arquivo de configuração do OpenVPN para forçar o cliente a se ligar a uma interface usando determinado endereço IP.

--local host

Local host name or IP address for bind. If specified, OpenVPN will bind to this address only. If unspecified, OpenVPN will bind to all interfaces.

Você pode especificá-lo no arquivo de configuração do cliente também

local ip.add.re.ss

Com isso, as CONEXÕES VPN INCOMING (apenas o túnel, não os pacotes encaminhados) serão aceitas somente pela eth1. Agora, se você quiser usar a eth1 para rotear os traffigs que chegam DA VPN À INTERNET, você precisa usar o roteamento baseado em políticas. Algo como

ip rule add from / table ip route add 1.2.3.4/24 via tabela dev tun0

é o nome da tabela especificado em / etc / iproute2 / rt_tables ou você pode usar o ID numérico ...

Isso praticamente diz que todo o tráfego de 1.2.3.4/24 será roteado usando a tabela de roteamento. IIRC não usa a tabela padrão depois de passar por isso, então se você precisar de outras rotas (por exemplo, gateway padrão), você precisa adicioná-las à tabela também.

Acho que com a regra você pode ajustar sua configuração ao trabalho.

Há mais referências sobre roteamento de políticas baseadas em fontes aqui:

Superusuário - Fonte Roteamento de políticas com base e & NAT (DNAT / SNAT) também conhecido como Multi WANs no CentOS 5

Boa sorte.

    
por 09.05.2017 / 12:09