OpenVPN e roteamento e IPtables

4

OBJETIVO: acessar dispositivos de rede internos e navegar na Web pelo túnel.

192.168.2.x = internal network
192.168.3.x = openvpn server
192.168.2.111 = openvpn server on internal network

[root@openvpn ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.3.2     *               255.255.255.255 UH    0      0        0 tun0
192.168.3.0     192.168.3.2     255.255.255.0   UG    0      0        0 tun0
192.168.2.0     *               255.255.255.0   U     0      0        0 eth0
link-local      *               255.255.0.0     U     1002   0        0 eth0
default         192.168.2.254   0.0.0.0         UG    0      0        0 eth0

e

[root@openvpn ~]# cat /etc/openvpn/server.conf
port 1194 #- port
proto udp #- protocol
dev tun
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
reneg-sec 0
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so /etc/pam.d/login #- Comment this line if you are using FreeRADIUS
#plugin /etc/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf #- Uncomment this line if you are using FreeRADIUS
client-cert-not-required
username-as-common-name
server 192.168.3.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"
push "route 192.168.2.0 255.255.255.0"
keepalive 5 30
comp-lzo
persist-key
persist-tun
status 1194.log
verb 3

e

client
dev tun
proto udp
remote 18.4.79.28 1194
resolv-retry infinite
nobind
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun
ca ca.crt
auth-user-pass
comp-lzo
reneg-sec 0
verb 3

Eu posso me conectar muito bem e acessar a caixa da VPN. No entanto, não consigo navegar na Web nem acessar outros dispositivos de rede local.

Eu tenho IPTables desativado. Preciso de regras de tabela de IP ou meu roteamento é desligado?

Preciso 192.168.3.0 para acessar 192.168.2.0:)

EDITAR: esqueci de mencionar, eu tenho esse conjunto;

net.ipv4.conf.default.forwarding=1

EDITAR:

Eu usei isso:

[root@openvpn ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source <SERVERIP>
[root@openvpn ~]# iptables -I INPUT 1 -p udp --dport 1194 -j ACCEPT

Eu GET:

pinging 192.168.2.5
reply from 192.168.3.1 destination host unreachable
    
por quanta 27.01.2014 / 16:17

4 respostas

5

Há duas coisas que você precisa verificar e possivelmente corrigir.

Primeiro, você precisa garantir que o encaminhamento de IP esteja ativado no kernel. O encaminhamento de IP permite que o kernel passe pacotes de uma interface para outra. Você pode verificar isso com o seguinte:

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

Se você vir um 0 em vez de um 1 , será necessário ativar o encaminhamento de IP. A maneira mais fácil e confiável é adicionar a seguinte linha a /etc/sysctl.conf (ou modificá-la se já houver uma entrada para net.ipv4.ip_forward ):

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

E, em seguida, execute sysctl -p para recarregar a configuração desse arquivo.

Em seguida, você precisará configurar IPtables para fazer a conversão de endereços de rede (NAT) nos pacotes provenientes da VPN. Caso contrário, quando esses pacotes forem enviados eth0 , qualquer dispositivo que receba os pacotes não saberá como responder (eles não têm uma rota de volta para 192.168.3.0/24 através do servidor VPN). Existem duas maneiras de configurar o NAT: NAT estático (SNAT) e Masquerade. O SNAT é recomendado quando não é esperado que o endereço IP na interface de saída ( eth0 no seu caso) seja alterado. O modo Masquerade é projetado para situações de IP dinâmico, como dial-up ou outras configurações de endereço dinamicamente atribuídas (modems a cabo, DSL, etc.). Ambos são configurados de forma semelhante, embora.

Para o SNAT, você adicionaria uma regra de IPtables ao longo das linhas de (observe, usei 192.168.2.13 porque não sei o IP que você atribuiu à eth0; você deseja alterar isso conforme apropriado):

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.2.13

Se o endereço IP na eth0 não for estático e confiável, você usaria o Masquerade, que se pareceria com:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    
por 27.01.2014 / 17:37
2

Você precisa de uma regra iptables para os clientes VPN acessarem a rede.

Primeiro, certifique-se de que seu sistema permita NAT:

# Setup sysctl to enable NAT.
echo "# Allowing nat translation for VPN clients.
net.ipv4.conf.default.forwarding=1
net.ipv4.ip_forward=1" > "/etc/sysctl.d/openvpn.conf"
# load new sysctl config.
command sysctl -p "/etc/sysctl.d/openvpn.conf" > '/dev/null'

Em seguida, instale a regra NAT iptables para a rede VPN:

CURRENT_IP_RANGE="192.168.2"
command iptables -t nat -C POSTROUTING -s "${CURRENT_IP_RANGE}.0/24" \
                      -o 'eth0' -j MASQUERADE 2>'/dev/null' \
    || command iptables -t nat -A POSTROUTING -s "${CURRENT_IP_RANGE}.0/24" \
                       -o 'eth0' -j MASQUERADE

Essas regras são um extrato de openvpn-tools , apresentado em Instale e configure o OpenVPN no Debian , um script de gerenciamento OpenVPN e como eu escrevi.

Certifique-se também de ter um servidor DNS acessível a partir dos seus clientes VPN. Uma resposta simples é o OpenDNS (8.8.8.8). Uma solução mais complexa, mas que pode ser melhor, é instalar o Bind no servidor (essa é a solução usada pelo openvpn-tools).

openvpn-tools pode ser de seu interesse, já que fornece exportações de configuração de clientes para vários sistemas e automatiza a configuração de novas redes VPN.

EDIT para o servidor OpenVPN 2.xe 1.5 cliente

Veja: O OpenVPN lança notas .

Para obter o OpenVPN 2.0 para falar com as versões 1.5 / 1.6, coloque isso no arquivo de configuração 1.x:

tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
key-method 2

Para uso de TLS, o método-chave 2 é agora o padrão.

    
por 27.01.2014 / 17:06
2

Não sei se você está usando o AWS, mas certifique-se de desativar a verificação de destino / origem em qualquer instância do AWS que possa estar usando para executar isso.

Clique com o botão direito na instância, passe o mouse sobre a Rede e, em seguida, deve haver uma opção lá.

Se isso não ajudar você, espere que ajude alguém.

    
por 18.11.2015 / 17:50
0

Na sua situação, você deve tentar usar o roteamento padrão em vez de usar o NAT (entre a rede interna e a rede openvpn). NAT deve ser sua última opção.

O "edge router" (provavelmente o seu CPE) (entre a sua rede interna e o resto da internet) precisa enviar os pacotes para os nós da VPN (em 192.168.3.0/24) para o servidor Open. Você precisa adicionar uma rota como essa no roteador de borda / CPE:

# This is the Linux command, find the equivalent for your router:
ip route add 192.168.3.0/24 via 192.168.2.111

Agora, este roteador pode ser um roteador xDSL-model + combinado fornecido pela FAI, portanto você pode não ser capaz de fazer isso.

Se você não puder fazer isso (você não pode adicionar rotas em seu roteador) e se seu roteador de borda acha que seu ambiente interno é 192.168.0.0/16 (ou pelo menos contém 192.168.3.0/34) você pode configurar um proxy ARP em eth0 para os nós da VPN na rede principal:

echo 1 > /proc/sys/net/ipv4/conf/$xx/proxy_arp

com x = eth0, x = tun0, x = all (eu realmente não sei em qual interface você deve definir esta opção).

Esta idéia é que o seu servidor OpenVPN irá responder as solicitações ARP no eth0 netrwork para os nós na VPN. Só funcionará se o seu roteador achar que 192.168.3.0/24 está na rede interna: por outro lado, ele não enviará solicitações ARP na rede interna.

    
por 28.01.2014 / 02:01