เชื่อมต่อกับ VPN (OpenVPN) จากบริการนักเทียบท่าบนฝูง


11

ฉันมีเซิร์ฟเวอร์ OpenVPN ที่ทำงานเปิดเผยที่อยู่ IP ส่วนตัวฉันต้องการให้บริการนักเทียบท่าเพื่อเข้าถึงที่อยู่เหล่านั้น

ตามหลักการแล้วจะไม่มีไคลเอนต์ OpenVPN "ข้างใน" ในคอนเทนเนอร์เนื่องจากอิมเมจนั้นคาดว่าจะนำไปใช้งานในสภาพแวดล้อมที่ไม่จำเป็นต้องใช้ VPN

สิ่งที่ฉันพยายามจนถึง

ผมประสบความสำเร็จในการเชื่อมต่อภาชนะกับ VPN ของฉันกับdperson / OpenVPN ลูกค้าภาพ

ฉันเปิดใช้คอนเทนเนอร์อื่นสำเร็จโดยใช้คอนเทนเนอร์นั้นเป็นเครือข่ายโดยใช้--net=container:my-vpn-clientแฟล็ก

ตอนนี้ฉันกำลังพยายามตั้งค่าบริการนักเทียบท่าที่จะเข้าถึงที่อยู่ IP ส่วนตัวของฉันและสิ่งที่ฉันพบคือ:

  • ฉันไม่สามารถเรียกใช้ OpenVPN cap-add: NET_ADMINลูกค้าในการให้บริการในขณะที่มันไม่สามารถที่จะได้รับ มีปัญหาแบบเปิดที่นักเทียบท่าพูดคุยเกี่ยวกับเรื่องนี้ แต่ยังคงเปิดอยู่
  • ฉันคิดว่าฉันสามารถมีไคลเอ็นต์คอนเทนเนอร์ openVPN เรียกใช้ "ข้าง" กลุ่ม swarm แต่ฉันไม่สามารถใช้งานได้network_mode: "container:my-vpn-client"เนื่องจากไม่รองรับและไม่เหมาะสมเนื่องจากฉันไม่สามารถบังคับให้มีคอนเทนเนอร์ตามอำเภอใจได้ทุกโหนด จับกลุ่มโดยที่มันไม่ได้เป็นบริการตัวเอง
  • ฉันพยายามสร้างเครือข่ายที่แนบได้ (บริดจ์ / โอเวอร์เลย์) และเพียงติดภาชนะไคลเอนต์ OpenVPN ของฉันในนั้นและคาดหวังว่าสมาชิกคนอื่น ๆ ของเครือข่ายนั้นจะผ่านท่อนั้น ... และฉันก็ผิดหวัง

ดังนั้นที่นี่ฉันเป็นความคิดใด ๆ

PS หากสามารถช่วยได้สิ่งนี้ส่วนใหญ่คือการตั้งค่าการทดสอบอัตโนมัติบางอย่างที่จะเรียกใช้บริการบนเครื่องเทียบท่าเดี่ยวในโหมด Swarm ในโหมด Swarm init> การปรับใช้แบบสแต็ก> เรียกใช้การทดสอบ> ออกจากฝูง ดังนั้นหากมี "แฮ็ค" สำหรับสิ่งนั้น ... ฉันอาจสนใจ;)

คำตอบ:


1

ฉันทำสิ่งนี้แน่นอนเหมือนกันในไคลเอนต์นักเทียบท่า openvpn ของคุณคุณจะต้องกำหนดค่า NAT

iptables -t nat -A POSTROUTING -s 172.18.0.0/24 -o tun0 -j SNAT --to-source 10.8.0.10
iptables -t nat -A POSTROUTING -d 172.18.0.50/32 -o eth1 -j SNAT --to-source 172.18.0.100

สำหรับฉันฉันจะตั้งค่าให้ทำงานตอนบูทผ่าน iptables-restore

บนโฮสต์นักเทียบท่าของคุณให้เพิ่มสิ่งต่อไปนี้ลงใน / etc / network / interfaces

post-up ip rule add from 172.18.0.0/16 table 200
post-up ip route add 192.168.11.222 via 172.18.0.100 table 200

NB นี่คือสิ่งที่คุณใช้

  • 172.18.0.0 เป็นเครือข่ายนักเทียบท่าของคุณ
  • 172.18.0.50 เป็นหนึ่งในคอนเทนเนอร์ของนักเทียบท่าของคุณ
  • 172.18.0.100 เป็นไคลเอ็นต์ openvpn นักเทียบท่าของคุณ
  • 192.168.11.222 เป็น IP ส่วนตัวที่คุณต้องการให้ไคลเอนต์นักเทียบท่าของคุณสามารถเข้าถึงได้
  • tun0 เป็นอินเตอร์เฟส OpenVPN ของไคลเอ็นต์ docker ของคุณ
  • eth1 คืออินเทอร์เฟซเครือข่าย 172.18.0.0 ของไคลเอนต์ openvpn docker ของคุณ

การตอบสนองที่ยอดเยี่ยม ... upvoted สังเกตว่ามีสองประเด็นที่ต้องจัดการ: (1) ตรวจสอบให้แน่ใจว่ามีการส่งทราฟฟิกไปยังตำแหน่งที่เหมาะสมและ (2) ตรวจสอบให้แน่ใจว่าซอฟต์แวร์ที่ทำงานในสภาพแวดล้อม Docker รู้ว่าเส้นทางนั้นมีอยู่ คุณอาจจะยังต้องบอก OpenVPN วิธีการเส้นทางการจราจรโดยใช้ccrไฟล์ราวกับว่าคุณกำลังติดต่อกับเครือข่ายท้องถิ่น เช่นเดียวกับการกำหนดเส้นทาง TCP / IP ทั้งหมด " tracerouteเป็นเพื่อนที่ดีที่สุดของคุณตามที่เป็นtcpdumpหรือ WireShark"
Mike Robinson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.