ระบบแก้ไข, resolvconf.service, resolvconf และ openresolv ทำไมอะไรและอย่างไร


12

ฉันใช้ไคลเอนต์ VPN /etc/resolv.confซึ่งจะเพิ่มเซิร์ฟเวอร์ชื่อสอง การเชื่อมต่อทั้งหมดของฉันได้รับการจัดการโดย Network-Manager

ฉันต้องใช้ไคลเอนต์ VPN นี้สำหรับงาน VPN ของฉัน แต่หลังจาก Ubuntu ไปที่systemd-resolved16.10 ฉันมีปัญหากับการเชื่อมต่อและ DNS ของฉัน ดูเหมือนว่าsystemd-resolvedการเปลี่ยนแปลง/etc/resolv.confกลับไปเป็นเซิร์ฟเวอร์ชื่อเริ่มต้นด้วยเหตุผลบางอย่างซึ่งทำให้หน้าภายในไม่สามารถแก้ไขได้ ผมมองในนี้บางมากขึ้นและจบลงด้วยการแทนที่ด้วยresolvconf openresolvสิ่งนี้ช่วยได้มาก แต่ก็ยังคงsystemd-resolvedรีเซ็ต/etc/resolv.confหลังจาก VPN ใช้งานมาระยะหนึ่งแล้ว

อาจเป็นเพราะการเชื่อมต่อขึ้นหรือหลังจากนั้นไม่กี่นาทีหรือบางครั้งก็ไม่เลย จากนั้นผมก็คนพิการsystemd-resolvedและและเรียกใช้เท่านั้นsystemd resolvconf.service openresolvมันทำงานได้ดีดูเหมือนว่า

อย่างไรก็ตามนี่เป็นความสับสนอย่างมาก มีเหตุผลในการใช้งานsystemd-resolvedกับหนึ่งในคนอื่น ๆ ? มันถูกเปิดใช้งานใน Ubuntu 16.10 ดังนั้นฉันคิดว่าต้องมีเหตุผลสำหรับมัน /etc/resolv.confแต่ดูเหมือนว่าจะก่อให้เกิดการต่อสู้มากกว่า

มันจะดีมากถ้าฉันสามารถเรียกใช้operesolvและอธิบายสิ่งนี้ได้ ฉันได้อ่านมาบ้างแล้ว แต่ฉันก็ยังไม่เข้าใจว่าทำไม/etc/resolv.confมันถึงได้รับการจัดการเช่นนี้เฉพาะเมื่อฉันใช้systemdเพื่อฉันจะไม่สามารถใช้ไคลเอนต์ VPN ของฉันได้


FWIW resolvconf.service เป็นเพียงวิธีที่ systemd ดำเนินงาน resolvconf คุณใช้ไคลเอนต์ VPN คนไหน หากคุณใช้การแก้ไข systemd จะทำให้ resolv.conf เป็น symlink สำหรับ/run/systemd/resolve/resolv.confไฟล์ส่วนตัว คุณอาจต้องการลอง systemd-networkd จัดการการเชื่อมต่อของคุณ
pbhj

คำตอบ:


1

ฉันจัดการเพื่อเปลี่ยนสคริปต์ที่จัดการรายการการกำหนดค่าเหล่านี้ใน OpenVPN ใน Ubuntu (ทดสอบบน 18.04) นี่คือแพทช์สำหรับที่:

--- /etc/openvpn/update-resolv-conf.orig    2019-03-13 19:14:16.163914424 +0400
+++ /etc/openvpn/update-resolv-conf 2019-03-13 19:29:30.380420708 +0400
@@ -15,7 +15,7 @@
 #     foreign_option_3='dhcp-option DOMAIN be.bnc.ch'
 #

-[ -x /sbin/resolvconf ] || exit 0
+[ -x /usr/bin/systemd-resolve ] || exit 0
 [ "$script_type" ] || exit 0
 [ "$dev" ] || exit 0

@@ -43,16 +43,16 @@
        fi
    done
    R=""
-   [ "$SRCHS" ] && R="search $SRCHS
-"
+   for SRCH in $SRCHS ; do
+       R="${R}--set-domain=$SRCH "
+   done
    for NS in $NMSRVRS ; do
-           R="${R}nameserver $NS
-"
+       R="${R}--set-dns=$NS "
    done
-   echo -n "$R" | /sbin/resolvconf -a "${dev}.openvpn"
+   /usr/bin/systemd-resolve -i ${dev} ${R}
    ;;
   down)
-   /sbin/resolvconf -d "${dev}.openvpn"
+   echo "Doing nothing, interface disappears."
    ;;
 esac

คุณจะต้องเพิ่มรายการต่อไปนี้ในไฟล์กำหนดค่า OpenVPN ของคุณ:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

0

คุณใช้ไคลเอนต์ VPN คนไหน ฉันมีปัญหากับ OpenVPN โดยตรง แต่การติดตั้งไคลเอนต์เวอร์ชัน NM ช่วยแก้ปัญหา ส่วนใหญ่ฉันไม่สามารถป้องกันเส้นทางที่ถูกผลัก แต่นั่นเป็นปัญหาที่แตกต่างอย่างสิ้นเชิง

ประเด็นก็คือ: ไคลเอนต์ VPN ของคุณมีความรู้เกี่ยวกับวิธีการโต้ตอบกับความคิด systemd ของวิธีการจัดการบริการ DNS ฉันไม่แนะนำสิ่งนี้ แต่คุณอาจลองปิดการใช้งานบริการ resolvd ( systemctl disable systemd-resolved.service) เพื่อดูว่ามันปรับปรุงสิ่งต่าง ๆ หรือไม่ แต่ท้ายที่สุดคุณจะต้องรับลูกค้าที่เข้าใจวิธีส่งไปยัง capd ของ systemd :)

(เรือ systemd แล่นไปนานแล้วอย่ามาเปิดการอภิปรายว่าทำไมบางสิ่งถึงทำ)


ปัญหานี้ได้รับการแก้ไขในการอัพเดทไคลเอนต์ VPN มันเป็นไคลเอนต์ OpenFortiGui สำหรับงาน Fortinet VPN ของฉัน ดังนั้นคุณพูดถูกลูกค้าได้เรียนรู้ systemd! :)
Christian

0

การอัปเดตไปยังไคลเอนต์ VPN ที่ฉันใช้แก้ไข (ปุนตั้งใจ) ปัญหา มันเป็นไคลเอนต์ OpenFortiGui สำหรับ Fortinet VPN

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