Задача: получить одну виртуальную машину Debian (Virtualbox) для маршрутизации всего своего трафика через другую виртуальную машину Debian (Paralles), обе размещены в OS X 10.11.5. Я пытался в течение нескольких дней, я надеюсь, что вы можете помочь здесь.

Схема:

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

Вот что у меня есть:

VM1 («клиент»):

  • Настройка интерфейса eth1 с хост-сетью в Virtualbox, получает IP-адрес 192.168.56.103 с маской 255.255.255.0

VM2 («маршрутизатор»):

  • Карта Wi-Fi подключена напрямую к ВМ, интерфейс wlan0 с ip 10.251.26.168, подключен к интернету. wlan0 будет моим исходящим интерфейсом.

  • Интерфейс eth0, настроенный как единственный хост под Parallels, получает IP-адрес 10.37.129.6 с маской сети 255.255.255.0.

На хосте:

  • VM1 подключен к интерфейсу vboxnet0 с ip 192.168.56.1 VM2 подключен к интерфейсу vnic1 с ip 10.37.129.2

При такой настройке пинг хоста с каждой виртуальной машины и наоборот работает отлично (в соответствующих сетях).

Что я сделал до сих пор:

В системах OS X хоста я включаю пересылку ip и соединяю оба виртуальных интерфейса:

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 («роутер») я включаю пересылку ip и настраиваю nat:

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

Теперь, после всего этого, я могу пропинговать с VM1 до 192.168.56.1 и 10.37.129.2 (IP-адреса на стороне хоста для виртуальных сетевых адаптеров vboxnet0 и vnic1 соответственно), но я не могу пропинговать 10.37.129.6. Мне также не удалось получить доступ к Интернету от VM1 до VM2 (из ping VM1 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 ("маршрутизатор"), прослушивая все интерфейсы. Когда я пропингую 10.37.129.6 из vm1, я вижу запросы ARP «который был 10.37.129.6 Tell 10.37.129.2», соответствующий ответ ARP и последующий ICMP, исходящий из ip vm1 (192.168.56.101), поэтому мост OS X должен быть за работой. Но я, похоже, не получаю ответ ping обратно к vm1 и не вижу его на wireshark. И когда я пингую 8.8.8.8 из vm1, я ничего не вижу в сеансе Wireshark vm2.

Большое спасибо за вашу помощь.

1 ответ1

0

Я наконец получил это работает :-)

Мое рабочее решение включает в себя:

  1. Parallels VM ("маршрутизатор"): сеть "только хост", с диапазоном ip, определенным по умолчанию Parallels (я мог бы изменить это в Parallels - Настройки - Сеть - Только хост). Настройте nat с iptables с wlan0 (wifi) в качестве исходящего интерфейса.

  2. Virtualbox VM ("клиент"): "мостовая" сеть с использованием виртуального адаптера vnic1 созданного для сети "только для хоста". Мне пришлось отключить dhcpserver Virtualbox, чтобы гость не получил нежелательный IP-адрес. Я дал ему ip в том же диапазоне, что и vm параллели. Установить маршрут по умолчанию к "роутеру".

Примечание: я мог бы заставить Virtualbox использовать vnic1 Parallel в режиме моста. Однако все мои тесты провалились при попытке заставить Parallels использовать интерфейс Virtualbox vboxnet0 или даже bridge0 когда я пытался это сделать. Кажется, Parallels соединяет только физические адаптеры, а не виртуальные.

И это все. Теперь подробности:

Виртуальная машина Parallel - "роутер" Использование dhcpserver по умолчанию (никакой настройки не требуется, если вы не хотите изменять информацию 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).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .