Puncte:0

iptables / LXD - Mangle iptable - Rută portul îndepărtat de ieșire (la portul server îndepărtat 21) prin eth0

drapel ru

Pentru a rezuma contextul, este un container lxd care se conectează întotdeauna ca client OpenVpn.

{wan} <-> {192.168.x.x <-> iptables <-> lxd bridge host 10.0.3.1} <-> {lxd container 10.0.3.3 | openvpn <-> iptables}

În container există

  • eth0 (ip 10.0.3.3) care este interfața client pe un bridge lxd
  • tun0 care se conectează ca client la un server OpenVpn

Gazda lxd (10.0.3.1) redirecționează traficul 10.0.3.3 către rețeaua externă, iptables acceptă întotdeauna conexiuni de ieșire.

Gazda și clientul lxd au ambele iptables.

Am făcut deja rutarea pe 10.0.3.3, dar pentru portul de intrare (de exemplu, portul http de intrare la 10.0.3.3 și răspunsurile pe eth0, nu tun0).

Deci am un tabel de rutare "novpn" cu un număr fwmark.

Problema mea acum este că încerc să fac invers. Solicitările trimise către portul 21 de pe orice server la distanță trebuie să treacă prin tabelul eth0 ("novpn").

Am urmărit mai multe postări despre stackoverflow și am integrat acest lucru în iptable-urile clientului 10.0.3.3. Simt că este doar:

regulă ip adăugați tabelul fwmark 66 novpn
ip route add default prin 10.0.3.1 dev eth0 novpn table

iptables -t mangle -A PREROUTING -p tcp --dport 21 -j MARK --set-mark 66
iptables -t mangle -A OUTPUT -p tcp --dport 21 -j MARK --set-mark 66

Pe iptables din 10.0.3.1, am o regulă care acceptă redirecționări de la conexiuni deja stabilite și cunoscute. Deci bridge-ul ar trebui să urmeze și nu cred că sunt necesare alte reguli?

Dar nu merge, cand ma uit la tcpdump pe host (10.0.3.1) vad ca pachetele sunt trimise cu IP-ul openvpn, nu 10.0.3.3. De asemenea, pare să existe o problemă cu suma de control a pachetelor trimise -> cksum 0x1983 (incorect -> 0xe8ec).

Curios, când fac tcpdump pe consola clientului lxd (10.0.3.3), tcpdump nu afișează nimic și acolo nu mai înțeleg nimic.

Mă întreb dacă lxd are prioritate (poate ceva de genul dispozitivelor proxy etc.) față de iptables (și tcpdump??), dar asta mi se pare foarte ciudat.

Dacă poate fi util, am o regulă „regula ip adăuga la tabelul xxx.xxx.xxx.xxx novpn”. Deci orice conexiune la acest ip trece prin eth0 și, într-adevăr, acesta este cazul, acolo cererea este corectă în tcpdump.

Ma poate ajuta cineva.

A.B avatar
drapel cl
A.B
Eșuează deoarece stiva de rutare a ales adresa IP sursă înainte ca iptables să poată seta un marcaj pentru redirecționare: IP-ul sursă nu este schimbat. În mod normal, există o metodă mai elegantă pentru aceasta: `ip rule add ... ipproto tcp dport 21 ...`. Dar, deoarece este FTP și folosește un canal de date *nu* pe portul 21, mă aștept să eșueze mai târziu la transferul fișierelor (sau doar la listarea unui director), așa că nu voi da un răspuns. Vedeți acest Q/A pe UL SE unde folosesc această metodă: https://unix.stackexchange.com/questions/581419/routing-port-traffic-over-specific-interface .
n.karlen avatar
drapel ru
Mulțumesc @A.B, asta îmi răspunde la întrebare, pentru că mă interesează în principal problema tehnică, nu neapărat un port/protocol anume. Nu știam despre aceste noi reguli IP, este mult mai logic și practic decât folosirea iptables.

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.