Používám server OpenVPN běžící na routeru nainstalovaném s DD-WRT a používám jej ke směrování veškerého provozu přes server VPN. Připojuji se k němu z několika zařízení:notebook s Windows, zařízení Android a linuxové stroje. Problém, který mám nyní, je nedávný a dříve vše fungovalo dobře. Tento problém se vyskytuje pouze na klientských počítačích s linuxem (ubuntu 16.04). Klient ubuntu nezíská adresy DNS serverů automaticky. Po nějakém průzkumu jsem zjistil, že bych měl na konec konfigurace klienta přidat následující:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
To nepomohlo, takže jsem přidal také:
dhcp-option DNS a.b.c.d
dhcp-option DNS e.f.g.h
IP jsou převzaty z routeru a díky tomu věci fungují. Doposud stačilo mít v konfiguraci klienta „redirect-gateway def1“.
Nelíbí se mi toto řešení přidání příkazů „dhcp-option DNS“, protože musím sledovat jakékoli změny serveru DNS. Existuje nějaký způsob, jak se zbavit přidání možnosti „dhcp-option DNS“?
Přijatá odpověď:
Měl jsem stejný problém, ale podařilo se mi ho vyřešit pomocí následujícího hacku:
Místo up /etc/openvpn/update-resolv-conf
Vytvořil jsem soubor s názvem up.sh v /etc/openvpn.
Spusťte příkaz sudo gedit /etc/openvpn/up.sh
a vložte následující:
#! /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
Uložte jej a spusťte sudo chmod +x /etc/openvpn/up.sh
Poté vytvořte další soubor /etc/openvpn/down.sh
a vložte do něj následující
#! /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"
Uložte jej a spusťte sudo chmod +x /etc/openvpn/down.sh
Nyní odstraňte řádky:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
A nahraďte je:
script-security 2
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh