这是我的 OpenVPN 服务器配置:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh4096.pem
topology subnet
server 10.224.127.0 255.255.255.0 # AKA 10.224.127.0/24
ifconfig-pool-persist ipp.txt
push "route 10.0.0.0 255.0.0.0"
push "dhcp-option DNS 10.0.9.102"
push "dhcp-option DNS 10.0.8.186"
push "dhcp-option DOMAIN dc1.lam.myname.net aws.myname.net myname.local"
keepalive 10 120
comp-lzo
max-clients 10
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
cipher AES-256-CBC
auth SHA256
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384 TLS-DHE-RSA-WITH-AES-256-CBC-SHA256 TLS-DHE-RSA-WITH-AES-128-GCM-SHA256 TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 TLS-DHE-RSA-WITH-AES-256-CBC-SHA TLS-DHE-RSA-WITH_AES-128-CBC-SHA
client-cert-not-required
username-as-common-name
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
我基本上想做以下事情:
- 使用我们的内部 DNS 服务器进行名称解析。
- 分配范围内的客户端 IP 地址
10.224.127.0/24
。 - 仅路由通过
10.0.0.0/8
VPN 链路的流量。 - 使用一些搜索域进行 DNS 查找。
- 通用强化和良好的加密。
- 使用 PAM 登录。
因此,它“基本上”可以工作,但有一些注意事项。VPN 服务器上线后,DNS 解析只能工作几秒钟,然后停止工作。无论 DNS 是否正常工作,我都可以很好地路由 TCP 数据包。
为什么 DNS 仅在连接的前几秒内有效?我做错了什么?
我计划使用的客户端是 Linux 和 OSX。我如何才能将 DNS 解析推送给它们?
答案1
由于 OpenVPN 的 DNS 推送选项仅适用于 Windows,因此我假设这是您的 VPN 客户端运行的操作系统。
这可能是因为(正如@HåkanLindqvist 提到的)某些软件修改了您的 DNS 设置。这是安全相关软件(如防病毒软件)的常见功能,因为虚假 DNS 服务器可用于网络钓鱼攻击。您必须自己找到该应用程序,如果可能,请从 OpenVPN 运行一个脚本,该脚本将在连接时禁用 DNS 保护功能。
此外,如果您使用 PAM,则需要提供来自用户空间的凭据,因此 OpenVPN 无法作为 Windows 服务运行。您是否仅运行 OpenVPN GUI 或命令行?您是否以提升的权限启动它?
如果你想在 UNIX 客户端下使用服务器提供的 DNS 地址,你需要在连接时从 OpenVPN 运行一个脚本,该脚本读取 OpenVPN 环境并将收到的值放入/etc/resolv.conf。请查看手册以供参考。另一个选项是安装域名系统在客户端本地提供--server /LOCAL_DOMAIN/LOCAL_DNS_IP
选项,这些选项将仅为所选域中的主机提供通过 VPN 隧道的名称解析。