OpenVPN 客户端未获取 DNS 信息

OpenVPN 客户端未获取 DNS 信息

我正在使用在安装了 DD-WRT 的路由器上运行的 OpenVPN 服务器,并使用它通过 VPN 服务器路由所有流量。我从多个设备连接到它:Windows 笔记本电脑、Android 设备和 Linux 机器。我现在遇到的问题是最近才出现的,以前一切都运行正常。此问题仅发生在使用 Linux(ubuntu 16.04)的客户端计算机上。ubuntu 客户端不会自动获取 DNS 服务器地址。经过一番研究,我发现我应该在客户端配置的末尾添加以下内容:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

这没有帮助所以我还添加了:

dhcp-option DNS a.b.c.d
dhcp-option DNS e.f.g.h

IP 地址取自路由器,它使一切正常运行。到目前为止,在客户端配置中拥有“redirect-gateway def1”就足够了。

我不喜欢添加“dhcp-option DNS”命令的这种解决方案,因为我必须监视 DNS 服务器的任何变化。有没有办法摆脱添加“dhcp-option DNS”选项?

答案1

我遇到了同样的问题,但设法使用以下技巧解决了它:up /etc/openvpn/update-resolv-conf我在 /etc/openvpn 中创建了一个名为 up.sh 的文件。运行命令sudo gedit /etc/openvpn/up.sh并粘贴以下内容:

#! /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

保存并运行sudo chmod +x /etc/openvpn/up.sh 然后创建另一个文件/etc/openvpn/down.sh并将以下内容粘贴到其中

#! /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"

保存并运行sudo chmod +x /etc/openvpn/down.sh

现在删除以下行:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

并将其替换为:

 script-security 2
    up /etc/openvpn/up.sh
    down /etc/openvpn/down.sh

答案2

编辑 /etc/systemd/resolved.conf - 添加 DNS 条目:

DNS=8.8.8.8 8.8.4.4

如果在建立或断开 OpenVPN 连接时丢失 DNS,请运行:

sudo systemctl restart systemd-resolved

(可能可以将其推送到您的 OpenVPN 连接的上行/下行脚本中)。

相关内容