ฉันใช้ 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)