วิธีกำหนดเส้นทางการรับส่งข้อมูลจาก VirtualBox VM ผ่าน VPN เท่านั้น


10

ฉันมี VirtualBox VM (ทั้งโฮสต์และแขกผู้ไม่ฝักใฝ่ฝ่ายใด Ubuntu ไม่ฝักใฝ่ฝ่ายใด) ผู้ให้บริการ VPN ของฉันใช้ OpenVPN เพื่อตั้งค่า TUN ฉันต้องการตั้งค่าเพื่อให้ทราฟฟิกจาก VM ไปผ่าน VPN เท่านั้นและจะลดลงหาก VPN ลง (เกิดขึ้น) ข้อเสนอแนะ? iptables-fu ของฉันอ่อนแอเล็กน้อย

สิ่งที่ฉันได้ลอง: ใช้ VirtualBox "การสร้างเครือข่ายเท่านั้น" ซึ่งให้ vboxnet0 อินเตอร์เฟสย้อนกลับบนโฮสต์แก่แขก แต่ไม่สามารถรับ iptables / เส้นทางได้ ฉันต้องการหลีกเลี่ยง NAT บน VM เพราะฉันเป็นสองเท่าของ NAT (ISP และเราเตอร์ที่บ้าน) และอีกหนึ่งระดับจะทำให้หัวของฉันป๊อปอัพ

ความเป็นไปได้อื่น ๆ : การสลับไปใช้ TAP (อย่างไร) และการเชื่อมต่อกับ VM การสร้าง VPN ภายใน VM และกรองทราฟฟิก eth0 ทั้งหมดยกเว้น VPN เชื่อมต่อกับ iptables (แต่ดูด้านล่าง)

คะแนนโบนัส: หากคุณสามารถบอกวิธีใช้จุดออก VPN ที่แตกต่างกันบนโฮสต์และแขกโดยไม่ต้องมีการรับส่งข้อมูลสองเท่าจากแขกผ่านทางโฮสต์ของ VPN

คำตอบ:


4

จะมีวิธีแก้ไขปัญหาอื่น ๆ แต่นี่คือสิ่งที่ฉันคิด:

  1. ตั้งค่า VM ในโหมดบริดจ์ สิ่งนี้จะให้ที่อยู่ IP ของเครื่องเสมือนในเครือข่ายเดียวกับโฮสต์ของคุณ
  2. ติดตั้ง VPN บนโฮสต์สมมติว่าเป็น tun0
  3. เปิดใช้งานการกำหนดเส้นทางบนโฮสต์ echo 1 > /proc/sys/net/ipv4/ip_forward
  4. ตั้งค่า VM ด้วยที่อยู่ IP ของโฮสต์เป็น gw เริ่มต้น

ณ จุดนี้โฮสต์มีการเชื่อมต่อ VPN และ VM จะกำหนดเส้นทางการรับส่งข้อมูลทั้งหมดไปยังโฮสต์ สิ่งที่เหลืออยู่ที่ต้องทำคือ จำกัด โฮสต์เพื่อไม่ให้แขกสามารถกำหนดเส้นทางการรับส่งข้อมูลใด ๆ ที่ไม่ผ่านอุปกรณ์ tun0 คุณสามารถทำได้ด้วยชุดของกฎ iptables ดังนี้:

iptables -P FORWARD DROP
iptables -A FORWARD -o tun0 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

ว่าควรจะทำงาน กฎข้อแรกตั้งค่านโยบายเริ่มต้นเป็นแพ็คเก็ต DROP ในห่วงโซ่ไปข้างหน้า สิ่งนี้จะมีผลต่อแพ็คเก็ตที่โฮสต์ของคุณกำหนดเส้นทางไม่ใช่แพ็กเก็ตไปยังโฮสต์ (INPUT) หรือจากโฮสต์ (OUTPUT) กฎข้อที่สองอนุญาตการรับส่งข้อมูลใด ๆ ที่กำลังกำหนดเส้นทาง tun0 - คุณสามารถทำให้แน่นขึ้นด้วย --source ถ้าคุณต้องการ และกฎสุดท้ายควรให้คำตอบกลับมาจาก tun0 เพื่อจัดเส้นทางกลับไปที่ VM

VPN ของคุณจะคาดหวังว่าแพ็กเก็ตทั้งหมดบนอินเทอร์เฟซ tun จะมาจาก IP เดียวหรือไม่ ถ้าเป็นเช่นนั้นคุณจะต้องเพิ่มกฎ NAT ด้วย อาจเป็นสิ่งที่ชอบ:

iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source {your host tun0 ip}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.