ip rule kuralının systemd-networkd ile yeniden bağlanmadan sonra yaşamasını sağlayın
Kabuktan eklenen ip kuralı bir sonraki bağlantı olayında kaybolur. Kuralı, tablosunu ve rotalarını systemd-networkd içinde bildirin ki politika yeniden oluşturulsun.
ip rule ile bir politika kuralı ekleyin; bağlantı kaybolana kadar çalışır, o anda ise basitçe yoktur. Hiçbir şey yüksek sesle başarısız olmadı: çekirdek durumu değişti ve hiçbir yapılandırma sahibi kuralın var olması gerektiğini bilmiyordu. Yaşayan bir kural ile yaşamayan bir kural arasındaki tüm fark budur. systemd-networkd kullanan bir ana bilgisayarda çözüm, kurala bir sahip vermektir; her yeniden bağlanmadan sonra komutu yeniden çalıştırmak değil.
Bir kural ancak birisi ona sahipse vardır
Çekirdeğin yönlendirme politikası yapılandırma değil, durumdur. Çalışan sistemde yaşar ve ona bağlı arayüzü yıkan her şey onu da götürebilir. Kabuktaki bir komut o durumu değiştirir ve niyet hakkında hiçbir kayıt bırakmaz.
Ağ yöneticileri ters yönde çalışır: yapılandırmayı okur, uygular ve bir bağlantı olayı önceki durumu geçersiz kıldığında yeniden uygular. Yapılandırmalarında bildirilen kural yeniden oluşturulur, oysa yanlarına eklenen kural sahibi olmayan yabancı bir nesnedir.
Bu ayrımın networkd içinde bir adı var ve bir şeyi etkinleştirmeden önce onu okumaya değer. Yabancı kurallar yeni sürümlerde varsayılan olarak kaldırılır; bu da elle girdikleri kayıtların kalacağını bekleyenleri şaşırtır.
Bir ayara güvenmeden önce sürümü okuyun
Sahiplik davranışı networkd.conf içindeki bir ayarla denetlenir ve bu ayar eski systemd sürümlerinde yoktur. Onun etrafında tasarım yapmadan önce kurulu sürümü denetleyin, çünkü eski bir ana bilgisayar okuduğunuz belgelerden farklı davranır.
İki değer önemlidir. Biri networkd yapılandırmasında bildirilmeyen kuralların kaldırılıp kaldırılmayacağını belirler, diğeri rotalar için aynısını yapar. İkisi de politikanın içeriğiyle değil sahiplikle ilgilidir ve ikisi de güncel sürümlerde varsayılan olarak daha katı davranışı seçer. Bunları genel olarak kapatmak her yabancı kuralı yaşatır; bu ise tek bir istenen VPN politikası bildirmekten çok daha geniş bir karardır.
systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null
O grep size yerel olarak neyin ayarlandığını ve sağlayıcının varsayılanının ne olduğunu söyler. Yokluk da bilgidir, çünkü derlenmiş varsayılanın geçerli olduğu anlamına gelir. Varsayılanı notlarınıza yazın ki bir sonraki kişi onu yeniden keşfetmek zorunda kalmasın.
Kuralı ve işaret ettiği tabloyu bildirin
Bir .network dosyasındaki kural bir tabloyu adlandırır ve bir adın yaptığı tek şey budur. O tablodaki rotaları oluşturmaz ve anlamlı olup olmadıklarını denetlemez. Kuralı rotalar olmadan bildirmek, trafiği eşleştiren ve sonra düşüren bir politika üretir.
Rotaları aynı dosyada, erişilebilir sonraki atlamalarla ve doğru tabloyla bildirin. Önceliği bildirilen kuralda tutun ki sıralı listede beklediğiniz yere otursun. Yanlış tabloya zamanından önce ulaşan bir kural, düzeltmek istediğiniz hizmetten daha fazla trafiği değiştirir. Aşağıdaki parçayı tam bir dosya değil bir biçim olarak okuyun, çünkü arayüz sahipliği ve bağlantının geri kalanı hâlâ bulunmak zorundadır.
[RoutingPolicyRule]
Family=ipv4
IPProtocol=tcp
SourcePort=443
Table=100
Priority=1000
[Route]
Destination=10.80.0.0/24
Gateway=10.80.0.1
Table=100
Sonra yeniden yükleyin ve dosya yerine çekirdek durumunu okuyun. Temiz ayrıştırılmış bir yapılandırma bile amaçlamadığınız bir kural üretebilir ve iki görünüm ancak bildirim eksiksiz olduğunda örtüşür.
Arayüz için tek bir sahip seçin
Tek tünelde iki yönetici her ikisinde de hata gibi görünen bir çekişme yaratır. Var olan bir wg-quick kurulumunu networkd içine aktarmak ekleme değil göçtür ve ikisini birden çalıştırmak arayüzü ve kurallarını iki sahip altında bırakır.
Göçü tek seferde yapın: eski birimi durdurun, devre dışı bırakın, arayüzü ve rotalarını networkd içinde bildirin, sonra yeniden yükleyin. Eski birimin açılışta geri dönemeyeceğini doğrulayın. Yeniden başlatmadan sonra yeniden etkinleşen artık bir birim, az önce bildirdiğiniz durumun üzerine yazar. Yeni yapılandırma bir yeniden bağlanmayı atlatana kadar eski dosyayı saklayın, sonra onu emekliye ayırın.
İşaretin sahipliği de aynı özeni hak eder: bir kural güvenlik duvarı işaretiyle eşleşiyorsa bir şeyin o işareti ayarlaması gerekir. Kimsenin ayarlamadığı bir işarete başvuran kural, kasıtlı görünen ölü bir yapılandırmadır.
Yaşam döngüsü olaylarını çalışın
Yapılandırma, olaylar boyunca gösterdiği davranış kadar iyidir. Bağlantıyı indirin, yeniden kaldırın, hizmeti yeniden başlatın ve adresi yenileyin. Her birinden sonra kural listesini ve tablonun içeriğini okuyun.
sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd
Amaçlanan sonuç, aynı sahipli politikanın yeniden oluşturulması ve eski durumun emekliye ayrılmasıdır; bu, her yeniden bağlanmadan sonra kabuk kuralını yeniden eklemekten daha kalıcıdır. Değişiklik kaydında kurala sahip olan dosyayı ve onu destekleyen sürümü adlandıran bir satır tutun. Böylece sonraki mühendis kabuk geçmişini karıştırmadan politikayı bulabilir. Kimsenin sahip olmadığı bir kural yine kaybolacak bir kuraldır.