ฉันจะส่งต่อการรับส่งข้อมูลทั้งหมดที่มาถึงพอร์ตที่กำหนดไปยังพอร์ตอื่นได้อย่างไร
กำหนดเค้าโครงและปัญหา
เค้าโครง
นี่คือเค้าโครงของสิ่งที่ฉันพยายามทำ ...
++--------+ +----------------------------+ +---------------- +
| วาน | <---> | 6789 | | |
| ลูกค้า | | เกตเวย์ | | โฮสต์ |
| | | 4567 | <---> | 2345 บริการ |
++--------+ +----------------------------+ +---------------- +
ฉันต้องการส่งต่อการรับส่งข้อมูลทั้งหมดที่มาถึงพอร์ต 6789 ไปยังพอร์ต 4567 อย่างโปร่งใส ไคลเอนต์บน WAN และบริการบนโฮสต์ไม่ควรรู้อะไรเลยเกี่ยวกับเกตเวย์
เกตเวย์คือ Debian 10 พร้อมไฟร์วอลล์
ปัญหา
ฉันไม่สามารถรับทราฟฟิกที่มาถึงพอร์ต 6789 บนเกตเวย์เพื่อส่งต่อไปยังพอร์ต 4567
การตั้งค่าปัจจุบัน
ขั้นตอนที่ 01 - เปิดเผยพอร์ตบนไฟร์วอลล์และยืนยันว่าพอร์ตเปิดอยู่
เปิดพอร์ตบนเกตเวย์
เรียกใช้ ไฟร์วอลล์-cmd
สั่งการ: ไฟร์วอลล์ cmd --add-port=6789
ตรวจสอบสถานะไฟร์วอลล์...
root@gateway:~# firewall-cmd --list-all
สาธารณะ (ใช้งานอยู่)
เป้าหมาย: ค่าเริ่มต้น
icmp-block-inversion: ไม่
อินเทอร์เฟซ: etho0
แหล่งที่มา:
บริการ: dhcpv6-client http https ssh
พอร์ต: 6789/tcp
โปรโตคอล:
สวมหน้ากาก: ใช่
พอร์ตไปข้างหน้า:
พอร์ตต้นทาง:
icmp บล็อก:
กฎมากมาย:
- ยืนยันว่าพอร์ตเปิดอยู่
- บนเกตเวย์ ให้เริ่มฟัง:
nc -vvlp 6789 &
- ยืนยันฟังขึ้น...
root@gateway:~# netstat -tulnp | เกรป 6789
tcp 0 0 0.0.0.0:6789 0.0.0.0:* ฟัง 2274/nc
- จากลูกค้า พยายามเข้าถึงเกตเวย์:
client@client123:~$ nc -vvN gateway.example.org 6789
การเชื่อมต่อกับพอร์ต gateway.example.org 6789 [tcp/*] สำเร็จ!
สรุป: พอร์ต 6789 เปิดอยู่บนไฟร์วอลล์
ทำความสะอาดโดยการฆ่า เอ็นซี
ประมวลผลทั้งบนไคลเอ็นต์และเกตเวย์
ขั้นตอนที่ 02 - ยืนยันการเชื่อมต่อระหว่างเกตเวย์และบริการบนโฮสต์
root@gateway:~# telnet localhost 4567
ลอง 127.0.0.1...
เชื่อมต่อกับ localhost
อักขระ Escape คือ '^]'
220 backendhost.backendhost MyService (เดเบียน/GNU)
สรุป: อุโมงค์ระหว่างเกตเวย์และบริการบนโฮสต์นั้นหยุดทำงาน
ขั้นตอนที่ 3 - เพิ่มพอร์ตส่งต่อบนเกตเวย์และตรวจสอบสถานะไฟร์วอลล์
root@gateway:~# firewall-cmd --add-forward-port=port=6789:proto=tcp:toport=4567`
root@gateway:~# firewall-cmd --list-all
สาธารณะ (ใช้งานอยู่)
เป้าหมาย: ค่าเริ่มต้น
icmp-block-inversion: ไม่
อินเทอร์เฟซ: etho0
แหล่งที่มา:
บริการ: dhcpv6-client ssh
พอร์ต: 6789/tcp
โปรโตคอล:
สวมหน้ากาก: ไม่
ส่งต่อพอร์ต: port=6789:proto=tcp:toport=4567:toaddr=
พอร์ตต้นทาง:
icmp บล็อก:
กฎมากมาย:
สรุป: การส่งต่อพอร์ตอยู่ในไฟร์วอลล์
ณ จุดนี้ ถ้าฉันพยายาม telnet โฮสต์จากลูกค้า ฉันจะได้...
client@client123:~$ telnet gateway.example.org 6789
กำลังพยายาม <IP_of_gateway>...
telnet: ไม่สามารถเชื่อมต่อกับโฮสต์ระยะไกล: การเชื่อมต่อถูกปฏิเสธ
ณ จุดนี้ ฉันต้องการเห็นสิ่งที่ฉันเห็นในขั้นตอนที่ 02 ด้านบน
คำถาม
นี่ผมไม่แน่ใจ...
เมื่อฉันวิ่ง netstat -tulnp
บนเกตเวย์ มันไม่แสดงอะไรที่กำลังฟังอยู่บนพอร์ต 6789 ฉันไม่คาดหวังให้เป็นเช่นนั้น เนื่องจากฉันไม่มีบริการใดๆ ที่รันบนพอร์ต 6789
ฉันต้องการบริการบางอย่างเพื่อฟังบนพอร์ต 6789 หรือไม่ ถ้าอย่างนั้นล่ะ? หรือฉันพลาดบางอย่างในการตั้งค่าไฟร์วอลล์? ฉันต้องการพร็อกซีแบบโปร่งใสตามที่กล่าวไว้หรือไม่ ที่นี่?
ฉันจะไม่ยุ่งกับโพสต์นี้ด้วยลิงก์ไปยังเนื้อหาทั้งหมดที่ฉันได้อ่านในช่วง 2-3 สัปดาห์ที่ผ่านมา แต่ถ้ามีโพสต์ที่มีคำตอบ โปรดอย่าลังเลที่จะชี้ให้เห็น
แก้ไข
กำลังตอบกลับถึง @A.B
โฮสต์ทำงานหลังไฟร์วอลล์ เมื่อโฮสต์เริ่มทำงาน โฮสต์จะสร้างอุโมงค์ไปยังเกตเวย์โดยอัตโนมัติโดยใช้พอร์ต SSH ที่ส่งต่อ
นี่คือคำสั่งที่โฮสต์รันเมื่อบู๊ต: ssh -N -R 4567:localhost:2345 [email protected]
อุโมงค์นั้นขึ้นตามที่ได้รับการยืนยันในขั้นตอนที่ 02 และในขณะที่ฉันไม่ได้พูดถึงก่อนหน้านี้ ไคลเอนต์จะทำงานเมื่ออยู่บน LAN เดียวกันกับโฮสต์
สิ่งที่ฉันกำลังดิ้นรนคือการรับปริมาณข้อมูลมาถึงเกตเวย์เพื่อส่งผ่านไปยังโฮสต์ได้สำเร็จ เกตเวย์จะต้อง "โปร่งใส" ใบรับรองความปลอดภัยถือโดยโฮสต์และไคลเอ็นต์ควรคิดว่ากำลังพูดกับโฮสต์โดยตรง
ฉันยังคงพยายามเรียนรู้คำศัพท์ต่างๆ ดังนั้นหากมีวิธีที่ถูกต้องกว่านี้ในการถามคำถามนี้ ฉันก็พร้อมที่จะรู้ว่ามันคืออะไร