ด้วย systemd-networkd ให้ดำเนินการตามการเปลี่ยนแปลงการกำหนดค่าเครือข่าย


10

ฉันเปลี่ยนจาก Debian's ifupdownไปsystemd-networkdเป็นและมันก็ใช้ได้ดี สิ่งที่ขาดหายไปอย่างหนึ่งก็คือทุกครั้งที่มีการเปลี่ยนแปลงเครือข่ายฉันต้องการโทรหาkillall -ARLM tincเพื่อที่ VPN ของฉันจะทำงานได้ทันเวลา

ไม่systemdหรือsystemd-networkdให้การทำงานดังกล่าวหรือไม่ ฉันจะใช้มันอย่างไร

คำตอบ:


3

ฉันกำลังใช้networkd-dispatcherงานกิจกรรมหลังจากเปลี่ยนสถานะอินเทอร์เฟซ:

Networkd-dispatcher เป็น dispatcher daemon สำหรับการเปลี่ยนแปลงสถานะการเชื่อมต่อของ systemd-networkd daemon นี้คล้ายกับ NetworkManager-dispatcher แต่มีข้อ จำกัด มากขึ้นในประเภทของเหตุการณ์ที่รองรับเนื่องจากลักษณะที่ จำกัด ของ systemd-networkd

เชื่อมโยงไปยังGitlab


ซึ่งรวมอยู่ใน Debian 10 (Buster)
John Eikenberry

2

Tinc ควรได้รับการอัพเดตเป็น systemd unit แทนที่จะส่งสัญญาณโดยตรง เพื่อให้บรรลุนี้หนึ่งในความต้องการของการกำหนดค่าแฟ้มหน่วยของพวกเขาจะถูกล่ามโซ่ไว้กับที่เหมาะสมRequire=, Before=และAfter=เส้นใน[Unit]ส่วน ตรวจสอบให้แน่ใจด้วยว่าคุณได้ตั้งค่าWantedBy=บริการเครือข่ายที่ถูกต้องแล้ว (เช่น. WantedBy={ network.target, network-online.target, network-pre.target} แทนmulti-user.target)

การทำเช่นนี้จะทำให้สามารถดำเนินการsystemctl restart systemd-networkd.serviceเพื่อรีสตาร์ทเครือข่ายของคุณ รวมนี้กับsystemd-resolvd, udev/ dbus(บวกwpa_supplicant@nic.serviceเมื่อ WiFi) และเครือข่ายของคนเพิ่งทำงาน

ให้แน่ใจว่าได้อ่านบทความเกี่ยวกับการเปลี่ยนไปใช้ systemd-networkdและหน่วย dependancies นี่เป็นวิธีการส่งสัญญาณไปยังsystemd.serviceหน่วยงานของคุณผ่านsystemctl killคำสั่งตามที่ระบุไว้ในsystemd สำหรับคำแนะนำของผู้ดูแลระบบ


ฉันไม่ทำตามจริงๆ ดังนั้นหาก tinc ทำงานเป็นบริการ systemd ฉันสามารถใช้systemctl killเพื่อส่งสัญญาณ แต่ฉันไม่เห็นวิธีที่จะทำให้เกิดการเปลี่ยนแปลงการกำหนดค่าเครือข่าย
Joachim Breitner

คุณจะไม่ใช้การส่งสัญญาณของ systemd เพียงเป้าหมายและการพึ่งพาความสัมพันธ์ ดังนั้นเมื่ออินเทอร์เฟซเครือข่ายของคุณขึ้นสัญญาณนี้ (ภายในถึง systemd) การพึ่งพาอื่น ๆ ในเวลาnetwork.targetนั้นnetwork-online.targetเพื่อเริ่มหน่วย ดังนั้นเพียงแค่มีtinc.serviceรวมRequires=systemd-networkd.serviceและWantedBy=network-online.targetแล้วเมื่อ systemd-networkd kicks ปิดที่จะนำขึ้นเฟซ NIC และถังสร้างที่อยู่ IP แล้วส่งสัญญาณไปยัง Tinc จะเริ่มต้นหรือเริ่มต้นใหม่ได้ตามต้องการ
Dwight Spencer

ฉันก็ไม่สามารถหาวิธีที่จะเริ่มต้นบริการเช่นกันเพราะ network-online.target ไม่หยุดตัดการเชื่อมต่อ (ควรยื่นรายงานข้อผิดพลาดสำหรับสิ่งนี้จริง ๆ ... ) ฉันใช้สคริปต์/etc/NetworkManager/dispatcher.d/ที่มีcase "$2" in up|connectivity-change) if /usr/bin/nm-online -qx; then systemctl reload autossh.service fi;; esac
eMPee584

1
ฉันพบว่าคุณเชื่อมโยงกับบทความที่เขียนโดยบุคคลที่คุณกำลังตอบคำถามอยู่ :) แน่นอนว่ามันมีประโยชน์สำหรับผู้อ่านในภายหลังของคำตอบนี้ แต่ก็ยังตลก
Wildcard

1

ไม่สามารถทำได้ในขณะนี้ อย่างไรก็ตามคุณสามารถใช้systemd-networkd-wait-online.serviceเป็นการพึ่งพาเมื่อบูตเพื่อกำหนดค่า tinc ใหม่ จากประสบการณ์ของฉัน tinc จะตอบสนองอย่างรวดเร็วต่อการเปลี่ยนแปลงในการกำหนดค่าเครือข่าย อย่างน้อยใน linux มันสามารถใช้ rtnetlink เพื่อฟังการเปลี่ยนแปลงอินเตอร์เฟส

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