Score:0

เซิร์ฟเวอร์แบ็กเอนด์ VM ของฉันไม่สามารถมองเห็น IP ภายนอกที่ถูกกำหนดเส้นทางด้วย Iptables ไปยัง VPN ภายในของ VPN

ธง ar

ฉันใช้ Iptables เพื่อกำหนดเส้นทางการรับส่งข้อมูล https จากอินเทอร์เน็ตไปยังเครือข่ายภายในผ่าน HAproxy กฎ Iptables NAt คือ:

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 โพสต์ -j MASQUERADE

เป็น 10.0.0.0/24 เป็น Wireguard VPN (IP ของเซิร์ฟเวอร์คือ 10.0.0.1, IP ของ haproxy คือ 10.0.0.7)

จากนั้นฉันต้องการดู IP ต้นทางที่บันทึกใน HAproxy แต่ฉันเห็นได้เฉพาะ IP ของเซิร์ฟเวอร์ VPN:

# หาง -f /var/log/haproxy

14 กรกฎาคม 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 "รับ /.env HTTP/1.1

ฉันจะพร็อกซีทราฟฟิกด้วยวิธี trasnparent ได้อย่างไร ดังนั้น HAproxy จึงสามารถบันทึก IP ภายนอกต้นทางได้

ขอบคุณ

แก้ไข:

กฎ Iptables ทั้งหมด:

# iptables -L --line-numbers -v
Chain INPUT (นโยบายยอมรับแพ็กเก็ต 757M, 641G ไบต์)
num pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
1 0 0 ยอมรับ udp -- virbr10 ที่ไหนก็ได้ทุกที่ udp dpt:domain
2 0 0 ยอมรับ tcp -- virbr10 ทุกที่ ทุกแห่ง tcp dpt:domain
3 83841 27M ยอมรับ udp -- virbr10 ที่ไหนก็ได้ทุกที่ udp dpt:bootps
4 0 0 ยอมรับ tcp -- virbr10 ทุกที่ ทุกแห่ง tcp dpt:67
5 12 1008 ยอมรับ icmp -- ใดๆ 10.0.0.0/8 ทุกที่ icmp echo-request
6 0 0 ยอมรับ icmp -- ใดๆ 10.0.0.0/8 ทุกที่ icmp echo-reply

ส่งต่อไปข้างหน้า (นโยบายยอมรับแพ็กเก็ต 482M, 578G ไบต์)
num pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
1 589M 441G ยอมรับทั้งหมด -- virbr10 ใดๆ ได้ทุกที่ 192.168.100.0/24 ctstate ที่เกี่ยวข้อง ก่อตั้ง
2 744M 637G ยอมรับทั้งหมด -- virbr10 ใดๆ 192.168.100.0/24 ได้ทุกที่            
3 0 0 ยอมรับทั้งหมด -- virbr10 virbr10 ทุกที่ ทุกแห่ง            
4 0 0 ปฏิเสธทั้งหมด -- virbr10 ใด ๆ ทุกที่ที่ปฏิเสธด้วย icmp-port- ไม่สามารถเข้าถึงได้
5 296 11864 ปฏิเสธทั้งหมด -- virbr10 ได้ทุกที่ ปฏิเสธด้วย icmp-port-ไม่สามารถเข้าถึงได้

Chain OUTPUT (นโยบายยอมรับแพ็กเก็ต 753M, 664G ไบต์)
num pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
1 83839 28M ยอมรับ udp -- virbr10 ใด ๆ ทุกที่ udp dpt:bootpc

# iptables -L -n -t แนท -v

เชน PREROUTING (นโยบายยอมรับแพ็กเก็ต 31M, 1964M ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
23743 1296K DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 ถึง:10.0.0.7
 3935 182K DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ถึง:10.0.0.7


Chain INPUT (นโยบายยอมรับ 0 แพ็กเก็ต, 0 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         

ห่วงโซ่ POSTROUTING (นโยบายยอมรับแพ็กเก็ต 9549, 531K ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง         
    0 0 คืนทั้งหมด -- * * 192.168.100.0/24 255.255.255.255     
 4660 280K MASQUERADE tcp -- * * 192.168.100.0/24 !192.168.100.0/24 พอร์ต masq: 1024-65535
 7729 704K MASQUERADE udp -- * * 192.168.100.0/24 !192.168.100.0/24 พอร์ต masq: 1024-65535
    2 168 สวมหน้ากากทั้งหมด -- * * 192.168.100.0/24 !192.168.100.0/24    
    0 0 คืนทั้งหมด -- * * 192.168.100.0/24 224.0.0.0/24        
    0 0 คืนทั้งหมด -- * * 192.168.100.0/24 255.255.255.255     
    0 0 MASQUERADE tcp -- * * 192.168.100.0/24 !192.168.100.0/24 พอร์ต masq: 1024-65535
    0 0 MASQUERADE udp -- * * 192.168.100.0/24 !192.168.100.0/24 พอร์ต masq: 1024-65535
    0 0 สวมหน้ากากทั้งหมด -- * * 192.168.100.0/24 !192.168.100.0/24    
  19M 1143M MASQUERADE ทั้งหมด -- * * 0.0.0.0/0 0.0.0.0/0           
    0 0 สวมหน้ากากทั้งหมด -- * * 0.0.0.0/0 0.0.0.0/0           
    0 0 สวมหน้ากากทั้งหมด -- * * 0.0.0.0/0 0.0.0.0/0           

Chain OUTPUT (นโยบายยอมรับแพ็กเก็ต 20209, 2137K ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง   

(ส่วนใหญ่เป็นกฎ NAT เริ่มต้นสำหรับ libvirt)

djdomi avatar
za flag
เป็นคำถามที่คล้ายกัน ทำไมไม่ใช้ HA-proxy infront บนเครื่องแรกของคุณและใช้เพื่อเข้าถึงเป้าหมาย lan
Score:0
ธง cz

กฎ MASQUERADE ที่คุณระบุกว้างเกินไป คุณได้กำหนดให้ปลอมแปลงทราฟฟิกทั้งหมดออกจากโฮสต์นี้ผ่านทาง ใดๆ อินเทอร์เฟซ ดังนั้นทราฟฟิกทั้งหมดจึงได้รับการ NATted และที่อยู่ต้นทางถูกเขียนใหม่ แม้ว่าจะไม่จำเป็นและไม่พึงประสงค์ในกรณีนี้ก็ตาม

(และด้วยเหตุผลบางประการ กฎจึงมีสามครั้ง)

ควรใช้การปลอมแปลงเฉพาะกับทราฟฟิกที่ออกจากขอบของอินเทอร์เน็ต ดังนั้นคุณควรระบุอินเทอร์เฟซขาออก (ซึ่งมีที่อยู่ IP ส่วนกลางของคุณ) ในกฎการปลอมแปลงของคุณ ตัวอย่างเช่น:

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

ควรลบกฎการสวมหน้ากากที่ผิดพลาดอื่นๆ

ar flag
ขอบคุณมากสำหรับคำแนะนำเกี่ยวกับ MASQUERADE ต่ออินเทอร์เฟซเท่านั้น น่าเสียดายในบันทึก HAproxy ฉันยังคงเห็นเฉพาะ IP ส่วนตัว 10.0.0.1 แทนที่จะเป็น IP ต้นทางภายนอก...
Michael Hampton avatar
cz flag
@Ecofintech คุณต้องลบกฎอื่นๆ ด้วย
ar flag
คุณหมายถึงกฎที่เกี่ยวข้องกับ 192.168.100.0/24 หรือไม่ libvirt NAT?
ar flag
ฉันกลัวที่จะทำลาย virbr10 ของ libvirt NAT...
ar flag
สำหรับการอ้างอิงใด ๆ ฉันทำตามบทช่วยสอนนี้เกี่ยวกับการกำหนดค่า NAT Iptables ที่กำหนดเองของ libvirt: https://jamielinux.com/docs/libvirt-networking-handbook/custom-nat-based-network.html
Michael Hampton avatar
cz flag
ไม่ กฎเหล่านั้นสามารถคงอยู่ต่อไปได้ ฉันหมายถึงกฎสามข้อที่คุณเพิ่มเข้ามา หรือแหล่งที่มาของการเข้าชมเป็นหนึ่งใน VM ของคุณ คุณบอกว่ามันมาจากอินเทอร์เน็ต?
ar flag
ฉันลบกฎ MASQUERADE สามข้อออก ใช่ นั่นเป็นความผิดพลาดของฉันในการทำข้อสอบ โฮสต์เซิร์ฟเวอร์ส่งทราฟฟิกพอร์ต 443 และ 80 ไปยัง VM ด้วย HAproxy โดยฟังในอินเทอร์เฟซ Wireguard VPN

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา