Soru Post-up'ın systemd-networkd karşılığı nedir? (dinamik köprü MAC yapılandırması)


Linux dağıtımlarında kullanılan /etc/network/interfaces (Debian gibi) Yerleşik bir köprü gibi statik köprü kölesi arabirimlerinden birinin MAC48 adresini kullanmak için bir (çekirdek) köprü elde edebilirim wlan0kullanarak post-up, de olduğu gibi:

 post-up ip link set br0 address `cat /sys/class/net/wlan0/address`

Bu, her bir klon sisteminin her birinin kendi benzersiz MAC48'ini (benzersiz wlan0'dan bir tane) kullandığını ve 2) köprünün MAC48'lerin daha altlarında daha fazla köprü ara yüzünü takarken bile sabit kalmasını sağladı.

Systemd-networkd her türlü desteği sunar post-up Bir ağ (veya netdev) oluşturulduktan sonra çalıştırılabilecek komutlar Böyle bir şey bulmaya çalıştım ama onu kaçırmış olabilir.

Ya da sistemdeki tamamen farklı bir yoldur, yani bir cihaz birimine sahip olmak ve ip link... komut ve cihaz birimine bağlı? Öyleyse, cihaz ünitesi ve servis ünitesi dosyaları nasıl görünür?


5
2017-08-21 16:57


Menşei




Cevaplar:


Bu ağır modüler kavramı nedeniyle ortaya çıkıyor systemd ve systemd-networkd komut dosyası sorusunun farklı bir açıdan ele alınması gerekir: köprü ile komut dosyası aramak yerine .netdev tanımı, systemd yol bir (çok küçük) tek vuruşlu olmaktır .service birim tarafından aranan köprü .netdev.

Yan not olarak: Daha yeni Linux çekirdeğinde, çekirdek gibi görünüyor   Köprüler aslında dinamik olarak değişen en düşük MAC48'i kullanmaz   Artık MAC48 köprüsü için şema. Bunun yerine, bir statik oluştururlar   Köprünün kendisi için MAC48. Yani, çok katı anlamda bu   Biri kullanmayı tercih etmedikçe, çözüm gerçekten gerekli değildir.   "gerçek" donanım MAC48; Burada burada yapılan nedir   servis birimi

Gerekli yeni servis birimi (eski yerine post-up itibaren /etc/network/interfaces) yaşıyor /etc/systemd/system/bridge-stable-mac.service ve MAC48'i (yerleşik, sabit) olarak atar wlan0 köprünün kendisi için:

[Service]
Type=oneshot
ExecStart=/bin/bash -c "/bin/echo 'br0 available, setting MAC ' `/bin/cat /sys/class/net/wlan0/address`"
ExecStart=/bin/bash -c "/sbin/ip link set br0 address `/bin/cat /sys/class/net/wlan0/address`"

[Install]
WantedBy=sys-subsystem-net-devices-br0.device

Buradaki ana nokta WantedBy= yan tümce: ne zaman br0 başlar, sonra bu hizmet çalıştırılmalıdır (tam olarak bir kez, Type=oneshot). Systemd gerçekten burada da işe yarar, çünkü bağımlılığımızı eklemek için mevcut cihaz tanımını düzenlememize gerek yok, tersine bizim tersi kullanarak bu bağımlılığı hesaplıyor. WantedBy= bağlantı. Bu gerçekten düşündüğüm yer systemd parlıyor.

Yukarıdaki servis birimi, köprüsünüzün adlandırılmış olduğunu varsayar. br0. Karşılık gelen bir kullanmalısınız .netdev bu köprüyü tanımlamak için dosya br0. Örneğin, /etc/systemd/network/10-br0.netdev:

[NetDev]
Name=br0
Kind=bridge

Hotplugging köprü portları söz konusu olduğunda, systemd aslında bunu zaten çıkmış haliyle yapıyor, ki bu çok düzgün; içinde /etc/systemd/network/10-br0-ports.network:

[Match]
Name=eth0 wlan0

[Network]
Bridge=br0

Bu kadar!


6
2017-08-22 16:02