UDP sendto, belirli yönlendirme tablolarını kullanırken başarısız oluyor


0

Çoklu arayüze sahip bir sistemim var. Tüm bu arayüzleri birbirinden birkaç kullanarak izole ettim. sysctl seçenekler ve yönlendirme tabloları ve kuralları.

Her arayüzün varsayılan bir rota tanımlayan kendi yönlendirme tablosu vardır.

Her yönlendirme tablosunda, hangi paketlerin hangi tabloya gideceğini tanımlayan 4 kural vardır.

Basitleştirmek için diyelim ki eth0 (192.168.1.1) ve eth1 (192.168.1.2).

itibaren 192.168.1.1 tablo eth0

için 192.168.1.1 tablo eth0

iif eth0 table eth0

oif eth0 table eth0

İçin eth2 aynısı.

sysctl seçenekler:

net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.all.arp_ignore = 2
net.ipv4.conf.all.arp_announce = 1
net.ipv4.conf.all.rp_filter = 1

Bu benim amaçlanan kullanım durumlarımın% 99'u için mükemmel çalışıyor ancak bir tanesi başarısız oluyor. Bağlanmayan bir soketten bir paket oluşturulursa, "sendto" kullanarak bir UDP istemcisine yanıt vermek gibi, çağrı "Ağa Erişilemez" ile başarısız olur. Sendto çağırmadan önce belirli bir IP adresi bağlıysa, arama beklendiği gibi başarılı olur.

Bu gibi durumlar için hepsini yakalama varsayılan bir yol belirlemediğiniz için, bu sorunu çözmek için politika yönlendirme (örneğin iptables, ip kuralı) kullanılarak yapılabilecek bir şey var mı?

Teşekkürler


İptables ile bir işaret kullanarak bir çözüm yardımcı olmaz. iptables 'çıkış mangle kanca olur sonra ilk rota araması ("yönlendirme kararı") ve ikinci arama ("denetimi yeniden yönlendir"). Bu yüzden iptables'ın işaretini kullanmak burada yardımcı olmaz, çünkü ilk aramada "Ağa ulaşılamaz" olur ve mangle tablası kullanılmaz Bu resme bakın: en.wikipedia.org/wiki/Netfilter#/media/...
A.B

Ancak, hiçbir zaman kullanmak istemeseniz bile, bu catch-all varsayılan yolunun eklenmesi, iptables 'mark + ip rule fwmark komutunun kullanılmasına izin verir (tetiklenen yeniden yönlendirme denetiminden). Bu sorun için iptables kullanarak bir çözüm olup olmadığını bilmiyorum, ancak iptables varsa hala "varsayılan" bir varsayılan yol gerekiyor
A.B

Teşekkürler. IP tabloları içermeyen herhangi bir çözüm var mı? Kaynak adresi belirtilirse yönlendirme aramasının neden başarısız olduğunu merak ediyorum ve tüm kaynakların kaynak adres X'ten alındığını belirten bir kuralım var.
IMerin

Peki buna ne dersin? ip link add dummy0 type dummy; ip link set dummy0 up; ip route add default dev dummy0 . Açıkçası hiçbir paket yanlış yere gitmeyecek. Socat ile yaptığım testte, aynı ağdan eth0 ile 192.168.1.1 arasında temasa geçtiğimde 192.168.1.1 kaynağı ile cevap vermeye "Ağa erişilemez" den gittim. Şimdi basit bir dava gibi görünüyor. Gerçek bir dava var mı? Bu arada, soruya hiçbir rota yazmadın, bu yüzden bundan daha fazlasını yapamam.
A.B

Tamam şeyler cevaplamak için iyi çalışır (udp davası dahil). Ancak, giden bir bağlantı başlatırken, bir IP belirtmeden, 1. arayüzün ipini (192.168.1.1) ve varsayılan rota arayüzünü kukla olarak seçecektir. Ama eğer paketi işaretlersem, bir yeniden yönlendirme kontrolünü tetikler ve nihayet beklenen kuralları izler (böylece eth0'a geçer), bir fwmark kuralı ekleme gereği bile yoktur, tek başına yeniden yönlendirme yapar.
A.B
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.