Systemd-networkd ile, ağ yapılandırması değişikliği üzerine bir eylem gerçekleştirin


10

Ben Debian en geçiş yaşıyorum ifupdownetmek systemd-networkdve çoğunlukla cezası çalışır. Eksik olan bir şey, her ağ değişikliğinde, aramak istediğim killall -ARLM tinc, böylece VPN'imin zamanında yükseleceği.

Bu tür bir işlev sağlıyor mu systemdveya systemd-networkdsağlıyor mu ? Nasıl Kullanırım?

Yanıtlar:


3

networkd-dispatcherArayüz durumu değiştikten sonra olayları çalıştırmak için kullanıyorum :

Networkd-dispatcher, systemd-networkd bağlantı durumu değişiklikleri için bir dağıtıcı arka plan programıdır. Bu arka plan programı NetworkManager dağıtıcısına benzer, ancak systemd-networkd'nin sınırlı yapısı nedeniyle desteklediği olay türlerinde çok daha sınırlıdır.

Bağlantı Gitlab


Bu Debian 10'a (Buster) dahildir.
— John Eikenberry

2

Tentür, doğrudan sinyal göndermek yerine bir systemd birimi olarak güncellenmelidir. Onların birim dosyalarını yapılandırmak için bu bir ihtiyaçları elde etmek için uygun olan zincirleme edilecek Require=, Before=ve After=çizgiler [Unit]bölümünde. Ayrıca WantedBy=ağ hizmetleri için doğru ayarları yaptığınızdan emin olun . (yani. WantedBy={ network.target, network-online.target, network-pre.target} yerine multi-user.target)

Bu, systemctl restart systemd-networkd.serviceağınızı yeniden başlatmak için bir kişinin yürütülmesini sağlar . Bu ile birlikte systemd-resolvd, udev/ dbus(artı wpa_supplicant@nic.servicene zaman wifi) ve kişinin ağ sadece çalışır.

Systemd-networkd ve birim bağımlılıklarına geçiş hakkındaki makaleleri mutlaka okuyun . Bu ayrıca , yöneticiler için sistemd'de belgelenen komut systemd.servicearacılığıyla ünitelerinize sinyal göndermenin bir yoludur.systemctl kill


Gerçekten takip etmiyorum. Eğer tentür bir systemd hizmeti olarak çalıştırılırsa systemctl kill, sinyali iletmek için kullanabilirim . Ancak bunu bir ağ yapılandırma değişikliğinde nasıl tetikleyeceğimi göremiyorum.
— Joachim Breitner

Systemd'in yalnızca hedefleri ve ilişki bağımlılıklarını işaret etmesini kullanmazsınız. Böylece ağ arayüzünüz kalktığında (dahili olarak systemd'e) network.targeto zaman network-online.targeto birimi başlatmak için diğer bağımlılıklar sinyaller . bu yüzden sadece tinc.servicedahil et Requires=systemd-networkd.serviceve WantedBy=network-online.targetsonra systemd-networkd başladığında, nic ve tun arayüzünü getirecek, bir IP adresi oluşturacak ve daha sonra gerektiğinde başlatmak veya yeniden başlatmak için tentür sinyali verilecektir.
— Dwight Spencer

Ben de bir hizmet yeniden başlatma tetiklemek için bir yol bulamadık, çünkü network-online.target bağlantı kesilmesi durmaz (aslında bunun için bir hata raporu dosya gerekir ...). Şunları içeren bir /etc/NetworkManager/dispatcher.d/ komut dosyasına başvurdumcase "$2" in up|connectivity-change) if /usr/bin/nm-online -qx; then systemctl reload autossh.service fi;; esac
— eMPee584

1
Sorusunu cevapladığınız kişi tarafından yazılmış bir makaleye bağlantı verdiğinizi eğlenceli buluyorum . :) Elbette bu cevabın sonraki okuyucuları için yararlı, ama yine de komik.
— Wildcard

1

Bu şu anda mümkün değil. Ancak, systemd-networkd-wait-online.servicetenteyi yeniden yapılandırmak için yalnızca önyüklemede bağımlılık olarak kullanabilirsiniz . Deneyimlerime göre tinc, ağ yapılandırmasındaki değişikliklere hızlı tepki verecektir. En azından linux'da arayüz değişikliklerini dinlemek için rtnetlink kullanabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.