Puncte:0

de ce redirecționarea portului și DNAT nu funcționează cu vxlan

drapel jp

Trebuie să creez conexiuni VXLAN între două computere A (pe Debian cu IP 192.168.30.1) și B (pe archlinux cu IP 192.168.30.3) Pentru asta am facut:

  • Pe o:
  sudo ip link add vxlan1 tip vxlan id 1 nolearning remote 192.168.30.3 dstport 33333 dev ens4
  sudo ip link setează vxlan1
  sudo ip addr add 10.0.0.106/24 dev vxlan1
  • Pe B:
  sudo ip link add vxlan2 tip vxlan id 1 nolearning remote 111.111.111.111 dstport 33333 dev ens3
  sudo ip link setează vxlan2
  sudo ip addr add 10.0.0.107/24 dev vxlan2

Mai mult, pe PC B creez o regulă DNAT:

  sudo iptables -w -t nat -A OUTPUT -s 192.168.30.3 -d 111.111.111.111 -p udp --dport 33333 -j DNAT --to-destination 192.168.30.1:33333

Apoi am facut:

  • Pe PC A: ping 10.0.0.107. Acest lucru funcționează conform așteptărilor cu ping răspunsuri.
  • Pe PC B: ping 10.0.0.106. Acest lucru funcționează conform așteptărilor cu ping răspunsuri.
  • Pe PC A: nc -u -lp 12345. Pe PC B: nc -u 10.0.0.106 12345. Mă așteptam să citesc date din aplicația netcat de pe PC-ul A când trimit date cu comanda netcat de la PC-ul B. Cu toate acestea, nu am citit nimic.

Problema mea este atunci la ultimul punct. De ce ascultătorul meu netcat nu primește nimic. Folosind wireshark pe PC-ul A obțin:

[wireshark dump pe PC A1

Câteva informații suplimentare

  • PC-ul A rulează cu „Linux debian 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 GNU/Linux” (acesta este rezultatul uname -a comanda)

  • IP-ul PC pe ens4 este 192.168.30.1/24

  • PC-ul B rulează cu „Linux archlinux 5.13.9-arch1-1 #1 SMP PREEMPT Sun, 08 Aug 2021 11:25:35 +0000 x86_64 GNU/Linux” (acesta este rezultatul uname -a comanda)

  • IP-ul PC B pe ens3 este 192.168.30.3/24

  • cele două mașini sunt Qemu VM-uri pornite cu GNS3

  • tabelele nat și filtru ale netfilter pe PC A sunt goale:

seb@debian:~$ sudo iptables -t nat -L ; sudo iptables -t filter -L
PRERUUTARE în lanț (politica ACCEPTĂ)
target prot opt ​​sursă destinație         

INTRARE în lanț (politica ACCEPTĂ)
target prot opt ​​sursă destinație         

POSTOUTING în lanț (politica ACCEPT)
target prot opt ​​sursă destinație         

Ieșire în lanț (politica ACCEPT)
target prot opt ​​sursă destinație         
INTRARE în lanț (politica ACCEPTĂ)
target prot opt ​​sursă destinație         

Lanț FORWARD (politica ACCEPT)
target prot opt ​​sursă destinație         

Ieșire în lanț (politica ACCEPT)
target prot opt ​​sursă destinație    
  • Pe PC-ul B am doar regula DNAT și o regulă pentru a arunca pachetul ICMP de tip „port inaccesibil” (Aceasta este o regulă pe care am adăugat-o în alt scop):
[seb@archlinux vxlan]$ sudo iptables -t nat -L -n ; sudo iptables -t filtru -L -n
PRERUUTARE în lanț (politica ACCEPTĂ)
target prot opt ​​sursă destinație         

INTRARE în lanț (politica ACCEPTĂ)
target prot opt ​​sursă destinație         

Ieșire în lanț (politica ACCEPT)
target prot opt ​​sursă destinație         
DNAT udp -- 192.168.30.3 111.111.111.111 udp dpt:33333 la:192.168.30.1:33333

POSTOUTING în lanț (politica ACCEPT)
target prot opt ​​sursă destinație         
INTRARE în lanț (politica ACCEPTĂ)
target prot opt ​​sursă destinație         

Lanț FORWARD (politica ACCEPT)
target prot opt ​​sursă destinație         

Ieșire în lanț (politica ACCEPT)
target prot opt ​​sursă destinație         
DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 3
Michael Hampton avatar
drapel cz
De ce folosești NAT și nu rutarea normală?
sebastien dontneedtoknowthat avatar
drapel jp
De ce nu pot folosi NAT în loc de rutarea normală? Desigur, folosirea NAT aici este inutilă, dar de fapt întrebarea mea este o versiune simplificată a ceea ce trebuie să fac cu adevărat și unde am nevoie de NAT. Practic, în scenariul complet, unul dintre computerele mele se află în spatele unui NAT (o cutie a ISP-ului meu). Astfel, celălalt computer nu îl poate accesa direct pe primul și nu pot modifica regulile NAT de pe cutie. Deci lucrez la această problemă. Deocamdată, reușesc să fac ping-ul să funcționeze doar jucând cu sincronizarea casetei mele conntrack. În cele din urmă, vreau să îl folosesc pentru a realiza agregarea link-urilor.
sebastien dontneedtoknowthat avatar
drapel jp
Îmi dau seama că întrebarea mea poate fi și: cum se realizează conexiuni VXLAN între două computere A și B cu două presupuneri. În primul rând, fiecare pachet trimis de A trece printr-o mașină NAT care schimbă informațiile sursă a pachetului. În al doilea rând, nu vreau să modific mașina care efectuează NAT (deci nu vreau să adaug reguli statice asupra ei).Cu toate acestea, sunt încă curios de ce utilizarea DNAT nu funcționează cu VXLAN.
A.B avatar
drapel cl
A.B
Deși nu părea să-l înțeleg inițial, am înțeles problema. Dintr-o bănuială, acest lucru părea să o rezolve: `ethtool --offload vxlan2 tx-checksum-ip-generic off` (iar repornirea lui revine problema). Nicio explicație foarte bună aici.
sebastien dontneedtoknowthat avatar
drapel jp
Acest lucru chiar funcționează și pentru mine. Nu prea știu de ce, deoarece nu văd o diferență între două pachete trimise cu și fără tx-checksum-ip-generic. Dar deocamdată, acesta este cel mai bun răspuns pe care îl am.
A.B avatar
drapel cl
A.B
Dacă te uiți cu atenție, Wireshark spune că *nu* a validat suma de control pentru protocolul încapsulat. Pot doar să presupun că suma de control este greșită și, dacă ar fi validat-o, ar fi spus sumă de control greșită.

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.