เปิดใช้ OpenVPN ใน Docker ภายใน 2 วินาที

สวัสดีชาว Khabrovsk! คุณเคยพบกับสถานการณ์ที่คุณอยากจะถูกส่งไปยังเมือง ประเทศ หรือทวีปอื่นแบบเสมือนจริงหรือไม่? ฉันมีความต้องการนี้ค่อนข้างบ่อย ดังนั้น โอกาสที่จะมีเซิร์ฟเวอร์ VPN ของตัวเอง ซึ่งสามารถเปิดใช้งานได้ทุกที่ภายในไม่กี่วินาทีจึงค่อนข้างเร่งด่วน ในบทความนี้ ฉันต้องการพูดคุยเกี่ยวกับโครงการของฉันซึ่งฉันคิดเมื่อตอนที่ฉันยังเป็น กำลังมองหาโซลูชันสำเร็จรูป ในกรณีนี้ นักเทียบท่า รูปภาพที่จะช่วยให้คุณสามารถตั้งค่าเซิร์ฟเวอร์ OpenVPN ได้อย่างรวดเร็วด้วยการตั้งค่าขั้นต่ำและระดับความปลอดภัยที่ยอมรับได้

เปิดใช้ OpenVPN ใน Docker ภายใน 2 วินาที

ประวัติศาสตร์

ความสามารถในการรันบริการบนเครื่องใดๆ ไม่ว่าจะเป็นเซิร์ฟเวอร์จริง เซิร์ฟเวอร์ส่วนตัวเสมือน หรือแม้แต่พื้นที่คอนเทนเนอร์ภายในระบบการจัดการคอนเทนเนอร์อื่น ถือเป็นสิ่งสำคัญ ฉันจ้องมองไปที่นักเทียบท่าทันที ประการแรกบริการนี้กำลังได้รับความนิยมดังนั้นผู้ให้บริการจำนวนมากขึ้นเรื่อย ๆ จึงนำเสนอโซลูชั่นสำเร็จรูปพร้อมการติดตั้งล่วงหน้า ประการที่สอง มีพื้นที่จัดเก็บรูปภาพแบบรวมศูนย์ซึ่งคุณสามารถดาวน์โหลดและเรียกใช้บริการโดยใช้คำสั่งเดียวในเทอร์มินัล ความคิดที่ว่าโครงการดังกล่าวควรมีอยู่แล้วเกิดขึ้นกับฉันและฉันก็ค้นหาอย่างหนัก แต่โปรเจ็กต์ส่วนใหญ่ที่ฉันพบนั้นยุ่งยากเกินไป (คุณต้องสร้างคอนเทนเนอร์สำหรับการจัดเก็บข้อมูลถาวรและเปิดคอนเทนเนอร์ด้วยแอปพลิเคชันหลายครั้งด้วยพารามิเตอร์ที่แตกต่างกัน) หรือไม่มีเอกสารประกอบที่สมเหตุสมผลหรือละทิ้งไปโดยสิ้นเชิง ไม่พบสิ่งใดที่ยอมรับได้ ฉันเริ่มทำงานในโครงการของคุณ มีหลายคืนที่ต้องนอนไม่หลับก่อนที่จะศึกษาเอกสาร การเขียนโค้ด และการแก้ไขข้อบกพร่อง แต่ท้ายที่สุดแล้ว บริการของฉันก็มองเห็นแสงสว่างในตอนกลางวันและเริ่มเปล่งประกายด้วยแผงไฟ LED ขาวดำของเราเตอร์ทุกสี ดังนั้นฉันขอให้คุณรักและโปรดปราน - นักเทียบท่า-OpenVPN. ฉันยังสร้างโลโก้ขึ้นมาด้วย (ด้านบน ก่อนการตัด) แต่อย่าตัดสินอย่างเคร่งครัดเพราะฉันไม่ใช่นักออกแบบ (อีกต่อไป) เมื่อฉันดำเนินโครงการนี้ ฉันจัดลำดับความสำคัญของความเร็วในการปรับใช้ ขั้นต่ำ การตั้งค่าและระดับความปลอดภัยที่ยอมรับได้ จากการลองผิดลองถูก ฉันพบความสมดุลที่เหมาะสมที่สุดของเกณฑ์เหล่านี้ อย่างไรก็ตาม ในบางที่ฉันต้องเสียสละความเร็วในการปรับใช้เพื่อความปลอดภัย และฉันต้องจ่ายค่าความสามารถในการพกพาสำหรับการตั้งค่าขั้นต่ำ: ในการกำหนดค่าปัจจุบัน คอนเทนเนอร์ที่สร้างขึ้นบนเซิร์ฟเวอร์เครื่องหนึ่งไม่สามารถถ่ายโอนและเปิดใช้งานบนเซิร์ฟเวอร์อื่นได้ ตัวอย่างเช่น ใบรับรองไคลเอ็นต์และเซิร์ฟเวอร์ทั้งหมดจะถูกสร้างขึ้นเมื่อบริการเริ่มต้น การดำเนินการนี้จะใช้เวลาประมาณ 2 วินาที อย่างไรก็ตาม การสร้างไฟล์ Hellman Defi จะต้องคำนึงถึงเวลาในการสร้างด้วย โดยจะถูกสร้างขึ้นในระหว่างการสร้างอิมเมจนักเทียบท่าและอาจใช้เวลานานถึง 10 นาที ฉันอยากจะได้รับการตรวจสอบความปลอดภัยของโซลูชันดังกล่าวจากชุมชนที่เคารพนับถือจริงๆ

ยิง

ในการเริ่มบริการ เราจำเป็นต้องมีหลายสิ่ง:

  1. เซิร์ฟเวอร์: ฟิสิคัลหรือเสมือน ตามทฤษฎีแล้วมันเป็นไปได้ที่จะทำงานในโหมด docker-within-docker แต่ฉันยังไม่ได้ทดสอบตัวเลือกนี้อย่างกว้างขวาง
  2. จริงๆแล้วด็อกเกอร์ ผู้ให้บริการโฮสติ้งหลายรายนำเสนอโซลูชั่นสำเร็จรูปพร้อม Docker บนเครื่อง;
  3. ที่อยู่ IP สาธารณะ

หากมีรายละเอียดทั้งหมดแล้ว สิ่งที่เราต้องทำคือเรียกใช้คำสั่งต่อไปนี้ในคอนโซลของเซิร์ฟเวอร์ของคุณ:

docker run --cap-add=NET_ADMIN 
-it -p 1194:1194/udp -p 80:8080/tcp 
-e HOST_ADDR=$(curl -s https://api.ipify.org) 
alekslitvinenk/openvpn

ผู้อ่านที่สนใจอาจสังเกตเห็นว่าที่อยู่ IP ของเซิร์ฟเวอร์ถูกกำหนดโดยอัตโนมัติโดยใช้ ipify.org. หากวิธีนี้ใช้ไม่ได้ผลด้วยเหตุผลบางประการ คุณสามารถระบุที่อยู่ได้ด้วยตนเอง หากขั้นตอนก่อนหน้านี้ทั้งหมดเสร็จสมบูรณ์อย่างถูกต้อง เราควรเห็นสิ่งที่คล้ายกันในคอนโซล:

Sun Jun  9 08:56:11 2019 Initialization Sequence Completed
Sun Jun  9 08:56:12 2019 Client.ovpn file has been generated
Sun Jun  9 08:56:12 2019 Config server started, download your client.ovpn config at http://example.com/
Sun Jun  9 08:56:12 2019 NOTE: After you download you client config, http server will be shut down!

เราใกล้ถึงเป้าหมายแล้ว ตอนนี้เราต้องลอกเลียนแบบ example.com (ในกรณีของคุณ มันจะเป็นที่อยู่ของเซิร์ฟเวอร์ของคุณ) และวางลงในแถบที่อยู่ของเบราว์เซอร์ของคุณ หลังจากที่คุณกด Enter ไฟล์ client.ovpn จะถูกดาวน์โหลดไฟล์และเซิร์ฟเวอร์ http เองก็จะหายไปจากการถูกลืมเลือน หากมีข้อสงสัยเกี่ยวกับวิธีแก้ปัญหานี้ คุณสามารถใช้เคล็ดลับต่อไปนี้: รันคำสั่งก่อนหน้าและเพิ่มแฟล็ก zp และรหัสผ่าน ตอนนี้ หากคุณวางลิงก์ที่สร้างขึ้นลงในหน้าต่างเบราว์เซอร์ คุณจะได้รับไฟล์ zip พร้อมรหัสผ่าน เมื่อคุณมีไฟล์การกำหนดค่าไคลเอนต์แล้ว คุณสามารถใช้ไคลเอนต์ที่เหมาะสมได้ ฉันใช้ Tunnelblick สำหรับ Mac

วิดีโอสอน

วิดีโอสอนนี้มีคำแนะนำโดยละเอียดสำหรับการปรับใช้บริการบน DigitalOcean

PS หากคุณพบว่าโปรเจ็กต์นี้มีประโยชน์ โปรดติดดาวบน GitHub และแยกมันออกและบอกต่อเพื่อนของคุณ เรายินดีต้อนรับผู้ร่วมให้ข้อมูลและการตรวจสอบความปลอดภัยอย่างกว้างขวางPPS หากบทความนี้จบลงที่ Habr ฉันวางแผนที่จะเขียนบทความถัดไปเกี่ยวกับวิธีที่ฉันเปิดตัว docker-in-docker และ docker-in-docker-in-docker ว่าทำไมฉันถึงทำและสิ่งที่ออกมา
EDIT1:

  1. แก้ไขข้อผิดพลาดในการเผยแพร่
  2. ตอบสนองต่อความคิดเห็น ฉันตัดสินใจใส่ข้อมูลนี้ที่นี่: จำเป็นต้องมีการตั้งค่าสถานะ —privileged เพื่อทำงานกับ iptables

EDIT2:

  1. ปรับปรุงคำสั่งเรียกใช้รูปภาพ: ตอนนี้ไม่จำเป็นต้องใช้แฟล็ก –privileged
  2. เพิ่มลิงก์ไปยังคู่มือวิดีโอภาษารัสเซีย: youtu.be/A8zvrHsT9A0

ที่มา: will.com

เพิ่มความคิดเห็น