Puncte:0

Serverul meu backend VM nu poate vedea IP extern direcționat cu Iptables către IP intern VPN

drapel ar

Folosesc Iptables pentru a direcționa traficul https de la Internet către o rețea internă prin HAproxy. Regulile Iptables NAt sunt:

iptables -i eth0 -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.0.0.7
iptables -i eth0 -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.7

iptables -t nat -A POSTROUTING -j MASQUERADE

au fost 10.0.0.0/24 este un VPN Wireguard (IP-ul serverului este 10.0.0.1, IP-ul haproxy este 10.0.0.7)

Apoi vreau să văd IP-ul de origine conectat în HAproxy, dar pot vedea numai IP-ul serverului VPN:

# coada -f /var/log/haproxy

14 iulie 18:27:02 localhost haproxy[13304]: 10.0.0.1:57539 [14/Jul/2021:18:27:02.199] fe-frontend-https~ fe-frontend-https/<NOSRV> -1/- 1/-1/-1/0 503 99 - - SC-- 1/1/0/0/0 0/0 „GET /.env HTTP/1.1

Cum pot proxy traficul într-un mod transparent, astfel încât HAproxy să poată înregistra IP-ul extern de origine?

Mulțumiri

editat:

Toate regulile Iptables:

# iptables -L --line-numbers -v
INTRARE în lanț (politica ACCEPTĂ 757M pachete, 641G octeți)
num pkts octeți target prot opt ​​in out sursă destinație         
1 0 0 ACCEPT udp -- virbr10 oriunde oriunde udp dpt:domeniu
2 0 0 ACCEPT tcp -- virbr10 oriunde oriunde tcp dpt:domeniu
3 83841 27M ACCEPT udp -- virbr10 oriunde oriunde udp dpt:bootps
4 0 0 ACCEPT tcp -- virbr10 oriunde oriunde tcp dpt:67
5 12 1008 ACCEPT icmp -- orice orice 10.0.0.0/8 oriunde icmp echo-request
6 0 0 ACCEPT icmp -- orice orice 10.0.0.0/8 oriunde icmp echo-reply

Lanț FORWARD (politica ACCEPTĂ 482M pachete, 578G octeți)
num pkts octeți target prot opt ​​in out sursă destinație         
1 589M 441G ACCEPT pe toate -- orice virbr10 oriunde 192.168.100.0/24 ctstate RELATED,STABLISHED
2 744M 637G ACCEPT pe toate -- virbr10 orice 192.168.100.0/24 oriunde            
3 0 0 ACCEPT toate -- virbr10 virbr10 oriunde oriunde            
4 0 0 REJECT all -- orice virbr10 oriunde oriunde respingere-cu icmp-port-inaccesibil
5 296 11864 REJECT all -- virbr10 oriunde oriunde respingere-cu icmp-port-inaccesibil

IEȘIRE în lanț (politica ACCEPTĂ 753M pachete, 664G octeți)
num pkts octeți target prot opt ​​in out sursă destinație         
1 83839 28M ACCEPT udp -- orice virbr10 oriunde oriunde udp dpt:bootpc

# iptables -L -n -t nat -v

PRERUUTARE în lanț (politica ACCEPTĂ 31 de milioane de pachete, 1964 de milioane de octeți)
 pkts bytes target prot opt ​​in out source destination         
23743 1296K DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 la:10.0.0.7
 3935 182K DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 la:10.0.0.7


INTRARE în lanț (politica ACCEPT 0 pachete, 0 octeți)
 pkts bytes target prot opt ​​in out source destination         

POSTROUTING în lanț (politica ACCEPTĂ 9549 pachete, 531K octeți)
 pkts bytes target prot opt ​​in out source destination         
    0 0 RETURN all -- * * 192.168.100.0/24 255.255.255.255     
 4660 280K MASQUERADE tcp -- * * 192.168.100.0/24 !192.168.100.0/24 masq porturi: 1024-65535
 7729 704K MASQUERADE udp -- * * 192.168.100.0/24 !192.168.100.0/24 masq porturi: 1024-65535
    2 168 MASQUERADE toate -- * * 192.168.100.0/24 !192.168.100.0/24    
    0 0 RETURN all -- * * 192.168.100.0/24 224.0.0.0/24        
    0 0 RETURN all -- * * 192.168.100.0/24 255.255.255.255     
    0 0 MASQUERADE tcp -- * * 192.168.100.0/24 !192.168.100.0/24 masq porturi: 1024-65535
    0 0 MASQUERADE udp -- * * 192.168.100.0/24 !192.168.100.0/24 masq porturi: 1024-65535
    0 0 MASQUERADE toate -- * * 192.168.100.0/24 !192.168.100.0/24    
  19M 1143M MASQUERADE toate -- * * 0.0.0.0/0 0.0.0.0/0           
    0 0 MASQUERADE toate -- * * 0.0.0.0/0 0.0.0.0/0           
    0 0 MASQUERADE toate -- * * 0.0.0.0/0 0.0.0.0/0           

IEȘIRE în lanț (politica ACCEPT 20209 pachete, 2137K octeți)
 pkts bytes target prot opt ​​in out source destination   

(în mare parte sunt reguli NAT implicite pentru libvirt)

djdomi avatar
drapel za
doar o întrebare similară, de ce să nu folosiți HA-proxy în față pe prima mașină și să-l folosiți pentru a accesa țintele LAN?
Puncte:0
drapel cz

Regula MASQUERADE pe care ați specificat-o este prea largă. Ați specificat să mascați tot traficul care părăsește această gazdă prin orice interfață, astfel tot traficul este NAT și adresa sursă este rescrisă, chiar dacă este inutil și în acest caz nedorit.

(Și din anumite motive, regula este de trei ori.)

Masquerading ar trebui să fie aplicat numai traficului care părăsește marginea către Internet, astfel încât ar trebui să specificați interfața de ieșire (care are adresa dvs. IP globală) în regula dvs. de masquerade. De exemplu:

iptables -t nat -o eth0 -A POSTROUTING -j MASQUERADE

Celelalte reguli de mascarada eronate ar trebui șterse.

drapel ar
Mulțumesc mult pentru sugestia despre MASQUERADE doar către interfață. Din păcate, în jurnalul HAproxy mai văd doar IP-ul privat 10.0.0.1 în loc de IP-ul de origine externă...
Michael Hampton avatar
drapel cz
@Ecofintech Trebuie să ștergeți și celelalte reguli.
drapel ar
Te referi la regulile legate de 192.168.100.0/24? NAT-ul libvirt?
drapel ar
Mi-e teamă să sparg virbr10 al libvirt NAT...
drapel ar
Pentru orice referință, am urmat acest tutorial despre configurația personalizată NAT Iptables libvirt: https://jamielinux.com/docs/libvirt-networking-handbook/custom-nat-based-network.html
Michael Hampton avatar
drapel cz
Nu, acele reguli pot fi lăsate în vigoare. Mă refer la cele trei reguli pe care le-ai adăugat. Sau sursa traficului este una dintre VM-urile tale? Ai spus că vine de pe internet?
drapel ar
Am eliminat cele trei reguli MASQUERADE, da. Acestea au fost greșeala mea când am făcut teste. Serverul gazdă trimite trafic de porturi 443 și 80 către o VM cu HAproxy, ascultând într-o interfață VPN Wireguard.

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.