Iptables ile ilgili bir sorunum var. 2 bağlantı arasında bir yük dengeleyici kurmaya çalışıyorum. Paketleri ve bağlantıları işaretleyebilirim, yönlendirme tablosunu seçmek için ip kuralını kullanabilirim (bu yüzden ağ geçidini değiştirmek). Ancak, paketleri yönlendirici varsayılan gw'den farklı bir gw üzerinden yönlendirmek için işareti ayarladığımda, yanıt paketi doğru şekilde yönlendirilmiyor.
8.8.8.8'e ping yaparken örnek:
17:41:48.061404 IP x.x.x.x > google-public-dns-a.google.com: ICMP echo request, id 2622, seq 1, length 64
17:41:48.079664 IP google-public-dns-a.google.com > x.x.x.x: ICMP echo reply, id 2622, seq 1, length 64
Bu yönlendirici tcpdump kullanarak aldım. İkinci paket yönlendiriciye gelir, ancak yönlendiricinin istediği yere doğru yönlendirici alamaz. Bu her pakette olur.
Yapılandırma:
- ana tabloyu wan_one ve wan_two WITH g varsayılan olarak kopyaladı.
- ana tablo GW üzerinden varsayılan bir gw yönlendiricisine sahip
- wan_x tablolarına farklı def gws uygulandı (GW 1 ve GW 2).
# Match the packets ip rule add fwmark 1 lookup wan_one prio 1024 ip rule add fwmark 2 lookup wan_two prio 1025
# Packets from router 1 or 2 gets routed through correct table ip rule add from [ROUTER IP FOR GW 1] table wan_one prio 1026 ip rule add from [ROUTER IP FOR GW 2] table wan_two prio 1027
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark iptables -t mangle -A PREROUTING --match mark --mark 1 -j ACCEPT iptables -t mangle -A PREROUTING --match mark --mark 2 -j ACCEPT iptables -t mangle -A PREROUTING -i eth0 -m state --state NEW -m mark --mark 0 -j MARK --set-mark 1 iptables -t mangle -A PREROUTING -i eth1 -m state --state NEW -m mark --mark 0 -j MARK --set-mark 2 iptables -t mangle -A PREROUTING -m state --state NEW -m mark --mark 0 -i eth2 -j MARK --set-mark 2 iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
Diyelim ki link 1 eth0 üzerinde, link 2 eth1 üzerinde ve LAN eth2 üzerinde.
Nasıl çalıştırabilirim?