” /etc/resolv.conf
dns push가 구성된 openvpn 연결 후 NetworkManager가 업데이트되지 않습니다”라는 문제가 있습니다.
내 openvpn 서버 구성은 다음과 같습니다 ( 보안상의 이유로 도메인 이름을 ABC.COM으로 변경했습니다. )
########################################
# Sample OpenVPN config file for
# 2.0-style multi-client udp server
#
# Adapted from http://openvpn.sourceforge.net/20notes.html
#
# tun-style tunnel
port 1194
dev tun
# Use "local" to set the source address on multi-homed hosts
#local [IP address]
# TLS parms
tls-server
ca keys/ca.crt
cert keys/static.crt
key keys/static.key
dh keys/dh1024.pem
proto tcp-server
# Tell OpenVPN to be a multi-client udp server
mode server
# The server's virtual endpoints
ifconfig 10.8.0.1 10.8.0.2
# Pool of /30 subnets to be allocated to clients.
# When a client connects, an --ifconfig command
# will be automatically generated and pushed back to
# the client.
ifconfig-pool 10.8.0.4 10.8.0.255
# Push route to client to bind it to our local
# virtual endpoint.
push "route 10.8.0.1 255.255.255.255"
push "dhcp-option DNS 10.8.0.1"
# Push any routes the client needs to get in
# to the local network.
#push "route 192.168.0.0 255.255.255.0"
# Push DHCP options to Windows clients.
push "dhcp-option DOMAIN ABC.COM"
#push "dhcp-option DNS 192.168.0.1"
#push "dhcp-option WINS 192.168.0.1"
# Client should attempt reconnection on link
# failure.
keepalive 10 60
# Delete client instances after some period
# of inactivity.
inactive 600
# Route the --ifconfig pool range into the
# OpenVPN server.
route 10.8.0.0 255.255.255.0
# The server doesn't need privileges
user openvpn
group openvpn
# Keep TUN devices and keys open across restarts.
persist-tun
persist-key
verb 4
보시다시피 튜닝이 거의없는 기본 샘플 구성입니다.
지금..
내 컴퓨터 (openvpn 클라이언트)에서 dns가 정상임을 알 수 있습니다.
{17:12}/etc/NetworkManager ➭ nslookup git.ABC.COM 10.8.0.1
Server: 10.8.0.1
Address: 10.8.0.1#53
Name: git.ABC.COM
Address: 10.8.0.1
{17:18}/etc/NetworkManager ➭ nslookup ABC.COM 10.8.0.1
Server: 10.8.0.1
Address: 10.8.0.1#53
Name: ABC.COM
Address: 18X.XX.XX.71
서버 측의 openvpn 로그에 DNS가 푸시되었다는 메시지가 표시됩니다.
openvpn[13257]: TCPv4_SERVER link remote: [AF_INET]83.30.135.214:37658
openvpn[13257]: 83.30.135.214:37658 TLS: Initial packet from [AF_INET]83.30.135.214:37658, sid=3251df51 915772f3
openvpn[13257]: 83.30.135.214:37658 VERIFY OK: depth=1, C=XX, ST=XX, L=XXX, O=XXX, OU=XXX, CN=XXX, name=XXX, emailAddress=mail@ABC.COM
openvpn[13257]: 83.30.135.214:37658 VERIFY OK: depth=0, C=XX, ST=XX, L=XXX, O=XXX, OU=XXX, CN=XXX, name=XXX, emailAddress=mail@ABC.COM
openvpn[13257]: 83.30.135.214:37658 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
openvpn[13257]: 83.30.135.214:37658 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
openvpn[13257]: 83.30.135.214:37658 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
openvpn[13257]: 83.30.135.214:37658 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
openvpn[13257]: 83.30.135.214:37658 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
openvpn[13257]: 83.30.135.214:37658 [jacek] Peer Connection Initiated with [AF_INET]83.30.135.214:37658
openvpn[13257]: jacek/83.30.135.214:37658 MULTI_sva: pool returned IPv4=10.8.0.10, IPv6=(Not enabled)
openvpn[13257]: jacek/83.30.135.214:37658 MULTI: Learn: 10.8.0.10 -> jacek/83.30.135.214:37658
openvpn[13257]: jacek/83.30.135.214:37658 MULTI: primary virtual IP for jacek/83.30.135.214:37658: 10.8.0.10
openvpn[13257]: jacek/83.30.135.214:37658 PUSH: Received control message: 'PUSH_REQUEST'
openvpn[13257]: jacek/83.30.135.214:37658 send_push_reply(): safe_cap=940
openvpn[13257]: jacek/83.30.135.214:37658 SENT CONTROL [jacek]: 'PUSH_REPLY,route 10.8.0.1 255.255.255.255,dhcp-option DNS 10.8.0.1,dhcp-option DOMAIN ABC.COM,ping 10,ping-restart 60,ifconfig 10.8.0.10 10.8.0.9' (status=1)
내쪽에 openvp 로그 :
Aug 05 17:13:55 localhost.localdomain openvpn[1198]: TCPv4_CLIENT link remote: [AF_INET]XXX.XX.37.71:1194
Aug 05 17:13:55 localhost.localdomain openvpn[1198]: TLS: Initial packet from [AF_INET]XXX.XX.37.71:1194, sid=89cc981c d57dd826
Aug 05 17:13:56 localhost.localdomain openvpn[1198]: VERIFY OK: depth=1, C=XX, ST=XX, L=XXX, O=XXX, OU=XXX, CN=XXX, name=XXX, emailAddress=mail@ABC.COM
Aug 05 17:13:56 localhost.localdomain openvpn[1198]: VERIFY OK: depth=0, C=XX, ST=XX, L=XXX, O=XXX, OU=XXX, CN=XXX, name=XXX, emailAddress=mail@ABC.COM
Aug 05 17:13:58 localhost.localdomain openvpn[1198]: Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Aug 05 17:13:58 localhost.localdomain openvpn[1198]: Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Aug 05 17:13:58 localhost.localdomain openvpn[1198]: Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Aug 05 17:13:58 localhost.localdomain openvpn[1198]: Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Aug 05 17:13:58 localhost.localdomain openvpn[1198]: Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Aug 05 17:13:58 localhost.localdomain openvpn[1198]: [static] Peer Connection Initiated with [AF_INET]XXX.XX.37.71:1194
Aug 05 17:14:00 localhost.localdomain openvpn[1198]: SENT CONTROL [static]: 'PUSH_REQUEST' (status=1)
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: PUSH: Received control message: 'PUSH_REPLY,route 10.8.0.1 255.255.255.255,dhcp-option DNS 10.8.0.1,dhcp-option DOMAIN ABC.COM,ping 10,ping-restart 60,ifconfig 10.8.0.10 10.8.0.9'
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: OPTIONS IMPORT: timers and/or timeouts modified
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: OPTIONS IMPORT: --ifconfig/up options modified
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: OPTIONS IMPORT: route options modified
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: ROUTE_GATEWAY 10.123.123.1/255.255.255.0 IFACE=wlan0 HWADDR=44:6d:57:32:81:2e
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: TUN/TAP device tun0 opened
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: TUN/TAP TX queue length set to 100
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: /usr/sbin/ip link set dev tun0 up mtu 1500
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: /usr/sbin/ip addr add dev tun0 local 10.8.0.10 peer 10.8.0.9
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: /usr/sbin/ip route add 10.8.0.1/32 via 10.8.0.9
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: Initialization Sequence Completed
모든 것이 괜찮은 것 같습니다.
그러나. 나는 /var/log/messages
또한 확인했다 . 그리고 나는 그 줄을 발견했다.
Aug 5 17:14:01 localhost NetworkManager[761]: <warn> /sys/devices/virtual/net/tun0: couldn't determine device driver; ignoring...
ip a
보고:
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
link/none
inet 10.8.0.10 peer 10.8.0.9/32 scope global tun0
valid_lft forever preferred_lft forever
route -n
보고:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.123.123.1 0.0.0.0 UG 0 0 0 wlan0
10.8.0.1 10.8.0.9 255.255.255.255 UGH 0 0 0 tun0
10.8.0.9 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.123.123.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
따라서 기본적으로 DNS가 푸시되는 것을 제외하고는 모든 것이 작동합니다. 그리고 내 /etc/resolv.conf
:
# Generated by NetworkManager
domain home
search home
nameserver 10.123.123.1
문제는 어디에 있습니까?
(openvpn 클라이언트를 사용하는 Windows 사용자의 응답으로 DNS가 제대로 작동하므로 내 문제입니다.
이제 서버 측에서 openvpn 서비스를 다시 시작한 후 다른 응답이 있습니다. 작동하지 않습니다.
어제 내 컴퓨터에서도 작동한다고 말해야합니다. 서버에 무언가를 망쳤습니까? 뭐가 될수 있었는지? )
편집 :
좋아, 다른 Windows 사용자 응답 (이전과 동일한 사용자)이 있습니다. 지금 작동 중입니다. 그래서 .. 그것은 openvpn 재시작으로 인한 것으로 생각되며 약간의 지연이 있습니다. 그 이후로는 아무 것도하지 않았습니다. 그래서 우리는 내 컴퓨터로 돌아 왔습니다.
또한 그 이상한 tun0
메시지가 어제 나타나고 어제 효과가 있다는 것을 알았 습니다. 아니면 resolv.conf
혼자서 항목을 추가 했습니까? 기억이 안나 ..
답변
이것은 나를 위해 작동합니다 : http://www.softwarepassion.com/solving-dns-problems-with-openvpn-on-ubuntu-box/
중요한 단계는 클라이언트 openvpn 구성 파일에 다음 두 줄 구성을 추가하는 것입니다 .
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
또한 스크립트가 의존 resolvconf
하기 때문에 패키지가 클라이언트에 설치되어 있는지 확인하십시오 update-resolv-conf
.
openvpn 클라이언트 서비스 또는 명령과 함께 작동하여 수동으로 시작합니다.
그러나 우분투 네트워크 관리자는 그렇지 않습니다. 지금까지 문제가 있습니다 : https://bugs.launchpad.net/ubuntu/+source/openvpn/+bug/1211110
답변
NetworkManager 자체의 dnsmasq를 비활성화 한 후 저에게 효과적입니다.
편집하다 /etc/NetworkManager/NetworkManager.conf
#dns=dnsmasq
NetworkManager를 다시 시작하십시오.
sudo restart network-manager
답변
마지막으로 작동합니다 (표준 NetworkManager 및 OVPN 플러그인 사용)
nmcli -p connection modify MY_VPN_CONNECTION ipv4.never-default no
nmcli -p connection modify MY_VPN_CONNECTION ipv4.ignore-auto-dns no
nmcli -p connection modify MY_VPN_CONNECTION ipv4.dns-priority -42
이 경우 VPN 연결이 설정되면 모든 DNS 요청은 dnsmasq, 업 / 다운 / 디스패치 도우미 스크립트를 조작하지 않고 VPN 제공 DNS 서버로 보내집니다.
답변
OpenVPN에서 DNS 설정을 푸시 할 수 있습니다. 구성에서와 마찬가지로 서버 구성에서 다음 줄을 사용하여 수행됩니다.
push "dhcp-option DNS 10.20.30.40"
이것은 Windows GUI를 사용하여 문 밖에서 작동하지만 Linux 시스템에는 약간의 방해가 필요합니다. 내 홈 네트워크에 연결하기 위해 (현재 Fedora 18 사용 ) 업데이트 프로세스를 자동화하기 위해 GitHub ( https://github.com/gronke/OpenVPN-linux-push )에서 gronke의 스크립트를 사용했습니다 .
이 스크립트를 사용하기 위해 OpenVPN 클라이언트 파일에 다음을 추가했습니다.
up /home/gadgeteering/tools/vpn/up.sh
down /home/gadgeteering/tools/vpn/down.sh
up.sh :
#! /bin/bash
DEV=$1
if [ ! -d /tmp/openvpn ]; then
mkdir /tmp/openvpn
fi
CACHE_NAMESERVER="/tmp/openvpn/$DEV.nameserver"
echo -n "" > $CACHE_NAMESERVER
dns=dns
for opt in ${!foreign_option_*}
do
eval "dns=\${$opt#dhcp-option DNS }"
if [[ $dns =~ [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]; then
if [ ! -f /etc/resolv.conf.default ]; then
cp /etc/resolv.conf /etc/resolv.conf.default
fi
cat /etc/resolv.conf | grep -v ^# | grep -v ^nameserver > /tmp/resolv.conf
echo "nameserver $dns" >> /tmp/resolv.conf
echo $dns >> $CACHE_NAMESERVER
cat /etc/resolv.conf | grep -v ^# | grep -v "nameserver $dns" | grep nameserver >> /tmp/resolv.conf
mv /tmp/resolv.conf /etc/resolv.conf
fi
done
down.sh :
#! /bin/bash
DEV=$1
CACHE_NAMESERVER="/tmp/openvpn/$DEV.nameserver"
echo $CACHE_NAMESERVER
if [ -f $CACHE_NAMESERVER ]; then
for ns in `cat $CACHE_NAMESERVER`; do
echo "Removing $ns from /etc/resolv.conf"
cat /etc/resolv.conf | grep -v "nameserver $ns" > /tmp/resolv.conf
mv /tmp/resolv.conf /etc/resolv.conf
done
fi
답변
수동으로 교체하여 NetworkManager를 작동시킬 수 있습니다 /etc/resolv.conf
. 이것은 매우 해킹이므로 모든 상황에 유효한 솔루션으로 간주 될 수 없습니다.
#!/bin/bash
case "$2" in
vpn-up)
tmp=$(mktemp)
func=$(mktemp)
echo 'ping -c 1 -w 1 -q $1 > /dev/null ;
if [ 0 -eq $? ]; then echo $1; fi' > $func
grep -v "^#" /etc/resolv.conf > $tmp
grep -rl type=vpn /etc/NetworkManager/system-connections \
| xargs -n 1 sed -rne 's|dns=||p' \
| sed -re 's|;|\n|g' \
| grep -v "^\s*$" \
| xargs -n 1 bash $func \
| sed -re "s|(.*)|nameserver \1|" \
| cat - $tmp \
> /etc/resolv.conf
rm -f $tmp $func;;
vpn-down) resolvconf -u;;
esac
이 스크립트는 /etc/NetworkManager/dispatcher.d
; 실행 가능해야하며 루트가 소유해야합니다. /etc/resolv.conf
액세스 가능한 네임 서버를 찾아서 다시 작성할 수있는 모든 NetworkManager vpn 구성을 읽습니다 . 그것은 기록하지 않습니다 domain
및 search
라인; 그러나 불쾌한 NetworkManager 버그는 잊을 수 있습니다.
우분투 16.04를 사용합니다.
답변
OpenVPN은 현재 DNS 설정을 푸시 할 수 없습니다. (보안 된) DNS 서버와 일치하도록 /etc/resolv.conf를 수동으로 변경해야합니다. 방금 액세스 서버와 동일한 컴퓨터에서 BIND9 서비스를 실행하고 터널을 통해 해당 서비스를 가리 킵니다. 해당 머신의 로컬 IP 주소를 사용하십시오 (예 : 192.168.1.110).
행운을 빕니다!
벽옥
답변
resolvconf
, nor를 사용하지 않는 OpenSUSE 클라이언트가 systemd-networkd
있지만 NetworkManager의 명령 으로 작동 하도록 공통 update-resolv-conf
스크립트 를 수정할 수있었습니다 nmcli
.
#!/usr/bin/env bash
#
# Parses DHCP options from openvpn to update resolv.conf
# To use set as 'up' and 'down' script in your openvpn *.conf:
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
#
# Example envs set from openvpn:
# foreign_option_1='dhcp-option DNS 193.43.27.132'
# foreign_option_2='dhcp-option DNS 193.43.27.133'
# foreign_option_3='dhcp-option DOMAIN be.bnc.ch'
# foreign_option_4='dhcp-option DOMAIN-SEARCH bnc.local'
case $script_type in
up)
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" || "$part2" == "DOMAIN-SEARCH" ]] ; then
IF_DNS_SEARCH="$IF_DNS_SEARCH $part3"
fi
fi
done
if [ -n "$IF_DNS_SEARCH" ]; then
nmcli connection modify "${dev}" ipv4.dns-search "$IF_DNS_SEARCH"
fi
if [ -n "$IF_DNS_NAMESERVERS" ]; then
nmcli connection modify "${dev}" ipv4.dns "$IF_DNS_NAMESERVERS"
fi
nmcli connection up "${dev}" # Force NM to reevaluate the properties
;;
esac
# Workaround / jm@epiclabs.io
# force exit with no errors. Due to an apparent conflict with the Network Manager
# $RESOLVCONF sometimes exits with error code 6 even though it has performed the
# action correctly and OpenVPN shuts down.
exit 0
down
NetworkManager 는 연결 종료시 nameserver
and search
(DNS 검색) 매개 변수를 자동으로 제거하기 때문에 핸들러 가 없습니다 .