Obtenha acesso a serviços fora da VPN durante o tunelamento do OpenVPN Access Server

1

Eu tenho dois VPS com um no qual eu instalei o OpenVPN Access Server e o vpn client no segundo. Quando conecto o cliente ao OpenVPN AS, não consigo acessar o apache que está instalado no cliente, a partir de seu endereço IP público. Meu desejo é disponibilizar alguns serviços como o apache e o postfix a partir da Internet pública no servidor cliente, enquanto o tunelamento de outros serviços instalados na máquina. Como posso fazer isso?

Aqui está o conteúdo do meu /etc/iproute2/rt_tables

#  
# reserved values  
#  
255 local  
254 main  
253 default  
0   unspec  
#  
# local  
#  
#1  inr.ruhep
1 inet  

Quando o cliente está desconectado, ip route show fornece:

default via <router_ip>  dev <ext_if>  
<netw_addr> via <router_ip>  dev <ext_if>  
<netw_addr> dev <ext_if>  proto kernel  scope link  src <public_ip>  

Quando o cliente está conectado, ip route show fornece:

0.0.0.0/1 via <private_router_ip> dev <vpn_if>  
default via <router_ip>  dev <ext_if>  
128.0.0.0/1 via <private_router_ip> dev <vpn_if>  
<vpn_addr> dev <vpn_if>  proto kernel  scope link  src <private_ip>  
<vpn_server_public_ip> via <router_ip>  dev <ext_if>  
<netw_addr> via <router_ip>  dev <ext_if>  
<netw_addr> dev <ext_if>  proto kernel  scope link  src <public_ip>  

Quando o cliente está conectado, ip addr show fornece

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: <ext_if>: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet <public_ip>/<netmask> brd <ext_broadcast_ip> scope global <ext_if>
       valid_lft forever preferred_lft forever
    inet6 XXXX:XXXX:XXXX:XXXX::XX scope global 
       valid_lft forever preferred_lft forever
    inet6 XXXX::XX:XXXX:XXXX:XXXX/XX scope link 
       valid_lft forever preferred_lft forever
18: <vpn_if>: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet <private_ip>/<netmask> brd <private_broadcast_ip> scope global <vpn_if>
       valid_lft forever preferred_lft forever
    
por Edouard HINVI 06.06.2016 / 21:33

2 respostas

0

Use o roteamento de políticas no lado do cliente para fazer isso.

Roteamento de políticas

Exemplo de serviço http de roteamento de política (porta 80) via internet:

echo "1 inet" >> /etc/iproute2/rt_tables

Adicionar rota padrão à tabela de roteamento inet

ip route add default via <router_ip> dev <if> table inet
  • <if> : substitua pelo nome da interface, diretamente conectado à Internet (por exemplo, eth0 )
  • <router_ip> : substitua pelo IP do roteador (gateway), na sub-rede da Internet. Este é o roteador definido como gateway padrão, enquanto o servidor cliente não está conectado via VPN. Para obter esse IP, desconecte / feche o cliente VPN e digite: ip route show | grep default

Adicione uma regra de roteamento para enviar tudo marcado com fwmark 0x1 para a tabela de roteamento inet

ip rule add from all fwmark 0x1 table inet

Marcando pacotes com iptables para o roteamento de políticas

Marque os pacotes que têm a porta 80 como destino na tabela MANGLE (repita a linha ... --dport 80 ... para qualquer outro serviço / porta).

iptables -t mangle -F
iptables -t mangle -A PREROUTING -i <if> -p tcp --dport 80 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT -m connmark --mark 0x1 -j MARK --set-mark 0x1
  • <if> : substitua pelo nome da interface, diretamente conectado à Internet (por exemplo, eth0 )

Estas regras fazem o seguinte:

  1. Limpe a tabela mangle (necessária apenas para limpar as regras definidas anteriormente)
  2. MARK pacotes de entrada na interface externa para uma porta específica (80)
  3. Defina o MARK do pacote inicial (regra anterior) como o valor de CONNMARK ( conntrack mark ) para todos os pacotes da conexão.
  4. Restaurar o CONNMARK na cadeia OUTPUT .
  5. MARK de pacotes de saída na cadeia OUTPUT em que a conexão CONNMARK é 0x1 . Esse MARK pode ser usado para corresponder pacotes no roteamento de políticas com fwmark 0x1 .
por 06.06.2016 / 23:31
0

Eu finalmente resolvi meu problema. Aqui está como eu fiz isso. Nas configurações de administrador da web do OpenVPN Access Server, na seção Roteamento das Configurações da VPN, eu verifiquei

No

para pergunta

"Should client Internet traffic be routed through the VPN ?"

Em seguida, voltei no lado do cliente e limpei todas as regras anteriores adicionadas na tabela mangle. Então veio a mágica! Agora posso me conectar à minha VPN enquanto meu apache ainda está disponível para o público.

    
por 10.06.2016 / 10:49