Puncte:0

Pachetele de ieșire Stunnel au fost modificate în mod ciudat

drapel es

Am o cutie cu două NIC-uri configurate ca bridge. Ebtables redirecționează traficul http către iptables. Adresa IP br0 este 10.10.10.10. Stunnel este configurat cu transparent = source. Acceptă conexiuni pe 127.1.1.1:8080 și se conectează întotdeauna la aceeași adresă IP (10.10.20.20) pe portul 80.

Am următoarele reguli iptables în vigoare:

iptables -t nat -I PREROUTING -p tcp --dport 80 -i ens192 -j DNAT --to-destination 127.1.1.1:8080
iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT

De asemenea, rutarea este configurată. Dacă un client se conectează la cutia în sine pe portul 80, totul funcționează. Stunnel se conectează la destinație (10.10.20.20). Dar dacă clientul are o adresă de destinație diferită, stunnel încă încearcă să se conecteze la 10.10.20.20, dar nu poate.

Deci, când urmăresc pachetele brute până la 10.10.20.20, pot vedea diferite comportamente. Cel asteptat:

trace id 71a8325b ip raw OUTPUT pachet: oif "br0" ip saddr 10.10.10.10 ip daddr 10.10.20.20 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 28971 ip lungime sport = 60 tcp tcp8 flag = 50 tcp8 tcp fereastra tcp 64240
trace id 71a8325b ip raw OUTPUT rule meta l4proto tcp ip daddr 10.10.20.20 counterpachete 37 bytes 3265 meta nftrace set 1 (verdictul continuă)
trace id 71a8325b ip raw OUTPUT verdict continuă
trace id 71a8325b ip raw OUTPUT policy accept
trace id 71a8325b ip filter OUTPUT packet: oif "br0" ip saddr 10.10.10.10 ip daddr 10.10.20.20 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 28971 ip lungime sport = 60 tcp tcp8 flag = 50 tcp8 tcp8 fereastra tcp 64240
trace id 71a8325b ip filter verdictul OUTPUT continua
ID de urmărire 71a8325b Filtru IP Politica OUTPUT acceptă
trace id 71a8325b pachet de ieșire filtru inet: oif "br0" ip saddr 10.10.10.10 ip daddr 10.10.20.20 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 28971 ip protocol tcp tcp lungime sport tcp 8 tcp tcp 8 tcp 8325b == fereastra syn tcp 64240
trace id 71a8325b verdictul de ieșire al filtrului inet continuă
trace id 71a8325b inet filter output policy accept

Și cel neașteptat, unde stunnel nu se poate conecta:

trace id fd9543bc ip raw OUTPUT packet: oif "br0" ip saddr 10.10.10.10 ip daddr 10.10.20.20 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 26448 ip lungime 60 tcp 8 sport = tcp18 tcp8 flag = 60 tcp 8 tcp fereastra tcp 64240
trace id fd9543bc ip raw OUTPUT rule meta l4proto tcp ip daddr 10.10.20.20 contor pachete 52 octeți 4540 meta nftrace set 1 (verdictul continuă)
trace id fd9543bc ip raw OUTPUT verdict continuă
trace id fd9543bc ip raw OUTPUT policy accept
trace id fd9543bc ip filter OUTPUT packet: oif "br0" ip saddr 10.10.10.10 ip daddr 127.1.1.1 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 26448 ip length 60 tcp 8 sport tc34 = tcp 8 flag tc34 fereastra tcp 64240
trace id fd9543bc ip filter OUTPUT verdict continua
trace id fd9543bc ip filter Politica de IEȘIRE acceptă
trace id fd9543bc inet filter output packet: oif "br0" ip saddr 10.10.10.10 ip daddr 127.1.1.1 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 26448 ip protocol tcp ip lungime tcp tcp 8 tcp 8 tcpport lungime 634 tcp8 == fereastra syn tcp 64240
trace id fd9543bc inet filter output verdict continua
trace id fd9543bc inet filter output policy accept

Se pare că adresa de destinație primește destinația menționată. Dar nu pot înțelege de ce și când. Eu doar DNAT in masa nat PREROUTING. Din câte am înțeles, acest pachet nu ar trebui să lovească din nou această regulă în niciun fel. Și de ce se întâmplă asta doar, când destinația inițială nu era adresa IP proprie a casetei? Mă gândesc, că poate stunnel schimbă pachetul în sine?

Aici este rezultatul complet iptables-save

# Generat de iptables-save v1.8.7 pe Joi Nov 18 22:40:01 2021
*nat
:ACCEPTAREA PRE-ROUTARE [14:1295]
:INPUT ACCEPT [14:1295]
: ACCEPT IEȘIRE [2:196]
: POSTROUTING ACCEPT [4:316]
-A PREROUTING -i ens192 -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.1.1.1:8080
COMMIT
# Finalizat joi, 18 noiembrie 22:40:01 2021
# Generat de iptables-save v1.8.7 pe Joi Nov 18 22:40:01 2021
*calandru
:ACCEPTAREA PRE-ROUTARE [15:1154]
:INPUT ACCEPT [172:24172]
: FORWARD ACCEPT [0:0]
: ACCEPT IEȘIRE [222:44999]
: POSTROUTING ACCEPT [222:44999]
:DIVERT - [0:0]
-A PREROUTING -p tcp -m socket -j DIVERT
-A DIVERT -j MARK --set-xmark 0x1/0xffffffff
-A DIVERT -j ACCEPT
COMMIT
# Finalizat joi, 18 noiembrie 22:40:01 2021

Aveți idei, cum aș putea continua cu asta?

A.B avatar
drapel cl
A.B
Se pare că această altă întrebare devine învechită? https://serverfault.com/questions/1083810/iptables-modify-output-flow
drapel es
Nu, cealaltă întrebare se concentrează pe posibilitățile de soluționare cu iptables.
Nikita Kipriyanov avatar
drapel za
Conform [fluxului de pachete](https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg), orice pachet produs extern care este trimis în rutare de la `broute`, ar trebui apăsați regula `nat PREROUTING` (o dată, deoarece tabela nat este parcursă numai pentru conexiuni noi), dar pachetul generat local nu are nicio modalitate de a atinge regula, deci comportamentul pe care îl vedeți este de așteptat.
drapel es
Nu, nu este, deoarece pachetele care par să primească DNATed sunt cele care sunt generate local și, prin urmare, trec doar prin lanțul OUTPUT.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.