Gab*_*cze 5 domain-name-system windows-7 openvpn tunnel
我正在尝试通过配置将 DNS 推送到带有 OpenVPN 服务器的客户端:
push "dhcp-option DNS 192.168.x.x"
Run Code Online (Sandbox Code Playgroud)
它运行良好,但我真正需要的是在 VPN 连接期间我不想使用我的主要解析器,客户端应该只使用服务器提供的 DNS。可以通过 push redirect-gateway来完成,但我不想通过 VPN 将来自客户端的所有连接建立隧道,只通过特定网络。
有没有可能以某种方式做到这一点?
Linux 客户端可以使用脚本,在 Windows 上我不确定
// 编辑:抱歉,我发布此内容时没有看到 Windows 部分。下面是关于linux的。
前段时间我在使用 openvpn 和 Linux 客户端时遇到了这个问题。但是 resolvconf 给我带来了额外的困难,将推送的 dhcp-options直接写入本地 resolv.conf 文件,并且在与 VPN 断开连接后无法恢复旧的名称服务器。所以我放弃了,制作了两个小 bash 脚本来处理 vpn 连接/断开连接上的 resolv.conf 文件。(当然,这些脚本必须安装在每个客户端上,因此它不是通用的解决方案。)
up-script 将您的常规名称服务器定义备份到安全位置,然后用收到的 dhcp-option 中的名称覆盖它们。向下脚本只是将常规文件移回原位。
附加到您的 VPN 连接配置
script-security 2
up /etc/openvpn/dns.up.sh
down /etc/openvpn/dns.down.sh
Run Code Online (Sandbox Code Playgroud)
dns.up.h
#!/bin/bash
mv /etc/resolv.conf /etc/resolv.conf.novpn
for optionname in ${!foreign_option_*} ; do
option="${!optionname}"
echo $option
part1=$(echo "$option" | cut -d " " -f 1)
if [ "$part1" == "dhcp-option" ] ; then
part2=$(echo "$option" | cut -d " " -f 2)
part3=$(echo "$option" | cut -d " " -f 3)
if [ "$part2" == "DNS" ] ; then
IF_DNS_NAMESERVERS="$IF_DNS_NAMESERVERS $part3"
fi
if [ "$part2" == "DOMAIN" ] ; then
IF_DNS_SEARCH="$IF_DNS_SEARCH $part3"
fi
fi
done
R=""
for SS in $IF_DNS_SEARCH ; do
R="${R}search $SS
"
done
for NS in $IF_DNS_NAMESERVERS ; do
R="${R}nameserver $NS
"
done
echo -n "$R" > /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
dns.down.sh
#!/bin/sh
mv /etc/resolv.conf.novpn /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)