Estoy usando un servidor OpenVPN que se ejecuta en un enrutador instalado con DD-WRT y lo estoy usando para enrutar todo el tráfico a través del servidor VPN. Me estoy conectando desde varios dispositivos:computadora portátil con Windows, dispositivos Android y máquinas Linux. El problema que tengo ahora es reciente y antes todo funcionaba bien. Este problema ocurre solo en las máquinas cliente con Linux (ubuntu 16.04). El cliente de ubuntu no obtiene las direcciones del servidor DNS automáticamente. Después de investigar un poco, descubrí que debo agregar lo siguiente al final de la configuración del cliente:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Esto no ayudó, así que también agregué:
dhcp-option DNS a.b.c.d
dhcp-option DNS e.f.g.h
Las IP se toman del enrutador y hace que todo funcione. Hasta ahora era suficiente tener "redirect-gateway def1" en la configuración del cliente.
No me gusta esta solución de agregar los comandos "dhcp-option DNS" porque tengo que estar atento a cualquier cambio en el servidor DNS. ¿Hay alguna forma de deshacerse de agregar la opción "dhcp-option DNS"?
Respuesta aceptada:
Tuve el mismo problema pero logré resolverlo usando el siguiente truco:
En lugar de up /etc/openvpn/update-resolv-conf
Creé un archivo llamado up.sh en /etc/openvpn.
Ejecute el comando sudo gedit /etc/openvpn/up.sh
y pega lo siguiente:
#! /bin/bash
DEV=$1
if [ ! -d /tmp/openvpn ]; then
mkdir /tmp/openvpn
fi
CACHE_NAMESERVER="/tmp/openvpn/$DEV.nameserver"
echo -n "" > $CACHE_NAMESERVER
dns=dns
for opt in ${!foreign_option_*}
do
eval "dns=${$opt#dhcp-option DNS }"
if [[ $dns =~ [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3} ]]; then
if [ ! -f /etc/resolv.conf.default ]; then
cp /etc/resolv.conf /etc/resolv.conf.default
fi
cat /etc/resolv.conf | grep -v ^# | grep -v ^nameserver > /tmp/resolv.conf
echo "nameserver $dns" >> /tmp/resolv.conf
echo $dns >> $CACHE_NAMESERVER
cat /etc/resolv.conf | grep -v ^# | grep -v "nameserver $dns" | grep nameserver >> /tmp/resolv.conf
mv /tmp/resolv.conf /etc/resolv.conf
fi
done
Guárdelo y ejecute sudo chmod +x /etc/openvpn/up.sh
Luego crea otro archivo /etc/openvpn/down.sh
y pega lo siguiente en él
#! /bin/bash
echo "Restoring original nameservers"
rm -f /etc/resolv.conf
ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
echo "Done restoring nameservers cheers"
Guárdelo y ejecute sudo chmod +x /etc/openvpn/down.sh
Ahora elimina las líneas:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Y reemplácelos con:
script-security 2
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh