我们正在开展一个研究项目,该项目涉及数百台(可能达到数千台)远程主机。每台主机都运行 OpenVPN,因此无论它们的“指定”IP 是什么,我们都可以找到它们。我们一直在使用 DynDNS 来管理它,但我们遇到了一些问题(API 薄弱/不存在、大小限制等)。
我正在考虑设置一个仅限内部的域(例如“our.stuff”,因此主机将是“site1.our.stuff”或“site3.net4.our.stuff”),我可以使用来自 OpenVPN 服务器的信息进行配置。
因为我们必须将内部 DNS 指向这台机器,所以它也必须能够路由/缓存“外部”机器的请求。我一直在尝试阅读有关“内部 DNS”、“私有”、“不可路由”的信息,但收效甚微。
摘要:需要有关内部缓存 DNS 服务器的信息。最好是开源的。如果没有,我可以编写脚本来更改 .conf 等。
答案1
我会使用 bind,它是为 DNS 根服务器提供支持的开源软件,其安全性已经过尝试和证明(我想说,每周都这样)。
配置一个具有递归功能的简单服务器和一个简单的内部域(您可以随意命名),该域将由该域提供服务。仅允许某些 IP 地址使用递归,这样做是一种很好的做法,即使您的 DNS 服务器不会暴露给互联网:
acl recurseallow { x.x.x.x; x.x.x.x; x.x.x.x; };
options {
<some other options you have already>
allow-recursion { recurseallow; };
};
Bind 还支持dynamic dns
更新,您可以使用该nsupdate
工具让 openvpn 客户端使用其名称更新名称服务器。它使用加密密钥安全地完成所有操作,效果非常好。以下是简短教程关于 nsupdate 和关于动态 DNS。
答案2
您需要的是一个既能执行“递归查询”又能对要设置的域具有权威性的 DNS 服务器。我建议忽略“内部 DNS”的概念,只需将其视为具有权威性和递归能力的常规 DNS 服务器即可。它是“内部”的,因为您只允许从您的网络访问它,例如将其放在防火墙后面或限制对它的访问,这实际上不会影响配置。
我可能会选择“BIND”,它是开源的,而且非常广泛可用,主要是因为我熟悉它。但几乎任何不是仅缓存服务器的东西都可以工作。例如,您可以使用“PowerDNS”,但不能使用其仅缓存变体“pdns-recursor”。
在 BIND 中,您需要将“allow-recursion”设置为您希望能够访问的 IP 地址列表,然后为 OpenVPN IP 设置区域。您可以使用动态 DNS 更新工具来修改区域(确保区域文件及其所在的目录可由 DNS 服务器写入 - 这是用户在此配置中遇到的 #1 问题),或者使用 shell 脚本或其他东西直接更新区域文件。
答案3
当 OpenVPN 客户端连接时,可以动态创建 DNS 条目,您可以在本地查询该条目,也可以由客户端通过 VPN 隧道进行查询。
其中一种方法可能是设置由 LDAP 后端的 DNS
http://freshmeat.net/projects/ldap2dns/
然后,你就可以在 OpenVPN 中使用前置/后置脚本来添加或修改 DNS 条目。请参阅类似示例,了解前置/后置脚本如何与 LDAP 交互
否则,您可以使用 MySQL 作为后端,使用类似的方法可能会更简单一些。