跳转到主要内容

VPN DNS Helper

项目描述

VPN DNS Helper

此工具允许通过动态调整dnsmasq配置,让本地DNS服务器与企业VPN DNS服务器共存。

描述

如果您想在Linux系统上设置一个分割DNS企业VPN,而该系统本身属于一个具有自有DNS服务器的先进本地网络环境,您可能会遇到一个 不愉快的问题:一旦建立VPN连接,您就无法解析本地系统/服务,因为VPN 覆盖了本地nameserver,使用了 公司VPN nameserver

一个简单的解决方案是将本地系统添加到 /etc/hosts 中,但如果有很多,或者它们经常变化怎么办?

这里提供了一个更好的解决方案:在需要访问企业VPN的系统(vpn系统)上,我们将 dnsmasq 作为localhost的解析器,并指示 dnsmasq 仅使用VPN nameserver解析VPN目标。即使您的企业DNS使用带有私有子域的公共域名,这也应该有效。

先决条件

vpn系统 上安装 dnsmasq,使其在VPN启动时(例如,由NetworkManager触发)更改nameserver不进入 /etc/resolv.conf 而是进入另一个文件(例如,/run/dnsmasq-resolvers.conf)。我们不会直接将此文件提供给 dnsmasq,而是动态调整 dnsmasq 配置文件(例如,/etc/dnsmasq.d/vpndnshelper.conf)。

在SUSE系统中,网络配置是通过netconfig完成的。为了满足我们的特定需求,请检查/调整/etc/sysconfig/network/config

NETCONFIG_DNS_POLICY="auto"
NETCONFIG_DNS_FORWARDER="dnsmasq"
NETCONFIG_DNS_FORWARDER_FALLBACK="no"
NETCONFIG_DNS_STATIC_SEARCHLIST=""
NETCONFIG_DNS_STATIC_SERVERS=""

安装

创建一个名为/etc/dnsmasq.d/vpndnshelper.conf的配置文件。

# force primary interface
interface=lo
bind-interfaces
domain-needed

# disable dhcp
no-dhcp-interface=

# VPN DNS server
#server=/vpndomain.tld/othervpn.tld/12.34.56.78
# VPN DNS revres

# local DNS server
server=12.34.56.78

在此文件中,VPN DNS注释之间的部分将动态调整。需要正确设置VPN域名和本地服务器。在启动VPN之前,最好保持VPN DNS服务器禁用。

可以通过环境变量更改/run/dnsmasq-forwarders.conf/etc/dnsmasq.d/vpndnshelper.conf的路径,以及dnsmasq重启命令。有关更多可配置性,请参阅vpndnshelper --help

安装检查之后

在重启VPN系统后,/etc/resolv.conf不应该包含任何nameserver条目。这将迫使解析器通过localhost进行解析,由dnsmasq处理。/run/dnsmasq-forwarders.conf应只包含本地nameserver,必须手动将本地DNS服务器分配到/etc/dnsmasq.d/vpndnshelper.conf中。

操作

当VPN隧道建立时,netconfig会将VPN nameserver以更高的优先级添加到/run/dnsmasq-forwarders.conf中。我们将监视此文件的任何更改,调整/etc/dnsmasq.d/vpndnshelper.conf并重启dnsmasq

当VPN启动时,我们将重写VPN DNS server=行。如果提供了多个VPN nameserver,则第一个server=行用作所有条目的模板,并删除注释。

当VPN关闭时,server=条目将再次被注释掉。

问题和注意事项

我们使用pyinotify监视/run/dnsmasq-forwarders.conf的文件系统更改。在开发过程中,我们注意到IN_CLOSE_WRITE和文件mtime更改之间存在竞争。

另一种从VPN状态变化中获取通知的选项是dbus,但这将使我们对NetworkManager的依赖性更强,并带来自己的问题。

目前,我们依赖于在启动时带有拆毁的VPN隧道来收集本地nameserver。如果您需要在运行时重启vpndnshelper,请首先拆毁VPN隧道。vpndnshelper将在重启时重置VPN DNS服务器,但无法在打开的VPN隧道中跟上当前状态。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

vpndnshelper-0.0.3.tar.gz (14.6 kB 查看散列)

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面