Trình quản lý mạng không thay đổi /etc/resolv.conf sau khi openvpn dns đẩy


22

Tôi đã gặp một vấn đề là "Trình quản lý mạng không cập nhật /etc/resolv.confsau khi kết nối openvpn với cấu hình đẩy dns".

Đây là cấu hình máy chủ openvpn của tôi: ( Tôi đã thay đổi tên miền thành ABC.COM vì lý do bảo mật;) )

########################################
# 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

Như bạn có thể thấy cấu hình mẫu cơ bản của nó với rất ít điều chỉnh.

Hiện nay..

Trên máy của tôi (máy khách openvpn), tôi có thể thấy rằng dns vẫn ổn:

{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

Nhật ký openvpn ở phía máy chủ cho biết (nếu tôi hiểu chính xác) rằng DNS đã được đẩy:

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)

Nhật ký openvp về phía tôi:

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

Có vẻ như mọi thứ đều ổn.

Nhưng. Tôi /var/log/messagescũng đã kiểm tra ... và tôi thấy dòng đó:

Aug  5 17:14:01 localhost NetworkManager[761]: <warn> /sys/devices/virtual/net/tun0: couldn't determine device driver; ignoring...

ip a trả về:

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 trả về:

# 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

Vì vậy, về cơ bản mọi thứ đều hoạt động, ngoại trừ DNS bị đẩy ... Oh! Phải, và của tôi /etc/resolv.conf:

# Generated by NetworkManager
domain home
search home
nameserver 10.123.123.1

Vấn đề ở đâu?

(Tôi có phản hồi từ người dùng Windows với ứng dụng khách openvpn, rằng về phía DNS của anh ta hoạt động tốt, vì vậy đó là vấn đề về phía tôi.

Ok bây giờ tôi có một phản hồi khác (sau khi tôi khởi động lại dịch vụ openvpn ở phía máy chủ) - nó không hoạt động.

Tôi phải nói rằng nó cũng hoạt động vào ngày hôm qua trên máy của tôi .. vậy tôi đã làm hỏng cái gì đó trên máy chủ chưa? Nó có thể là gì? )

Chỉnh sửa: Được rồi, tôi đã nhận được phản hồi của người dùng Windows khác (cùng người dùng như trước) - hiện đang hoạt động. Vì vậy, tôi đoán đó là do openvpn khởi động lại và một số chậm trễ với nó. Tôi đã không làm bất cứ điều gì kể từ đó. Vì vậy, chúng tôi trở lại máy của tôi.

Tôi cũng đã theo dõi rằng tun0tin nhắn wierd đó cũng xuất hiện vào ngày hôm qua và hôm qua nó đã hoạt động. Hoặc có thể tôi đã thêm mục nhập một resolv.confmình? Tôi không nhớ .. (chết tiệt)


Tôi đã thấy điều này xảy ra trên các hệ thống có bật selinux và tệp có độ phân giải selvux có bối cảnh bảo mật selinux sai. Chạy restorecon để khôi phục bối cảnh bảo mật trên tập tin đó đã giải quyết vấn đề. PS: đó là decv.conf, không giải
quyết.conf

Đặt một sự chú ý đặc biệt đến /etc/NetworkManager/NetworkManager.conf: uncomment dns=dnsmasqvà have managed=true. Ngoài ra, bạn có thể bị ảnh hưởng bởi Lỗi # 1294899 Nhập kết nối VPN đã lưu đã bị hỏng Gần đây mặc dù có kết nối VPN "được công bố". Kiểm tra cài đặt VPN của bạn: Đặt tên giao thức ( :tcphoặc :udp) vào Gatewaytrường. Kiểm tra các cài đặt nâng cao, đặc biệt Port numberLZO compression. Cũng kiểm tra các bản ghi. Kết thúc với một bài kiểm tra rò rỉ DNS .
KrisWebDev

Câu trả lời:


23

Điều này hoạt động với tôi: http://www.softwarepassion.com/solve-dns-probols-with-openvpn-on-ub Ubuntu-box /

Bước quan trọng là thêm hai dòng cấu hình vào máy khách của bạn tệp cấu hình openvpn :

up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Cũng đảm bảo resolvconf gói được cài đặt trên máy khách, vì update-resolv-conftập lệnh đó phụ thuộc vào nó.

Nó hoạt động với dịch vụ máy khách openvpn hoặc lệnh để khởi động thủ công.

Tuy nhiên, Trình quản lý mạng Ubuntu không có điều này. Đó là một vấn đề cho đến nay: https://bugs.launchpad.net/ubfox/+source/openvpn/+bug/1211110


4
Đừng quên chạy openvpn với --script-security 2
kol

2
Hoặc cũng đặt script-security 2trong tập tin cấu hình openvpn của khách hàng của bạn.
KrisWebDev

Tôi không khuyên bạn nên sử dụng OpenVPN trực tiếp mà không thông qua Trình quản lý mạng hoặc bạn có thể phải đối mặt với Lỗi # 691723 Máy khách OpenVPN Bỏ qua DNS không có giải pháp. Trong trường hợp của tôi, Trình quản lý mạng đã ghi đè lên độ phân giải sau khi uptập lệnh được khởi chạy ... Một # echo "nameserver 208.67.220.220" | /sbin/resolvconf -a "tun0.openvpn"SAU bẩn chạy openvpn có thể thực hiện công việc ... cho đến khi nó bị ghi đè lại. Một lần nữa, không sử dụng OpenVPN trực tiếp.
KrisWebDev

uplệnh không tìm thấy !!
Pardeep Jain

@KrisWebDev: Điều đó đúng, nhưng sử dụng OpenVPN thông qua NetworkManager cho phép người dùng vô hiệu hóa (bật Off) kết nối mà quản trị viên có thể không mong muốn.
palswim

12

Hoạt động với tôi sau khi vô hiệu hóa dnsmasq của NetworkManuber.

Chỉnh sửa /etc/NetworkManager/NetworkManager.conf

 #dns=dnsmasq

và khởi động lại Trình quản lý mạng

sudo restart network-manager

Tôi đã có sự thay đổi từ Bruce Li trong cấu hình máy khách của mình. Thực hiện thay đổi này cũng đã khắc phục sự cố [Ubuntu 15.10].
TheDauthi

1
Những loại ma thuật này là? Dnsmasq đang làm gì?
GuySoft

Điều này làm việc cho tôi trong các phiên bản khác nhau của Ubuntu. Tôi thực sự không hiểu dnsmasq làm gì, nhưng bình luận dòng đó từ NetworkManager.conf giải quyết một cách kỳ diệu vấn đề cho các kết nối VPN cũng như cho các kết nối Wi-Fi.
Simón

Điều này làm việc cho tôi khi chạy Linux Mint 18, mặc dù tôi phải khởi động lại máy vì sudo khởi động lại trình quản lý mạng không thành công do lỗi. Câu trả lời được chấp nhận không làm việc cho tôi.
trebormf

khi khởi động lại lỗi ném lệnhrestart: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
Pardeep Jain

2

Cuối cùng cũng hoạt động (với plugin NetworkManager và OVPN tiêu chuẩn)

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

Trong trường hợp này khi kết nối VPN được thiết lập, tất cả các yêu cầu DNS được chuyển đến các máy chủ DNS do VPN cung cấp mà không có bất kỳ thao tác nào với dnsmasq, lên / xuống / gửi các tập lệnh trợ giúp.


tác phẩm này, 10
Roman M

1

Có thể đẩy cài đặt DNS trong OpenVPN. Giống như bạn có trong cấu hình của mình, nó được thực hiện trong cấu hình máy chủ với dòng sau:

push "dhcp-option DNS 10.20.30.40"

Điều này hoạt động ngoài cổng đối với tôi khi sử dụng Windows GUI, nhưng nó cần một chút ảnh hưởng đến các hệ thống Linux. Để kết nối với mạng gia đình của tôi (hiện tại đang sử dụng Fedora 18), tôi đã sử dụng tập lệnh của gronke trên GitHub ( https://github.com/gronke/OpenVPN-linux-push ) để tự động hóa quá trình cập nhật.

Để sử dụng các tập lệnh này, tôi đã thêm phần sau vào tệp khách OpenVPN của mình:

up /home/gadgeteering/tools/vpn/up.sh
down /home/gadgeteering/tools/vpn/down.sh

lên.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

xuống

#! /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

tại sao bạn cần dns=dns?
Vương

Đó sẽ là một câu hỏi cho Gronke, tôi nghĩ nó cũng hơi kỳ quặc. Kể từ khi viết bình luận của mình, tôi đã chuyển sang sử dụng một bộ chuyển thể của tập lệnh này mà hoàn toàn không sử dụng biến 'dns'. Tôi đã không quan sát thấy bất kỳ thay đổi trong hành vi vì thiếu sót.
Tiện ích

1

Có khả năng làm cho NetworkManager hoạt động bằng cách thay thế thủ công /etc/resolv.conf. Xin lưu ý rằng đây là một hack và không thể được coi là một giải pháp hợp lệ cho mọi tình huống.

#!/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

Kịch bản này nên được đặt dưới /etc/NetworkManager/dispatcher.d; nên được thực thi và sở hữu bởi root. Nó đọc tất cả các cấu hình vpn NetworkManager mà nó có thể tìm và viết lại /etc/resolv.confvới các máy chủ tên có thể truy cập được tìm thấy ở đó. Nó không viết domainsearchdòng; nhưng nó cho phép quên đi lỗi NetworkManager khó chịu.

Tôi sử dụng Ubuntu 16.04, nó hoạt động.


0

OpenVPN hiện không thể đẩy cài đặt DNS. Bạn sẽ phải thay đổi thủ công /etc/resolv.conf để khớp với máy chủ DNS (được bảo mật) của bạn. Tôi chỉ chạy dịch vụ BIND9 trên cùng một máy với Máy chủ truy cập của mình và trỏ đến dịch vụ đó qua đường hầm. Sử dụng địa chỉ IP cục bộ của bạn của máy đó, ví dụ 192.168.1.110

Chúc may mắn!

Jatpe


Với câu trả lời từ Bruce Li, /etc/resolv.conf sẽ tự động được sửa đổi
greuze

0

Tôi có một ứng dụng khách OpenSUSE không sử dụng resolvconf, systemd-networkdnhưng tôi có thể sửa đổi tập lệnh phổ biếnupdate-resolv-conf để hoạt động với nmclilệnh NetworkManager's :

#!/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

Nó không có downtrình xử lý vì NetworkManager tự động xóa các tham số nameserversearch(tìm kiếm DNS) khi chấm dứt kết nối.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.