Am o mașină EC2 care rulează Ubuntu 20.04 cu 2 interfețe ethernet. Ambele sunt conectate la aceeași subrețea și ambele sunt accesibile din exterior. Am creat 2 tabele de rute personalizate, unul pentru fiecare interfață și ambele conținând doar intrările de rută pentru mașina în sine, subrețeaua imediată și un gateway implicit prin interfața corespunzătoare. Pot adăuga o regulă pentru ca tot traficul să folosească oricare dintre tabelele de rute personalizate și funcționează: mașina va folosi interfața specificată și adresa IP corespunzătoare pentru comunicația de ieșire. Cu toate acestea, dacă adaug reguli pentru a utiliza oricare tabel de rute personalizat bazat pe marcajele pachetelor pe care le aplic prin iptables, totul nu mai funcționează și niciun trafic nu părăsește mașina mea.
Iată principalele biți ale configurației relevante:
$ sudo ip route
10.0.11.0/24 dev ens6 proto kernel scope link src 10.0.11.52
10.0.11.0/24 dev ens5 proto kernel scope link src 10.0.11.201
$ sudo ip route show table if1
implicit prin 10.0.11.1 dev ens5 proto metric static 100
10.0.11.0/24 dev ens5 proto static scope link src 10.0.11.52
10.0.11.201 dev ens5 proto static scope link metric 100
$ sudo ip route show table if2
implicit prin 10.0.11.1 dev ens6 proto metric static 200
10.0.11.0/24 dev ens6 proto static scope link src 10.0.11.201
10.0.11.52 dev ens6 proto static scope link metric 200
regula $ ip
0: din toate căutările locale
46: din toate căutările fwmark 0x3 if1
47: din toate căutările fwmark 0x2 if2
50: din 10.0.11.201 căutare dacă1
100: din 10.0.11.52 căutare dacă2
32766: din toate căutările principale
32767: din toate căutările implicite
$ sudo iptables -S -t mangle
-P PREROUTING ACCEPT
-P ACCEPT INTRARE
-P ACCEPTAȚI ÎN ÎNTÂND
-P ACCEPT IEȘIRE
-P POSTOUTING ACCEPT
-A OUTPUT -m proprietar --uid-owner 1002 -j MARK --set-xmark 0x3/0xffffffff
-A OUTPUT -m proprietar --uid-owner 1003 -j MARK --set-xmark 0x2/0xffffffff
Scopul meu este să direcționez traficul de la utilizatorul cu uid 1002 prin interfața ens5 (if1) și traficul de la utilizatorul cu uid 1003 prin ens6 (if2), dar fac ceva greșit undeva și mă înnebunește...
Văd că pachetele marcate sunt tratate diferit, așa că ceva se întâmplă. Dacă atribui o rută implicită tabelului principal de rutare și apoi doar marchez traficul pentru uid 1002, toți utilizatorii pot face conexiuni de ieșire, cu excepția uid 1002. Deci știu că marcarea funcționează, știu că pachetele marcate sunt direcționate diferit și îmi cunosc personalitatea tabelele de rute funcționează, dar undeva în această constelație există o eroare și nu o găsesc.
Orice ajutor ar fi foarte apreciat în acest moment!
--Editați | ×--
Am ajuns la asta bazându-mi configurația pe abordarea prezentată aici: Încercarea de a direcționa cererile http de ieșire prin VPN pe Ubuntu Server 12.04
și unele personalizări, deoarece nu vreau să direcționez traficul în funcție de porturi specifice, ci de uid-ul de origine.