Задача: получить одну виртуальную машину 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.
Большое спасибо за вашу помощь.