วิธีกำหนดเส้นทางการรับส่งข้อมูลทั้งหมดจากหนึ่ง vm ไปยัง vm อื่น ๆ บน OS X


0

ท้าทาย : เพื่อรับ Debian VM (Virtualbox) หนึ่งรายการเพื่อกำหนดเส้นทางการรับส่งข้อมูลทั้งหมดผ่าน Debian VM (Paralles) อื่นทั้งคู่โฮสต์ภายใต้ OS X 10.11.5 ฉันลองมาหลายวันแล้วฉันหวังว่าคุณจะช่วยได้ที่นี่

schema:

vm1 (Virtualbox) ---> ( OS X ) --> vm2 (Parallels) --> internet

นี่คือสิ่งที่ฉันมี:

VM1 (“ ลูกค้า”):

  • การตั้งค่าส่วนต่อประสาน eth1 กับเครือข่ายเฉพาะโฮสต์ภายใต้ Virtualbox รับที่อยู่ ip 192.168.56.103 กับ netmask 255.255.255.0

VM2 (“ เราเตอร์”):

  • การ์ด Wifi แนบโดยตรงกับ VM, อินเตอร์เฟส wlan0 ที่มี ip 10.251.26.168, เชื่อมต่อกับอินเทอร์เน็ต wlan0 จะเป็นส่วนต่อประสานขาออกของฉัน

  • การติดตั้งอินเตอร์เฟส eth0 เป็นโฮสต์เท่านั้นภายใต้ Parallels รับที่อยู่ IP 10.37.129.6 พร้อม netmask 255.255.255.0

บนโฮสต์:

  • VM1 เชื่อมต่อกับอินเตอร์เฟส vboxnet0 พร้อม ip 192.168.56.1 VM2 เชื่อมต่อกับอินเตอร์เฟส vnic1 กับ ip 10.37.129.2

ด้วยการตั้งค่านี้ทำให้โฮสต์จาก VM และ viceversa ทำงานได้ดีอย่างสมบูรณ์ (บนเครือข่ายนั้น ๆ )

สิ่งที่ฉันทำไปแล้ว:

ภายใต้ระบบโฮสต์ OS X ฉันเปิดใช้งานการส่งต่อไอพีและเชื่อมต่ออินเตอร์เฟสเสมือนทั้งสองเข้าด้วยกัน:

bash-3.2# sysctl -w net.inet.ip.forwarding=1
net.inet.ip.forwarding: 1 -> 1
bash-3.2# ifconfig bridge0 create
bash-3.2# ifconfig vnic1 down
bash-3.2# ifconfig vboxnet0 down
bash-3.2# ifconfig bridge0 up addm vnic1 addm vboxnet0
bash-3.2# ifconfig vnic1 up
bash-3.2# ifconfig vboxnet0 up
bash-3.2# ifconfig bridge0
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether ba:e8:56:14:5f:00 
    Configuration:
        id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
        maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
        root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
        ipfilter disabled flags 0x2
    member: vnic1 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 14 priority 0 path cost 0
    member: vboxnet0 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 12 priority 0 path cost 0
    Address cache:
    media: autoselect
    status: active
bash-3.2# ifconfig vnic1
vnic1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether 00:1c:42:00:00:09 
    inet 10.37.129.2 netmask 0xffffff00 broadcast 10.37.129.255
    media: autoselect
    status: active
bash-3.2# ifconfig vboxnet0
vboxnet0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    ether 0a:00:27:00:00:00 
    inet 192.168.56.1 netmask 0xffffff00 broadcast 192.168.56.255

บน VM1 (“ ไคลเอนต์”) ฉันเพิ่มเกตเวย์เริ่มต้น:

root@vm1:~# ip route del 0/0
root@vm1:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
  192.168.56.0    0.0.0.0         255.255.255.0   U     100    0        0 eth1
root@vm1:~# route add default gw 192.168.56.1
root@vm1:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
  0.0.0.0         192.168.56.1    0.0.0.0         UG    0      0        0 eth1
  192.168.56.0    0.0.0.0         255.255.255.0   U     100    0        0 eth1

บน VM2 (“ เราเตอร์”) ฉันเปิดใช้งานการส่งต่อและตั้งค่า nat ip:

root@vm2:~# sysctl -w net.ipv4.ip_forward = 1
root@vm2:~# iptables -t nat -A POSTROUTING --out-interface wlan0 -j MASQUERADE  
root@vm2:~# iptables -A FORWARD --in-interface eth0 -j ACCEPT

หลังจากนี้ฉันสามารถ ping จาก VM1 ถึง 192.168.56.1 และ 10.37.129.2 (IP ฝั่งโฮสต์สำหรับอะแดปเตอร์เครือข่ายเสมือน vboxnet0 และ vnic1 ตามลำดับ) แต่ฉันไม่สามารถ ping 10.37.129.6 ฉันยังล้มเหลวในการเข้าถึงอินเทอร์เน็ตจาก VM1 ถึง VM2 (จาก VM1 ping 8.8.8.8):

root@vm1:~# ping -c 1 192.168.56.1
PING 192.168.56.1 (192.168.56.1) 56(84) bytes of data.
64 bytes from 192.168.56.1: icmp_seq=1 ttl=64 time=1.54 ms

--- 192.168.56.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.543/1.543/1.543/0.000 ms

root@vm1:~# ping -c 1 10.37.129.2

PING 10.37.129.2 (10.37.129.2) 56(84) bytes of data.
64 bytes from 10.37.129.2: icmp_seq=1 ttl=64 time=0.208 ms

--- 10.37.129.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.208/0.208/0.208/0.000 ms

root@vm1:~# ping -c 1 10.37.129.6
PING 10.37.129.6 (10.37.129.6) 56(84) bytes of data.

--- 10.37.129.6 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

root@vm1:~# ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

ดังนั้นฉันไม่สามารถรับ VM1 เพื่อกำหนดเส้นทางปริมาณการใช้งานทั้งหมดผ่าน VM2 ... ฉันหายไปอะไร ??

ในกรณีที่ช่วยแก้ไขปัญหาได้ฉันเปิดใช้ wireshark บน vm2 ("เราเตอร์") เพื่อฟังอินเตอร์เฟสทั้งหมด เมื่อฉัน ping 10.37.129.6 จาก vm1 ฉันเห็นคำขอ ARP "ซึ่งเป็น 10.37.129.6 บอก 10.37.129.2" การตอบกลับ ARP ที่สอดคล้องกันและ ICMP ที่ตามมาที่เกิดจาก ip ของ vm1 (192.168.56.101) ดังนั้น OS X bridge ต้องเป็น การทำงาน แต่ฉันดูเหมือนจะไม่ได้รับคำตอบ ping กลับไปที่ vm1 ทั้งที่ฉันเห็นมันใน wireshark และเมื่อฉัน ping 8.8.8.8 จาก vm1 ฉันไม่เห็นอะไรเลยในเซสชัน wireshark ของ vm2

ขอบคุณมาก ๆ สำหรับความช่วยเหลือของคุณ.


ลองใช้ฟอรัมเสมือนจริง แต่ฉันคิดว่าสิ่งที่คุณพยายามทำอาจเป็นไปได้ในทางเทคนิคเกินไป กล่องเสมือนเหล่านี้มีข้อ จำกัด ในระดับต่ำมากมายซึ่งจะขึ้นอยู่กับลักษณะเฉพาะของโฮสต์และแขกระบบปฏิบัติการเฉพาะที่คุณกำลังใช้งาน ดังนั้นหากมันไม่ทำงานกับ Mac-Debian มันอาจทำงานกับ Mac-Ubuntu หรือ Windows-Debian เป็นต้น

ขอบคุณสำหรับความคิดเห็นของคุณ Florian ความรู้สึกของฉันคือสิ่งนี้ควรเป็นระบบปฏิบัติการอิสระในตอนท้ายของวันที่เรากำลังพูดถึงลินุกซ์ (เดเบียน) & amp; freebsd (osx) ซึ่งเป็นระบบเครือข่ายที่ยอดเยี่ยม เป็นความจริงที่เทคโนโลยีไฮเปอร์ไวเซอร์แตกต่างกันอย่างมาก แต่ฉันถูก จำกัด ให้ใช้ทั้ง Virtualbox และ Paralles อย่างไรก็ตามฉันจะเล่นซอกับการตั้งค่าด้านบนและฉันจะลอง NAT (แทนที่จะเป็นบริดจ์) ที่ฝั่งโฮสต์
Keyser Soze

โดยวิธีการที่ฉันเพิ่งพบโพสต์ที่น่าสนใจ (แม้ว่าเก่า) นี้: tolaris.com/2012/05/16/... . ฉันจะลองทำสิ่งนี้และรายงานความคืบหน้า
Keyser Soze

คำตอบ:


0

ในที่สุดฉันก็ทำให้มันทำงาน :-)

วิธีการทำงานของฉันเกี่ยวข้องกับ:

  1. VM ของ Parallels ("เราเตอร์"): "โฮสต์เท่านั้น" เครือข่ายโดยมีช่วง ip ที่กำหนดไว้ตามค่าเริ่มต้นโดย Parallels (ฉันสามารถเปลี่ยนได้ใน Parallels - การตั้งค่า - เครือข่าย - โฮสต์เท่านั้น) ตั้งค่า nat ด้วย iptables ด้วย wlan0 (wifi) เป็นอินเทอร์เฟซขาออก

  2. Virtualbox VM ("ไคลเอนต์"): "บริดจ์" เครือข่ายโดยใช้อะแดปเตอร์เสมือนของ Parallel vnic1 สร้างขึ้นสำหรับเครือข่าย "โฮสต์เท่านั้น" ฉันต้องปิดการใช้งาน dhcpserver ของ Virtualbox เพื่อให้แขกไม่ได้รับไอพีที่ไม่พึงประสงค์ ฉันให้ IP ในช่วงเดียวกันกับ vm ของ Parallel ตั้งค่าเส้นทางเริ่มต้นไปที่ "เราเตอร์"

บันทึก: ฉันสามารถรับ Virtualbox เพื่อใช้ Parallel vnic1 ในโหมดบริดจ์ อย่างไรก็ตามการทดสอบทั้งหมดของฉันล้มเหลวเมื่อพยายามทำให้ Parallels ใช้งาน Virtualbox vboxnet0 อินเตอร์เฟสหรือแม้แต่ OS X bridge0 เมื่อฉันลองมัน ดูเหมือนว่า Parallels จะเชื่อมต่อกับการ์ดเชื่อมต่อจริงเท่านั้นไม่ใช่เสมือน

และนั่นคือเกี่ยวกับมัน ตอนนี้รายละเอียด:

VM ของ Parallel - "เราเตอร์" ใช้ dhcpserver ค่าเริ่มต้นของ Parallel (ไม่จำเป็นต้องกำหนดค่าใด ๆ เว้นแต่คุณต้องการเปลี่ยนข้อมูล ip / netmask เริ่มต้น) เราจำเป็นต้องเปิดใช้งานการส่งต่อแพ็คเก็ตและตั้งค่า nat ด้วย iptables

root@router:~# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.37.129.7  netmask 255.255.192.0  broadcast 10.37.129.255                      
        ether 08:00:27:2a:20:8e  txqueuelen 1000  (Ethernet)
        RX packets 35  bytes 10016 (9.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 873  bytes 62313 (60.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
root@router:~# route -n
        Kernel IP routing table
        Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
        0.0.0.0         10.37.129.2    0.0.0.0         UG    100    0        0 eth0
        10.37.129.0     0.0.0.0        255.255.192.0   U     100    0        0 eth0
root@router:~# sysctl -w net.ipv4.ip_forward = 1
root@router:~# iptables -t nat -A POSTROUTING --out-interface wlan0 -j MASQUERADE  
root@router:~# iptables -A FORWARD --in-interface eth0 -j ACCEPT

Virtualbox vm ("ลูกค้า"): อะแด็ปเตอร์ 1 เป็นบริดจ์ด้วย vnic1 (หมายเหตุ: คุณอาจต้องเรียกใช้ vm ของ Parallel ก่อนดังนั้น vnic1 ถูกสร้าง) ฉันต้องเพิ่ม ip ของเราเตอร์ ( 10.37.129.7 ) เป็นเกตเวย์เริ่มต้น:

root@client:/home/user# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:a2:10:ba  
          inet addr:10.37.129.9  Bcast:10.37.129.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1292 (1.2 KiB)  TX bytes:684 (684.0 B)
          Interrupt:19 Base address:0xd000 
root@host:/home/user# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.37.129.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
root@client:/home/user# route add default gw 10.37.129.7
root@client:/home/user# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.37.129.7     0.0.0.0         UG    0      0        0 eth0
10.37.129.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

และนั่นคือมัน มันทำให้มันใช้งานได้สำหรับฉัน ตอนนี้ฉันสามารถเข้าถึงอินเทอร์เน็ตจากไคลเอนต์ (Virtualbox) ผ่านการ์ดไร้สายที่เชื่อมต่อโดยตรงกับเราเตอร์ (Parallels) โดยไม่ต้องมีการแทรกแซงของโฮสต์ (OS X)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.