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的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 7abdd838d5abf10ab52927663aa24a458b94484f00d8fe1ca9291079ee5441ca |
|
MD5 | 85726d4eaef85586de4d30f9df86c359 |
|
BLAKE2b-256 | 61aefef80bdd71ef2fbf5d3f2e4b5daa99a773b86458b313f8fc0803bd7c6f6f |