Reverse Proxy สำหรับพอร์ตทั้งหมด


0

ฉันกำลังทำงานกับระบบที่ลูกค้าของฉันแต่ละคนมีราสเบอร์รี่ปี่แยกต่างหากที่กำหนดให้กับพวกเขาซึ่งพวกเขาสามารถเรียกใช้สิ่งที่พวกเขาต้องการ (เช่นเกมเซิร์ฟเวอร์หรือเว็บเซิร์ฟเวอร์ที่มีพอร์ตที่กำหนดเอง) ฉันจะย้อนกลับแต่ละพร็อกซีได้อย่างไร ตามคำถามนี้ฉันสามารถใช้ NAT คืออะไรและฉันจะตั้งค่าได้อย่างไร นอกจากนี้ฉันสามารถใช้มันเพื่อบล็อกพอร์ตเฉพาะเช่น พอร์ต 25 และรับบันทึก ฯลฯ ?


โปรดอธิบายอย่างละเอียดว่าทำไมคุณถึงต้องการ "reverse proxy" แต่ละอุปกรณ์หรือบริการในตอนแรก คุณมีลูกค้ามากกว่าที่อยู่ IP หรือไม่
grawity

ฉันมี 1 ที่อยู่ IP และ pi แต่ละโดเมนจะมีโดเมนย่อยเช่น pi1.example.org

คำตอบ:


0

ฉันจะย้อนกลับแต่ละพร็อกซีได้อย่างไร

โดยทั่วไป: คุณจะไม่


จากคำถามของคุณดูเหมือนว่าคุณกำลังพยายามแบ่งปันที่อยู่ 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 เดียวกัน: พอร์ตข้ามหลายโดเมน แต่มาพร้อมกับข้อกำหนด:

  1. ซอฟต์แวร์พร็อกซีต้องเข้าใจโปรโตคอลที่เป็นปัญหา มันจะต้องมีจุดประสงค์ที่สร้างขึ้นสำหรับโปรโตคอลนั้น ซึ่งหมายความว่าคุณไม่สามารถใช้ "พอร์ตทั้งหมด" โดยพลการและใช้งานได้กับบริการเบ็ดเตล็ดใด ๆ ที่ลูกค้าของคุณจะเรียกใช้
  2. โปรโตคอลต้องมีตัวระบุ "โฮสต์" หรือ "โดเมน" บางส่วนเป็นส่วนหนึ่งของข้อความ ไม่ใช่ทุกโปรโตคอลที่มีตัวระบุดังกล่าว ในความเป็นจริงส่วนใหญ่ทำไม่ได้
  3. พร็อกซี่เขียนที่อยู่เลเยอร์ที่ต่ำกว่า; ลูกค้าของคุณจะเห็นการเชื่อมต่อทั้งหมดที่มาจากพร็อกซีนั้นเว้นแต่ว่าบริการจะมีวิธีการจัดการกับสิ่งนั้น (เช่น X-Forwarded-For หรือที่เรียกว่า "PROXY protocol")

ดังนั้นการใช้พร็อกซีสำหรับอุปกรณ์หลายเครื่องจึง จำกัด HTTP และ HTTPS (ซึ่งมีส่วนหัว "โฮสต์"); บวกบริการที่ใช้ TLS (ซึ่งมี SNI และ ALPN); รวมทั้งอาจ DNS และ SMTP (ตามที่อยู่ผู้รับ); และ mayyybe ที่ไม่ปลอดภัย POP3 / IMAP / FTP (ขึ้นอยู่กับชื่อเข้าสู่ระบบ)

สำหรับเซิร์ฟเวอร์เกมแม้ว่าจะไม่ใช่ตัวเลือก - คุณต้องใช้พอร์ตเฉพาะ (หรือหลายพอร์ต) สำหรับแต่ละบริการในแต่ละอุปกรณ์ มักจะเรียกว่า "การส่งต่อพอร์ต" หรือ "DNAT" เป็นสิ่งเดียวกับคุณสมบัติการส่งต่อพอร์ตในเราเตอร์ที่บ้านของคุณ และมีชุดของปัญหา:

  1. ไม่ทราบเกี่ยวกับโดเมน DNS และทำงานโดยตรงกับระดับที่อยู่ IP หากโดเมนทั้งหมดของคุณแก้ไขเป็นที่อยู่ IP เดียวพวกเขาทั้งหมดมีกฎการส่งต่อพอร์ตที่แน่นอน

    ซึ่งหมายความว่าแต่ละพอร์ต TCP หรือ UDP บนที่อยู่ IP ที่กำหนดสามารถส่งต่อไปยังอุปกรณ์เดียวได้เท่านั้น ยกตัวอย่างเช่นในกรณีที่ลูกค้าได้รับ 1 พอร์ต SSH มาตรฐานพูดpi1.example.com:22นั่นหมายความว่าpi2.example.com:22หรือpi3.example.com:22จะยังไปที่อุปกรณ์ไคลเอ็นต์ 1 - ลูกค้าอื่น ๆ ในขณะนี้ไม่สามารถใช้พอร์ตนี้สำหรับการเชื่อมต่อขาเข้าที่ทั้งหมด (ขึ้นอยู่กับซอฟต์แวร์ที่ทำงานกับ NAT พวกเขาอาจไม่สามารถใช้สำหรับการเชื่อมต่อขาออกได้)

  2. มีพอร์ต TCP เพียง ~ 65k และพอร์ต UDP ~ 65k (ต่อที่อยู่ IP) และพวกเขาจำเป็นต้องใช้สำหรับการเชื่อมต่อขาเข้า (หนึ่งต่อการบริการบางครั้งมากกว่า) และสำหรับการเชื่อมต่อขาออก (เป็นพอร์ตต้นทางโดยทั่วไปหนึ่งต่อการเชื่อมต่อ) . ดังนั้นในทางปฏิบัติคุณไม่สามารถมีมากกว่า ... พูดว่า ~ กฎการส่งต่อพอร์ต 32k

  3. บริการบางอย่างต้องใช้พอร์ตเฉพาะ ตัวอย่างเช่น SMTP สำหรับการส่งจดหมายขาเข้าจะใช้พอร์ต TCP 25 เสมอ IKE ใช้พอร์ต UDP 500 และ 4500 เซิร์ฟเวอร์เกมมักจะต้องใช้ช่วงพอร์ตเฉพาะ หากหนึ่งในลูกค้าของคุณขอสงวนช่วงที่เฉพาะเจาะจงลูกค้าอื่นไม่สามารถเรียกใช้บริการเดียวกันได้


สำหรับวิธีการตั้งค่า - ฉันขอแนะนำให้เริ่มต้นด้วย DNAT เพราะส่วนใหญ่คุณจะต้องใช้พร็อกซีย้อนกลับอยู่แล้ว

คืออะไรและฉันจะตั้งค่าได้อย่างไร

ตามที่กล่าวไว้ NAT สำหรับการเชื่อมต่อขาเข้า (DNAT) มักจะรู้จักกันในชื่อ "การส่งต่อพอร์ต" และมีการกำหนดค่าโดยตรงบนเราเตอร์ของคุณ (อุปกรณ์ที่ 'เป็นเจ้าของ' ที่อยู่ IP สาธารณะของคุณ) และจะอธิบายในคู่มือของอุปกรณ์

(ถ้าเราเตอร์ใช้ Linux หรือ FreeBSD ปกติกฎ DNAT จะถูกเพิ่มผ่านiptablesหรือpfเช่นเดียวกับกฎไฟร์วอลล์)

นอกจากนี้ฉันสามารถใช้มันเพื่อบล็อกพอร์ตเฉพาะเช่น พอร์ต 25 และรับบันทึก ฯลฯ ?

ใช่และไม่. สิ่งเหล่านี้คือคุณสมบัติของไฟร์วอลล์ของคุณ ไฟร์วอลล์ที่เหมาะสมจะมีพวกเขา (ฉันหมายความว่านั่นคือสิ่งที่ไฟร์วอลล์ทำ ) แต่พวกเขาจะอยู่ที่นั่นพร้อมกับ NAT แต่ไม่ใช่ส่วนหนึ่งของ NAT


มีอะไรที่ฉันสามารถใช้ที่อนุญาตให้ฉันทั้งสองมีอุปกรณ์แยกต่างหากสำหรับโดเมนที่แตกต่างกันและทำงานกับพอร์ตทั้งหมดหรือไม่ เช่นซอฟต์แวร์ชนิดพิเศษที่ฉันสามารถเรียกใช้กับเราเตอร์ได้หรือไม่

ไม่ได้วิธีเดียวที่จะทำให้การทำงานกับโพรโทคอลใด ๆ (เช่นไม่ จำกัด เพียง HTTP หรือ TLS) คือการรับที่อยู่ IP เพิ่มเติม ไม่เช่นนั้นระบบของคุณจะไม่ได้รับข้อมูลที่จำเป็นในการแยกแยะระหว่างโดเมนและไม่มีซอฟต์แวร์หรือฮาร์ดแวร์ที่สามารถดึงออกมาจากอากาศได้
grawity

ตกลงมีค่าใช้จ่ายเฉลี่ยสำหรับ IP คงที่หรือไม่

สำหรับ IPv4 - มันแตกต่างกันมาก ขึ้นอยู่กับว่าคุณกำลังซื้อบุคคลจาก ISP ของคุณ (บางครั้งอาจต่ำเพียง $ 1 / ที่อยู่ / เดือน) หรือบล็อกทั้งหมดในตลาด (ต้องใช้บริการ BGP เพื่อใช้บล็อกจริงโดยมีค่าใช้จ่ายเพิ่มเติม)
grawity
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.