Guten Tag,
ich habe eine Python-Script, welches mit verschiedenen Endpoints einer API kommuniziert - leider teilen sich diese IP Endpoints ein IP-Rate Limit.
Mein Python-Script spawned mehrere Prozesse mittels (multiprocessing) - da ich es simpel halten will bzw. es nicht notwendig ist eine "pipe" zwischen den "Prozessen" zu haben, ist ein "Timing" nicht wirklich möglich um dieses IP-Rate Limit mittels "sleep" einzuhalten - und so wurde mir von den API-Owner geraten einfach mehrere Public Source-IPs zu verwenden.
Meine Idee war, dass ich einfach jedem "Prozess" einen eigenen D-Port zuweise (44311, 44312, ...), mittels iptables würde ich diese Packages dann "MARKieren" und dann mittels "iproute2" das entsprechende Interface zuweise - irgendwie müsste ich natürlich auch noch den Port auf den von der B-Stelle erwarteten Port ändern (443)
Also es würde dann in etwa so aussehen um die Pakete zu "MARKieren":
iptables -A OUTPUT -p all --dport 44311 -j MARK --set-mark 11
iptables -A OUTPUT -p all --dport 44312 -j MARK --set-mark 12
...
nun den Eintrag im "iproute2":
echo 11 ipv4´_1 >> /etc/iproute2/rt_tables
echo 12 ipv4´_2 >> /etc/iproute2/rt_tables
...
hier füge ich die fwmark hinzu:
ip rule add fwmark 11 table ipv4_11
ip rule add fwmark 12 table ipv4_12
...
und hier noch die "IP Route" Regel um den Traffic über das entsprechende eth-Interface zu schicken
ip route add default via eth1 table ipv4_11
ip route add default via eth2 table ipv4_12
...
Jetzt wäre es interessant ob sich ein "Netzwerker" dies anschauen könnte - ob mein Ansatz funktionieren würde und ein Tipp wie ich den Port wieder auf 443 zurückändern kann --> ich vermute hier ist DNAT notwendig und das wäre dann nur bei "Prerouting" sowie "Output" möglich, mangels fehlenden "Prerouting" wird es wohl beim "Output" sein müssen.
Falls jemand einen anderen Ansatz hätte, bin ich natürlich sehr offen dafür
P.S: die URL der API geht leider nur mittels "domainname", da sich die IPs dahinter jederzeit ändern können bzw. ein "Loadbalancer" mit mehreren Public IPs verwendet wird.
Also ein Beispiel wäre:
https://api.domainname.com/api/endpoint_1
https://api.domainname.com/api/endpoint_2
https://api.domainname.com/api/endpoint_x (x = 3+)
Natürlich würde es auch gehen einfach mehrere Server zu verwenden, aber dies würde mein Budget sprengen, da ich einen RS8000 G9 verwende und eine zusätzliche IP nur 1-2€/Monat anstatt ~40€/Monat (Angebot). - Speziell, wenn ich 2-4 Server benötigen würde
Danke und ich bin schon gespannt auf euren Input