ฉันจัดการกับความยุ่งยากนี้มาเกือบสองเดือนแล้ว ฉันจะอธิบายสถานการณ์ ฉันทำงานจากที่บ้านและเพื่อเข้าถึงบริการส่วนใหญ่ของบริษัท ฉันต้องใช้ไคลเอนต์ openvpn ประเด็นคือ ฉันมีคอมพิวเตอร์สามเครื่องที่บ้าน เซิร์ฟเวอร์อเนกประสงค์หนึ่งเครื่อง คอมพิวเตอร์ส่วนบุคคลของฉัน และแล็ปท็อปของบริษัทหนึ่งเครื่อง ฉันได้ตั้งค่าและกำหนดเส้นทางการเข้าถึงจากคอมพิวเตอร์ส่วนบุคคลของฉันไปยังเซิร์ฟเวอร์ของบริษัทเมื่อนานมาแล้วผ่านไคลเอนต์ openvpn ที่ทำงานบนแล็ปท็อปของฉัน ฉันกังวลเกี่ยวกับแบตเตอรี่เพราะฉันปล่อยให้มันเสียบเข้ากับที่ชาร์จของมันทุกวัน ดังนั้นหลังจากคิดมามาก ฉันจึงตัดสินใจย้ายไคลเอนต์ openvpn ภายในคอนเทนเนอร์บนเซิร์ฟเวอร์ของฉันเพื่อใช้เป็นเราเตอร์เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ของบริษัท
ฉันตั้งค่าคอนเทนเนอร์โดยใช้ macvlan ที่มีช่วง ip ของเครือข่ายท้องถิ่น สิทธิ์พิเศษและสิทธิ์ net_admin หลังจากหลายเดือนของการลองผิดลองถูก ฉันทำให้มันใช้งานได้เพียงครั้งเดียว จากนั้นเซิร์ฟเวอร์ของฉันก็หยุดทำงาน และฉันก็ลืมว่าฉันใส่ iptables อะไรไว้บนคอนเทนเนอร์เพื่อให้มันใช้งานได้ ฉันไม่ได้เขียนมันในสคริปต์จุดเริ่มต้นเพราะไม่มีเวลา และตอนนี้ฉันต้องจัดการกับเรื่องนี้อีกครั้ง
ทุกอย่างบนเซิร์ฟเวอร์ openvpn เครือข่ายและเซิร์ฟเวอร์ของบริษัทรู้วิธีกำหนดเส้นทางกลับทุก ip ของไคลเอ็นต์ VPN
สิ่งที่ฉันต้องทำตอนนี้คือกำหนดเส้นทางเครือข่ายท้องถิ่นของฉันผ่านไคลเอนต์ openvpn ภายในคอนเทนเนอร์
รายละเอียด:
- เครือข่ายท้องถิ่น: 192.168.0.0/24
- เกตเวย์ท้องถิ่น: 192.168.0.1
- พีซี:192.168.0.17
- โฮมเซิร์ฟเวอร์: 192.168.0.16
- คอนเทนเนอร์: 192.168.0.242
- ไคลเอ็นต์ OpenVPN: 10.1.2.4
- เกตเวย์ OpenVPN: 10.1.2.1
- ช่วงเซิร์ฟเวอร์ของบริษัท: 192.168.2-19.0/24
บนเซิร์ฟเวอร์ที่บ้านของฉัน (192.168.0.16) มันทำงานได้อย่างสมบูรณ์ ฉันต้องเพิ่มบางเส้นทางที่ชี้ไปที่คอนเทนเนอร์ IP เช่นนี้ เส้นทาง ip เพิ่ม 192.168.19.0/24 ผ่าน 192.168.0.242
แต่สิ่งที่ฉันไม่สามารถทำงานได้คือเครือข่ายท้องถิ่นที่เหลือ ในคอมพิวเตอร์ส่วนบุคคลของฉัน ฉันตั้งค่าเราเตอร์ให้ชี้ไปที่คอนเทนเนอร์ ip (192.168.0.242) สำหรับช่วงเซิร์ฟเวอร์ของบริษัทเหมือนกับที่ฉันทำบนเซิร์ฟเวอร์ของฉัน
หากฉันเรียกใช้ ping ไปยังรายการใดรายการหนึ่ง ฉันสามารถดูได้ด้วย tcpdump และ tshark ว่ามันกำลังถึงปลายทางในอีกด้านหนึ่ง (PC > Home Server > Container > VPN Client > VPN Server > Gateway > Server) สิ่งนี้ไปถึงปลายทางตามที่ตั้งใจไว้ แต่ เมื่อมันกลับไปที่พีซีของฉัน (เซิร์ฟเวอร์ > เกตเวย์ > เซิร์ฟเวอร์ VPN > ไคลเอนต์ VPN )
การตอบกลับ ping กลับมาและตายบนคอนเทนเนอร์ดังนั้นปัญหาที่ฉันต้องจัดการตอนนี้คือวิธีสร้างคอนเทนเนอร์หรือส่งต่อแพ็คเกจนั้นไปยังคอมพิวเตอร์ส่วนบุคคลของฉัน
ฉันรู้แน่นอนว่าเป็นเพียงกฎ iptables เท่านั้นที่ฉันต้องเพิ่มหรือลบภายในคอนเทนเนอร์
ที่จุดเริ่มต้นของฉัน ฉันมี iptables เหล่านี้ที่โหลดหลังจากไคลเอนต์ VPN แบบเปิดเริ่มทำงาน
iptables -t nat -A โพสต์ -o tun0 -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate ที่เกี่ยวข้อง ก่อตั้ง -j ยอมรับ
iptables -A FORWARD -i tun0 -o eth0 -j ยอมรับ
iptables -A FORWARD -i eth0 -o tun0 -j ยอมรับ
ถ้ามันคุ้มค่าที่จะกล่าวถึงเฉพาะกับกฎเหล่านี้ ฉันทำให้มันใช้งานได้บนแล็ปท็อปของฉัน
นอกจากนี้คอนเทนเนอร์ยังสามารถเข้าถึงทุกอย่างทั้งสองด้าน ping ไปยังหนึ่งในเซิร์ฟเวอร์ของบริษัท และ ping โฮสต์ของตัวเองหรือ ping คอมพิวเตอร์ส่วนบุคคลของฉันได้อย่างสมบูรณ์แบบ