NetworkManager ไม่เปลี่ยนแปลง /etc/resolv.conf หลังจาก openvpn dns push


22

ฉันมีปัญหาซึ่งเป็น "NetworkManager ไม่ได้อัปเดต/etc/resolv.confหลังจากการเชื่อมต่อ openvpn กับการกำหนดค่าดัน DNS"

นี่คือการกำหนดค่าเซิร์ฟเวอร์ 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

ในขณะที่คุณสามารถเห็นมันเป็นตัวอย่างการตั้งค่า basicaly ด้วยการปรับเล็กน้อย

ตอนนี้ ..

บนเครื่องของฉัน (ไคลเอนต์ 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

ปัญหาอยู่ที่ไหน

(ฉันมีการตอบสนองจากผู้ใช้ Windows กับไคลเอนต์ openvpn ว่า DNS ของเขาทำงานได้ดีดังนั้นมันจึงเป็นปัญหาด้านข้างของฉัน

ตกลงตอนนี้ฉันมีการตอบสนองอื่น (หลังจากฉันเริ่มบริการ openvpn ทางฝั่งเซิร์ฟเวอร์) - มันไม่ทำงาน

ฉันต้องบอกว่ามันใช้งานได้เมื่อวานนี้บนเครื่องของฉันเหมือนกัน .. มันจะเป็นอะไร? )

แก้ไข: โอเคฉันได้รับการตอบกลับจากผู้ใช้ Windows คนอื่น (เป็นผู้ใช้รายเดิม) - มันใช้งานได้แล้ว ดังนั้น .. ฉันเดาว่ามันเกิดจากการรีสตาร์ท openvpn และความล่าช้าบางอย่างกับมัน ฉันไม่ได้ทำอะไรเลยตั้งแต่นั้นมา ดังนั้นเรากลับไปที่เครื่องของฉัน

ฉันยังตรวจสอบด้วยว่าtun0ข้อความแปลกประหลาดปรากฏขึ้นเมื่อวานนี้และเมื่อวานนี้ก็ใช้งานได้ หรือฉันอาจเพิ่มรายการresolv.confด้วยตัวเอง? ฉันจำไม่ได้ ..


ฉันได้เห็นสิ่งนี้เกิดขึ้นในระบบที่เปิดใช้ selinux และไฟล์ resolv.conf มีบริบทความปลอดภัย selinux ไม่ถูกต้อง การเรียกใช้ restorecon เพื่อเรียกคืนบริบทความปลอดภัยในไฟล์นั้นแก้ไขปัญหาได้ PS: มันเป็น resolv.conf ไม่ใช่
resol.conf

ใส่ความสนใจโดยเฉพาะ/etc/NetworkManager/NetworkManager.conf: uncomment และมีความdns=dnsmasq managed=trueนอกจากนี้คุณยังอาจได้รับผลกระทบจากข้อผิดพลาด # 1294899 การนำเข้าการเชื่อมต่อ VPN ที่บันทึกไว้ได้ถูกใช้งานไม่นานมานี้แม้จะมีการเชื่อมต่อ VPN ที่ "รายงานแล้ว" ตรวจสอบการตั้งค่า VPN ของคุณ: ใส่ชื่อโปรโตคอล ( :tcpหรือ:udp) ในGatewayช่อง ตรวจสอบการตั้งค่าขั้นสูงโดยเฉพาะอย่างยิ่งและPort number LZO compressionตรวจสอบบันทึก จบด้วยการทดสอบการรั่วไหลของ DNS
KrisWebDev

คำตอบ:


23

สิ่งนี้ใช้ได้กับฉัน: 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 เพื่อเริ่มต้นด้วยตนเอง

อย่างไรก็ตามตัวจัดการเครือข่าย Ubuntu ไม่ได้เป็นเช่นนี้ มันเป็นปัญหาแล้ว: https://bugs.launchpad.net/ubuntu/+source/openvpn/+bug/1211110


4
อย่าลืมเรียกใช้ openvpn ด้วย --script-security 2
kol

2
หรือใส่script-security 2ในไฟล์ปรับแต่งไคลเอ็นต์ openvpn ของคุณ
KrisWebDev

ฉันไม่แนะนำให้ใช้ OpenVPN โดยตรงโดยไม่ต้องผ่าน Network-Manager หรือคุณอาจพบข้อผิดพลาด # 691723 ไคลเอ็นต์ OpenVPN ละเว้น DNSซึ่งไม่มีวิธีแก้ไข ในกรณีของฉันตัวจัดการเครือข่ายเขียนทับ resolvconf หลังจากupสคริปต์ถูกเปิดใช้ ... # echo "nameserver 208.67.220.220" | /sbin/resolvconf -a "tun0.openvpn"หลังจากการเรียกใช้ openvpn ที่สกปรกสามารถทำงานได้ ... จนกว่ามันจะถูกเขียนทับอีกครั้ง อีกครั้งอย่าใช้ OpenVPN โดยตรง
KrisWebDev

upไม่พบคำสั่ง !!
Pardeep Jain

@KrisWebDev: นั่นเป็นความจริง แต่การใช้ OpenVPN ผ่าน NetworkManager ช่วยให้ผู้ใช้ปิดการใช้งาน (เปิดOff) การเชื่อมต่อที่ผู้ดูแลระบบอาจไม่ต้องการ
palswim

12

เหมาะกับฉันหลังจากปิดใช้งาน dnsmasq ของ NetworkManager ของตัวเอง

แก้ไข /etc/NetworkManager/NetworkManager.conf

 #dns=dnsmasq

และรีสตาร์ท NetworkManager

sudo restart network-manager

ฉันมีการเปลี่ยนแปลงจาก Bruce Li ในการตั้งค่าไคลเอนต์ของฉันแล้ว ทำการเปลี่ยนแปลงนี้และแก้ไขปัญหา [Ubuntu 15.10]
TheDauthi

1
เวทมนตร์ชนิดใดกันนี่คืออะไร? dnsmasq กำลังทำอะไรอยู่
GuySoft

สิ่งนี้ใช้ได้กับฉันใน Ubuntu รุ่นต่าง ๆ ฉันไม่เข้าใจสิ่งที่ dnsmasq ทำ แต่แสดงความคิดเห็นในบรรทัดนั้นจาก NetworkManager.conf อย่างน่าอัศจรรย์แก้ปัญหาสำหรับการเชื่อมต่อ VPN เช่นเดียวกับการเชื่อมต่อ Wi-Fi
Simón

สิ่งนี้ทำงานสำหรับฉันที่ใช้ Linux Mint 18 แม้ว่าฉันจะต้องรีสตาร์ทเครื่องเพราะ sudo รีสตาร์ทเครือข่าย - ผู้จัดการล้มเหลวด้วยข้อผิดพลาด คำตอบที่ยอมรับไม่ได้ผลสำหรับฉัน
trebormf

ในข้อผิดพลาดการขว้างปา restarte ข้อผิดพลาดrestart: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
Pardeep Jain

2

ในที่สุดก็ใช้งานได้ (กับปลั๊กอิน 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 ทั้งหมดจะถูกนำไปยังเซิร์ฟเวอร์ DNS ที่จัดหาโดย VPN โดยไม่มีการจัดการใด ๆ กับสคริปต์ dnsmasq, สคริปต์ตัวช่วยขึ้น / ลง / ส่ง


งานนี้ 10x
Roman M

1

เป็นไปได้ที่จะผลักดันการตั้งค่า DNS ใน OpenVPN เช่นเดียวกับที่คุณมีในการกำหนดค่าของคุณมันจะทำในการกำหนดค่าเซิร์ฟเวอร์ด้วยบรรทัดต่อไปนี้:

push "dhcp-option DNS 10.20.30.40"

มันใช้งานได้ดีเกินกว่าที่ฉันจะใช้กับ Windows GUI ได้ แต่มันก็ต้องใช้ระบบลีนุกซ์นิดหน่อย สำหรับการเชื่อมต่อกับเครือข่ายในบ้านของฉัน (โดยใช้ Fedora 18 ในปัจจุบัน) ฉันใช้สคริปต์โดย gronke บน GitHub ( https://github.com/gronke/OpenVPN-linux-push ) เพื่อทำให้กระบวนการอัปเดตอัตโนมัติ

หากต้องการใช้สคริปต์เหล่านี้ฉันได้เพิ่มสิ่งต่อไปนี้ในไฟล์ไคลเอนต์ 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

เหตุผลที่คุณต้องการdns=dns?
วัง

นั่นจะเป็นคำถามสำหรับ Gronke ฉันคิดว่ามันแปลก ๆ เช่นกัน นับตั้งแต่เขียนความคิดเห็นของฉันฉันได้ย้ายไปใช้การปรับตัวของสคริปต์นี้ที่ไม่ได้ใช้ตัวแปร 'dns' เลย ฉันไม่ได้สังเกตการเปลี่ยนแปลงใด ๆ ในพฤติกรรมเนื่องจากการละเว้น
Gadgeteering

1

มีความเป็นไปได้ที่จะทำให้ 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; ควรเรียกใช้งานได้และเป็นเจ้าของโดย root มันอ่านการกำหนดค่า NetworkManager vpn ทั้งหมดที่สามารถค้นหาและเขียนใหม่/etc/resolv.confด้วยเนมเซิร์ฟเวอร์ที่เข้าถึงได้ที่พบ มันไม่ได้เขียนdomainและsearchบรรทัด; แต่จะช่วยให้ลืมเกี่ยวกับข้อผิดพลาด NetworkManager

ฉันใช้ Ubuntu 16.04 ใช้งานได้


0

OpenVPN ไม่สามารถผลักดันการตั้งค่า DNS ในขณะนี้ คุณจะต้องเปลี่ยน /etc/resolv.conf ด้วยตนเองเพื่อให้ตรงกับเซิร์ฟเวอร์ DNS ของคุณ (ปลอดภัย) ฉันเพิ่งเรียกใช้บริการ BIND9 บนเครื่องเดียวกับ Access Server ของฉันและชี้ไปที่ผ่านช่องสัญญาณ ใช้ที่อยู่ IP ในเครื่องของคุณเช่น 192.168.1.110

โชคดี!

นิล


ด้วยคำตอบจาก Bruce Li, /etc/resolv.conf จะได้รับการแก้ไขโดยอัตโนมัติ
greuze

0

ฉันมีไคลเอนต์ OpenSUSE ที่ไม่ได้ใช้resolvconfหรือไม่systemd-networkdแต่ฉันสามารถแก้ไขสคริปต์ทั่วไปupdate-resolv-confเพื่อทำงานกับnmcliคำสั่งของ NetworkManager :

#!/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และsearch(การค้นหา DNS) โดยอัตโนมัติเมื่อสิ้นสุดการเชื่อมต่อ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.