OpenVPN não pode acessar a internet quando conectado

2

Estou tentando configurar o OpenVPN em nosso servidor. O servidor está executando o Centos 7. Depois de instalar e configurar o OpenVPN, posso conectar com sucesso de um cliente Windows 10. Mas uma vez conectado, não consigo acessar a internet. Eu também não consigo pingar o servidor host. Não relacionado ao OpenVPN, meu servidor também usa o KVM executando várias VMs em uma rede virtual. Eu também não posso pingar a VM quando conectado.

Conexão do host: 192.168.1.10
Rede VPN: 10.8.0.0
Rede virtual: 10.8.8.0

Confirmei que o encaminhamento de IP está ativado. Eu também atualizei o Iptables com:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Eu listei abaixo as informações do OpenVPN server.conf e Ifconfig.

Eu tenho lutado com isso por uma semana. Neste ponto, estou preso e não sei o que procurar a seguir. Alguma idéia?

OpenVPN server.conf:

port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem

ifconfig-pool-persist ipp.txt

server 10.8.0.0 255.255.255.0
push "route 192.168.1.10 255.255.255.255"
push "route 10.8.8.0 255.255.255.0"

push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 10 120
user nobody
group nobody

persist-key
persist-tun

status openvpn-status.log
verb 3
client-to-client

explicit-exit-notify 1

Ifconfig:

eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::3bcd:ddd4:4650:6087  prefixlen 64  scopeid 0x20<link>
        ether ac:1f:6b:05:cc:96  txqueuelen 1000  (Ethernet)
        RX packets 454678  bytes 136137391 (129.8 MiB)
        RX errors 36  dropped 37074  overruns 0  frame 36
        TX packets 213347  bytes 80743075 (77.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 91899  bytes 50703642 (48.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 91899  bytes 50703642 (48.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.8.0.1  netmask 255.255.255.255  destination 10.8.0.2
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 100  (UNSPEC)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.8.8.1  netmask 255.255.255.0  broadcast 10.8.8.255
        ether 52:54:00:34:2a:4d  txqueuelen 1000  (Ethernet)
        RX packets 2663  bytes 193301 (188.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2582  bytes 226983 (221.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::fc54:ff:fe6e:e2f  prefixlen 64  scopeid 0x20<link>
        ether fe:54:00:6e:0e:2f  txqueuelen 1000  (Ethernet)
        RX packets 2663  bytes 230583 (225.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 141674  bytes 7459999 (7.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Atualização sobre o acesso às VMs de uma conexão VPN:

Quando a ponte virtual libvirtd é iniciada, o iptables precisa ser modificado para rotear o tráfego da VPN para as VMs. A execução dos dois comandos firewall-cmd a seguir inserirá manualmente as regras necessárias. Isso precisará ser feito se o firewall-cmd --reload ou qualquer outro comando que restaurar as regras do firewalld for executado.

Suposições:

  • O dispositivo de rede virtual criado para o KVM é denominado virbr0 com sub-rede de 10.10.0.0/20 (ajuste aqui e abaixo, conforme necessário, se a rede virtual tiver sido criada sob um nome de dispositivo diferente).

  • O dispositivo OpenVPN é chamado tun0 com sub-rede de 10.8.0.0/24

    firewall-cmd --direct --passthrough ipv4 -I FORWARD 3 -d 10.10.0.0/20 -i tun0 -o virbr0 -j ACCEPT
    firewall-cmd --direct --passthrough ipv4 -I FORWARD 4 -s 10.10.0.0/20 -i virbr0 -o tun0 -j ACCEPT
    

Verifique as entradas executando o iptables -t filter -S seu deve ver o seguinte entre todas as regras listadas:

-A FORWARD -d 10.10.0.0/20 -i bridge0 -o virbr0 -j ACCEPT
-A FORWARD -s 10.10.0.0/20 -i virbr0 -o bridge0 -j ACCEPT
-A FORWARD -d 10.10.0.0/20 -i tun0 -o virbr0 -j ACCEPT
-A FORWARD -s 10.10.0.0/20 -i virbr0 -o tun0 -j ACCEPT

Nota: Os dois comandos anteriores do firewall-cmd que foram executados adicionaram as linhas 3 e 4 mostradas.

Se necessário, a execução dos dois comandos firewall-cmd a seguir removerá manualmente as regras inseridas.

    firewall-cmd --direct --passthrough ipv4 -D FORWARD -d 10.10.0.0/20 -i tun0 -o virbr0 -j ACCEPT
    firewall-cmd --direct --passthrough ipv4 -D FORWARD -s 10.10.0.0/20 -i virbr0 -o tun0 -j ACCEPT

Verifique as entradas executando o iptables -t filter -S seu deve ver o seguinte entre todas as regras listadas:

-A FORWARD -d 10.10.0.0/20 -i bridge0 -o virbr0 -j ACCEPT
-A FORWARD -s 10.10.0.0/20 -i virbr0 -o bridge0 -j ACCEPT

Nota: Os dois comandos anteriores do firewall-cmd que foram executados removeram as linhas 3 e 4 mostradas acima.

Problema: O serviço libvirtd sobrescreverá as regras adicionadas acima na inicialização ou reinicialização. Para contornar isso, adicione os dois scripts libvirt a seguir.

Script # 1: No início ou reconexão de qualquer VM associada a virbr0 (isso também será executado na inicialização ou executando systemctl start libvirtd):

vi / etc / libvirt / hooks / qemu e insira o seguinte:

    #!/bin/bash

    # Only execute this script if the opennebula-controller VM is started or reconnected
    if [ "${1}" = "opennebula-controller=" ] ; then

        # Check if vpn input routing rule exists. If not add it.
        iptables -C FORWARD -d 10.10.0.0/20 -i tun0 -o virbr0 -j ACCEPT > /dev/null 2>&1
        if [ $? = 1 ] ; then
            if [ "${2}" = "started" ] || [ "${2}" = "reconnect" ]; then
                firewall-cmd --direct --passthrough ipv4 -I FORWARD 3 -d 10.10.0.0/20 -i tun0 -o virbr0 -j ACCEPT
            fi
        fi

        # Check if vpn output routing rule exists. If not add it.
        iptables -C FORWARD -s 10.10.0.0/20 -i virbr0 -o tun0 -j ACCEPT > /dev/null 2>&1
        if [ $? = 1 ] ; then
            if [ "${2}" = "started" ] || [ "${2}" = "reconnect"  ]; then
                firewall-cmd --direct --passthrough ipv4 -I FORWARD 4 -s 10.10.0.0/20 -i virbr0 -o tun0 -j ACCEPT
            fi
        fi

    fi

Escreva e feche

Script # 2: Na parada do daemon libvirtd (isso remove as regras para que, ao reiniciar ou ao executar systemctl, pare a libvirtd, regras duplicadas não serão inseridas)

vi / etc / libvirt / hooks / daemon e insira o seguinte:

    #!/bin/bash

    # Check if vpn input routing rule exists. If it does, remove it.
    iptables -C FORWARD -d 10.10.0.0/20 -i tun0 -o virbr0 -j ACCEPT > /dev/null 2>&1
        if [ $? = 0 ] ; then
            if [ "${2}" = "shutdown" ]; then
                firewall-cmd --direct --passthrough ipv4 -D FORWARD -d 10.10.0.0/20 -i tun0 -o virbr0 -j ACCEPT
            fi
        fi

    # Check if vpn output routing rule exists. If it does, remove it.
    iptables -C FORWARD -s 10.10.0.0/20 -i virbr0 -o tun0 -j ACCEPT > /dev/null 2>&1
        if [ $? = 0 ] ; then
            if [ "${2}" = "shutdown" ]; then
                firewall-cmd --direct --passthrough ipv4 -D FORWARD -s 10.10.0.0/20 -i virbr0 -o tun0 -j ACCEPT
            fi
        fi

Escreva e feche

    
por Bob C. 10.10.2017 / 03:27

1 resposta

0

Eu tinha a compactação LZO (comp-lzo) especificada na configuração do meu cliente, mas não na configuração do servidor. Depois de corrigir esse problema, posso acessar a Internet e o resto da rede.

    
por 12.10.2017 / 21:50

Tags