Puncte:4

Linux: faceți traficul de la aceeași gazdă să pară provenit de la adrese IP diferite

drapel cn

Folosesc o bibliotecă client (https://github.com/Beckhoff/ADS) pentru a se conecta la un PLC de la o mașină Linux prin TCP. Cu toate acestea, biblioteca este capabilă să realizeze doar o singură conexiune între un IP sursă și adresa IP de destinație a PLC-ului. Scopul meu este să mă conectez la IP/PLC la distanță cu mai mulți clienți, adică PLC-ul la distanță trebuie să poată distinge conexiunile clientului pe baza adresei IP (diferite) a clientului.

Speram să reușesc asta cu ceva inteligent iptables reguli; în mod alternativ, poate funcționa și spațiile de nume de rețea Linux.

Pentru iptables ruta (pun?), planul meu este să atribui mai multe adrese IP aceluiași NIC pe mașina Linux.Deoarece serviciul de la distanță ascultă pe un singur port (48898), nu pot utiliza pur și simplu porturi de destinație diferite în iptables reguli. Prin urmare, mă gândeam la ceva de genul:

PLC la distanță: 192.168.1.10/24
PC Linux: 192.168.1.20/24 (adăugarea adresei IP 192.168.1.20/24 dev enp2s0)
PC Linux: 192.168.1.21/24 (adăugarea adresei IP 192.168.1.21/24 dev enp2s0)

  • Client-A se conectează pur și simplu de la 192.168.1.20 la 192.168.1.10
  • Client-A se conectează pur și simplu de la 192.168.1.21 la (virtual) 192.168.1.11

Folosind o adresă IP „virtuală” pentru PLC-ul de la distanță, vreau să pot distinge conexiunile TCP, așa că știu ce pachete provin de la Client-A și ce pachete provin de la Client-B. Acum trebuie să fac ceva iptables magie de-a lungul liniilor:

  1. de ieșire: dacă adresa IP de destinație == 192.168.1.11 1.1 -> rescrie la adresa IP de destinație 192.168.1.10 1.1 -> rescrie/asigură-te că adresa IP sursă este 192.168.1.21

  2. sosit: dacă adresa IP de destinație == 192.168.1.21 2.1 -> rescrieți adresa IP sursă la 192.168.1.11 (IP virtual al PLC la distanță)

Poate că este chiar posibil să „etichetam” conexiunile TCP, astfel încât să fie mai ușor să distingem care este care (pasul 2).

Puncte:5
drapel cl
A.B

Pentru acest caz, contratrackNAT-ul lui este suficient pentru a modifica, eticheta și gestiona corect traficul de răspuns pentru conexiune. S-ar putea folosi atât DNAT, cât și SNAT și leagă utilizarea lor împreună sau se poate folosi un amestec de DNAT și rute adecvate.

DNAT

Această țintă este valabilă numai în tabelul nat, în PRERUUTARE și IEȘIRE lanțuri și lanțuri definite de utilizator care sunt apelate numai de la acele lanțuri. Specifică adresa de destinație a pachetului ar trebui modificate (și toate pachetele viitoare în această legătură vor fi de asemenea stricat), iar regulile ar trebui să înceteze să fie examinate. [...]

SNAT

Această țintă este valabilă numai în tabelul nat, în POSTOUTARE și INTRARE lanțuri și lanțuri definite de utilizator care sunt apelate numai din acestea lanţuri. Se precizează că adresa sursă a pachetului ar trebui să fie modificat (și toate pachetele viitoare în această legătură vor fi, de asemenea, stricat), iar regulile ar trebui să înceteze să fie examinate. [...]

iptables -t nat -A OUTPUT -d 192.168.1.11 -j DNAT --to-destination 192.168.1.10
iptables -t nat -A OUTPUT -d 192.168.1.12 -j DNAT --to-destination 192.168.1.10
iptables -t nat -A OUTPUT -d 192.168.1.13 -j DNAT --to-destination 192.168.1.10
iptables -t nat -A OUTPUT -d 192.168.1.14 -j DNAT --to-destination 192.168.1.10

setați adresele sursă suplimentare pe client:

adresa ip add 192.168.1.21/24 dev enp2s0
adresa ip add 192.168.1.22/24 dev enp2s0
adresa ip add 192.168.1.23/24 dev enp2s0
adresa ip add 192.168.1.24/24 dev enp2s0
  • și fie leagă acțiunea SNAT în mod condiționat la iniţială adresa de destinație (înainte de a fi făcut DNAT), folosind un filtru adecvat cu iptables' contratrack Meci:

    iptables -t nat -A POSTROUTING -m conntrack --ctorigdst 192.168.1.11 -j SNAT --to-source 192.168.1.21
    iptables -t nat -A POSTROUTING -m conntrack --ctorigdst 192.168.1.12 -j SNAT --to-source 192.168.1.22
    iptables -t nat -A POSTROUTING -m conntrack --ctorigdst 192.168.1.13 -j SNAT --to-source 192.168.1.23
    iptables -t nat -A POSTROUTING -m conntrack --ctorigdst 192.168.1.14 -j SNAT --to-source 192.168.1.24
    
  • sau în loc de SNAT, mult mai curat, utilizați o rută care indică direct adresa sursă dorită pentru fiecare destinație (chiar dacă nat/OUTPUT redirecționează, adresa sursă nu se va mai schimba odată setată). Acest lucru va permite clientului și ss -tn dport == 48898 pentru a cunoaște și afișa adresa sursă corectă.Aceasta devine:

    IP route add 192.168.1.11/32 dev enp2s0 src 192.168.1.21
    IP route add 192.168.1.12/32 dev enp2s0 src 192.168.1.22
    IP route add 192.168.1.13/32 dev enp2s0 src 192.168.1.23
    IP route add 192.168.1.14/32 dev enp2s0 src 192.168.1.24
    

Acest lucru trebuie făcut astfel: câte o adresă (DNAT ar putea fi simplificat/factorizat, dar nu a doua parte care se ocupă de sursă).

O conexiune cu realul 192.168.1.10 adresa este lăsată neschimbată.

drapel cn
multumesc mult @a-b - solutie si explicatie excelenta - cu aceasta abordare am reusit sa fac totul sa mearga!!

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.