ฉันจะย้อนกลับแต่ละพร็อกซีได้อย่างไร
โดยทั่วไป: คุณจะไม่
จากคำถามของคุณดูเหมือนว่าคุณกำลังพยายามแบ่งปันที่อยู่ IP สาธารณะเดียวระหว่างอุปกรณ์ไคลเอนต์หลายแห่ง ทั้ง NAT และ reverse-proxying เป็นกลไกสำหรับสิ่งนั้นแม้ว่ามันจะทำงานในระดับที่ต่างกัน
(อย่างไรก็ตามหากคุณสามารถจ่าย IP แอดเดรสสาธารณะเฉพาะสำหรับทุกอุปกรณ์ได้ปัญหาจะไม่มีอยู่ในตอนแรกและกลไกทั้งสองนั้นไม่เกี่ยวข้องกันจริง)
DNAT (โดยทั่วไปเรียกว่า "การส่งต่อพอร์ต") มักจะทำงานที่ระดับการขนส่ง - มันอนุญาตให้อุปกรณ์หลาย ๆ อัน "ที่อยู่ IP" โดยการกำหนดช่วงของพอร์ต TCP หรือ UDP แต่ละอุปกรณ์
ตัวอย่างเช่นหากคุณเป็นเจ้าของที่อยู่ IP x.y.z.t
คุณสามารถส่งต่อ TCP พอร์ต 80 ( x.y.z.t:80
) ไปยังอุปกรณ์ A, พอร์ต 81 ไปยังอุปกรณ์ B และอื่น ๆ
Reverse proxying ใช้งานได้ในระดับแอปพลิเคชัน - อนุญาตให้อุปกรณ์หรือบริการหลายอย่าง "แชร์" IP เดียว: รวมกันพอร์ตโดยแยกคำขอตามตัวระบุบางอย่างที่พบในโปรโตคอล
ตัวอย่างเช่นหากคุณมีพร็อกซีย้อนกลับ HTTP ที่ทำงานอยู่x.y.z.t:80
คุณสามารถส่งต่อคำขอ HTTP ไปยังอุปกรณ์ต่าง ๆ ได้โดยขึ้นอยู่กับชื่อโดเมนที่ร้องขอ
Reverse proxying มีข้อดีที่พร็อกซีช่วยให้คุณแบ่งปัน IP เดียวกัน: พอร์ตข้ามหลายโดเมน แต่มาพร้อมกับข้อกำหนด:
- ซอฟต์แวร์พร็อกซีต้องเข้าใจโปรโตคอลที่เป็นปัญหา มันจะต้องมีจุดประสงค์ที่สร้างขึ้นสำหรับโปรโตคอลนั้น ซึ่งหมายความว่าคุณไม่สามารถใช้ "พอร์ตทั้งหมด" โดยพลการและใช้งานได้กับบริการเบ็ดเตล็ดใด ๆ ที่ลูกค้าของคุณจะเรียกใช้
- โปรโตคอลต้องมีตัวระบุ "โฮสต์" หรือ "โดเมน" บางส่วนเป็นส่วนหนึ่งของข้อความ ไม่ใช่ทุกโปรโตคอลที่มีตัวระบุดังกล่าว ในความเป็นจริงส่วนใหญ่ทำไม่ได้
- พร็อกซี่เขียนที่อยู่เลเยอร์ที่ต่ำกว่า; ลูกค้าของคุณจะเห็นการเชื่อมต่อทั้งหมดที่มาจากพร็อกซีนั้นเว้นแต่ว่าบริการจะมีวิธีการจัดการกับสิ่งนั้น (เช่น X-Forwarded-For หรือที่เรียกว่า "PROXY protocol")
ดังนั้นการใช้พร็อกซีสำหรับอุปกรณ์หลายเครื่องจึง จำกัด HTTP และ HTTPS (ซึ่งมีส่วนหัว "โฮสต์"); บวกบริการที่ใช้ TLS (ซึ่งมี SNI และ ALPN); รวมทั้งอาจ DNS และ SMTP (ตามที่อยู่ผู้รับ); และ mayyybe ที่ไม่ปลอดภัย POP3 / IMAP / FTP (ขึ้นอยู่กับชื่อเข้าสู่ระบบ)
สำหรับเซิร์ฟเวอร์เกมแม้ว่าจะไม่ใช่ตัวเลือก - คุณต้องใช้พอร์ตเฉพาะ (หรือหลายพอร์ต) สำหรับแต่ละบริการในแต่ละอุปกรณ์ มักจะเรียกว่า "การส่งต่อพอร์ต" หรือ "DNAT" เป็นสิ่งเดียวกับคุณสมบัติการส่งต่อพอร์ตในเราเตอร์ที่บ้านของคุณ และมีชุดของปัญหา:
ไม่ทราบเกี่ยวกับโดเมน DNS และทำงานโดยตรงกับระดับที่อยู่ IP หากโดเมนทั้งหมดของคุณแก้ไขเป็นที่อยู่ IP เดียวพวกเขาทั้งหมดมีกฎการส่งต่อพอร์ตที่แน่นอน
ซึ่งหมายความว่าแต่ละพอร์ต TCP หรือ UDP บนที่อยู่ IP ที่กำหนดสามารถส่งต่อไปยังอุปกรณ์เดียวได้เท่านั้น ยกตัวอย่างเช่นในกรณีที่ลูกค้าได้รับ 1 พอร์ต SSH มาตรฐานพูดpi1.example.com:22
นั่นหมายความว่าpi2.example.com:22
หรือpi3.example.com:22
จะยังไปที่อุปกรณ์ไคลเอ็นต์ 1 - ลูกค้าอื่น ๆ ในขณะนี้ไม่สามารถใช้พอร์ตนี้สำหรับการเชื่อมต่อขาเข้าที่ทั้งหมด (ขึ้นอยู่กับซอฟต์แวร์ที่ทำงานกับ NAT พวกเขาอาจไม่สามารถใช้สำหรับการเชื่อมต่อขาออกได้)
มีพอร์ต TCP เพียง ~ 65k และพอร์ต UDP ~ 65k (ต่อที่อยู่ IP) และพวกเขาจำเป็นต้องใช้สำหรับการเชื่อมต่อขาเข้า (หนึ่งต่อการบริการบางครั้งมากกว่า) และสำหรับการเชื่อมต่อขาออก (เป็นพอร์ตต้นทางโดยทั่วไปหนึ่งต่อการเชื่อมต่อ) . ดังนั้นในทางปฏิบัติคุณไม่สามารถมีมากกว่า ... พูดว่า ~ กฎการส่งต่อพอร์ต 32k
บริการบางอย่างต้องใช้พอร์ตเฉพาะ ตัวอย่างเช่น SMTP สำหรับการส่งจดหมายขาเข้าจะใช้พอร์ต TCP 25 เสมอ IKE ใช้พอร์ต UDP 500 และ 4500 เซิร์ฟเวอร์เกมมักจะต้องใช้ช่วงพอร์ตเฉพาะ หากหนึ่งในลูกค้าของคุณขอสงวนช่วงที่เฉพาะเจาะจงลูกค้าอื่นไม่สามารถเรียกใช้บริการเดียวกันได้
สำหรับวิธีการตั้งค่า - ฉันขอแนะนำให้เริ่มต้นด้วย DNAT เพราะส่วนใหญ่คุณจะต้องใช้พร็อกซีย้อนกลับอยู่แล้ว
คืออะไรและฉันจะตั้งค่าได้อย่างไร
ตามที่กล่าวไว้ NAT สำหรับการเชื่อมต่อขาเข้า (DNAT) มักจะรู้จักกันในชื่อ "การส่งต่อพอร์ต" และมีการกำหนดค่าโดยตรงบนเราเตอร์ของคุณ (อุปกรณ์ที่ 'เป็นเจ้าของ' ที่อยู่ IP สาธารณะของคุณ) และจะอธิบายในคู่มือของอุปกรณ์
(ถ้าเราเตอร์ใช้ Linux หรือ FreeBSD ปกติกฎ DNAT จะถูกเพิ่มผ่านiptablesหรือpfเช่นเดียวกับกฎไฟร์วอลล์)
นอกจากนี้ฉันสามารถใช้มันเพื่อบล็อกพอร์ตเฉพาะเช่น พอร์ต 25 และรับบันทึก ฯลฯ ?
ใช่และไม่. สิ่งเหล่านี้คือคุณสมบัติของไฟร์วอลล์ของคุณ ไฟร์วอลล์ที่เหมาะสมจะมีพวกเขา (ฉันหมายความว่านั่นคือสิ่งที่ไฟร์วอลล์ทำ ) แต่พวกเขาจะอยู่ที่นั่นพร้อมกับ NAT แต่ไม่ใช่ส่วนหนึ่งของ NAT