เรามีเครื่องเสมือนที่มีที่อยู่ IPv4 สาธารณะซึ่งของเรา ตัวอย่าง.คอม
และ *.example.com
จุดโดเมน
เรามีคอมพิวเตอร์เทคโนโลยีต่ำกระจายอยู่หลายเครื่องที่สร้างการเชื่อมต่อ/อุโมงค์ wireguard กับเครื่องเสมือนที่เข้าถึงได้แบบสาธารณะ
เราต้องการให้เครื่องเสมือนให้บริการเว็บไซต์บนพอร์ต 80
/443
, ยอมรับการเชื่อมต่อ ssh ผ่านพอร์ต 22
, และอื่น ๆ.
เราต้องการให้คอมพิวเตอร์เทคโนโลยีต่ำเข้าถึงได้แบบสาธารณะผ่านโดเมนย่อยที่เกี่ยวข้อง เช่น โลว์-เทค-01.example.com
, โลว์-เทค-02.example.com
และอื่นๆ และคำขอพร็อกซี/การกำหนดเส้นทางไปยังที่อยู่ IP ในพื้นที่/Wireguard ที่เกี่ยวข้อง สิ่งนี้ควรใช้ได้กับเว็บไซต์ผ่านพอร์ต 80
/443
, การเชื่อมต่อ ssh ผ่านพอร์ต 22
, และอื่น ๆ.
แก้ไข: ตามหลักการแล้ว ใบรับรอง SSL ควรให้บริการจากคอมพิวเตอร์เทคโนโลยีต่ำ และไม่ควรยกเลิกการเชื่อมต่อ SSL บนเครื่องเสมือน
แก้ไข: ตามหลักการแล้ว คีย์ส่วนตัว ssh สำหรับสร้างการเชื่อมต่อกับคอมพิวเตอร์เทคโนโลยีต่ำไม่ควรมีอยู่ในเครื่องเสมือน แต่จะมีอยู่ในไคลเอ็นต์เท่านั้น
แก้ไข: สำหรับ ssh เราสามารถเปิดและกำหนดเส้นทางหนึ่งพอร์ตที่ไม่ซ้ำกันสำหรับคอมพิวเตอร์เทคโนโลยีต่ำแต่ละเครื่องจาก public_IPv4:22xxx
ถึง ท้องถิ่น/wireguard_IP:22
น่าเสียดาย หลังจากใช้เวลาสองวันกับการลองผิดลองถูกการกำหนดค่า nginx เราพบว่างานนี้อาจไม่สามารถแก้ไขได้ด้วย nginx เพียงอย่างเดียว
หมายเหตุ: ssh ไม่ส่ง SNI; nginx ไม่สามารถฟังบนพอร์ตเดียวกันได้ http
เช่นเดียวกับ ลำธาร
การเชื่อมต่อ; และอาจจะมีปัญหามากขึ้น
นอกจากนี้ เรายังขาดความคิดโดยสิ้นเชิงและถูกครอบงำด้วยแนวทางดังกล่าว สามารถ แน่นอนแก้ปัญหานี้อย่างถูกต้อง
(www\.)?example.com
â> สาธารณะ IPv4 â> เว็บไซต์ ssh ฯลฯ
โลว์-เทค-01.example.com
â> IPv4 สาธารณะ â> ??? ~> 10.0.0.101
â> เว็บไซต์ ssh ฯลฯ
โลว์-เทค-02.example.com
â> IPv4 สาธารณะ â> ??? ~> 10.0.0.102
â> เว็บไซต์ ssh ฯลฯ
¦
ขอบคุณสำหรับคำแนะนำและเวลาของคุณ
â
แก้ไข: nginx ต่อไปนี้ ลำธาร
การกำหนดค่าใกล้เคียงกับสิ่งที่เราพยายามทำให้สำเร็จ ข้อเสียเพียงอย่างเดียว (อาจจะ) คือเราต้องกำหนดพอร์ตด้วยตนเองสำหรับคอมพิวเตอร์เทคโนโลยีต่ำแต่ละเครื่องแทนที่จะต้องจัดการแบบไดนามิกเช่นสำหรับการเชื่อมต่อ SSL
ลำธาร {
แผนที่ $ssl_preread_server_name $name {
example.com ตัวอย่างดอทคอม;
www.example.com ตัวอย่าง.com;
โลว์เทค-01.example.com โลว์เทค-01.example.com;
โลว์-เทค-02.example.com โลว์-เทค-02.example.com;
}
ต้นน้ำ example.com {
เซิร์ฟเวอร์ 127.0.0.1:8443;
}
ต้นน้ำเทคโนโลยีต่ำ-01.example.com {
เซิร์ฟเวอร์ 10.0.0.101:443;
}
ต้นน้ำเทคโนโลยีต่ำ-02.example.com {
เซิร์ฟเวอร์ 10.0.0.102:443;
}
เซิร์ฟเวอร์ {
ฟัง 443;
proxy_pass $ชื่อ;
ssl_preread บน;
}
เซิร์ฟเวอร์ {
ฟัง 22101;
proxy_pass 10.0.0.101:22;
}
เซิร์ฟเวอร์ {
ฟัง 22102;
proxy_pass 10.0.0.102:22;
}
¦
}