我试图推动DNS与configurationOpenVPN服务器的客户端:
push "dhcp-option DNS 192.168.xx"
它运行良好,但我真正需要的是,在VPN连接期间,我不想使用我的主要parsing器,客户端应该只使用服务器提供的DNS。 这可以通过push redirect-gateway来完成,但是我不想通过VPN将来自客户端的所有连接,只有特定的networking。
是否有可能做到这一点?
Linux客户端是可以的脚本,在Windows上,我不知道
使用redirect-private ,但也要添加route每个networking要通过VPN路由。
顺便说一下,其他接口上的DNS设置将停止工作,当该接口将没有路由到其DNS服务器。 这是当redirect-gateway网关从您的(W)LAN接口丢弃默认网关并通过原始GW将主机路由添加到VPN服务器IP时发生的情况。 取决于你的设置,可能是没有工作设置,你将不得不改变DNS命名,以包括内部networking的一些子域。
//编辑:对不起,我没有看到窗口部分,当我发布这个。 以下是关于linux。
前段时间我用openvpn和一个linux客户端来解决这个问题。 但resolvconf给了我一个额外的困难, 直接把dhcp -options选项写到本地的resolv.conf文件中,从vpn断开连接后,没有办法恢复旧的名称服务器。 所以我放弃了,并做了两个小bash脚本处理我的resolv.conf文件在VPN连接/断开连接。 (当然,这些脚本必须安装在每个客户端上,所以没有一个通用的解决scheme。)
向上脚本将您的常规名称服务器定义备份到安全位置,然后用接收的dhcp选项中的名称覆盖它们。 向下脚本只是将您的常规文件移回原处。
附加到您的VPN连接conf
script-security 2 up /etc/openvpn/dns.up.sh down /etc/openvpn/dns.down.sh
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
dns.down.sh
#!/bin/sh mv /etc/resolv.conf.novpn /etc/resolv.conf