VirtualBox - Разные подсети в одном интерфейсе

У меня есть несколько виртуалок, работающих в VirtualBox. На хосте Ubuntu Server 18.04. Все они используют «Host-Only Adapter». Также Интернет работает через него.

По ряду причин я задал виртуальным машинам не локальные, а публичные IP-адреса. То есть, например, у хоста и виртуалки не 192.168.56.1 и 192.168.56.100, как это обычно бывает, а, например, 11.22.33.1 и 11.22.33.44 соответственно. Еще более подробное объяснение. Шлюз виртуальной машины не 192.168.56.1, а 11.22.33.1. И это даже работает. Хост и гость могут общаться друг с другом, а виртуалка даже имеет доступ к интернету.

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

localinterface=vboxnet0

# hosts's interface
publicinterface=ppp1

# public ip
localip=34.56.78.90

# local gateway
maingateway=10.0.3.1

# host's local ip
mainip=10.0.3.10

iptables -t nat -A POSTROUTING -s $localip/32 -o $publicinterface -j SNAT --to-source $mainip
iptables -t nat -A PREROUTING -i $publicinterface -p tcp --dport 1:65534 -j DNAT --to-destination $localip
iptables -t nat -A PREROUTING -i $publicinterface -p udp --dport 1:65534 -j DNAT --to-destination $localip
iptables -t nat -A PREROUTING -i $publicinterface -p gre -j DNAT --to-destination $localip
iptables -t nat -A PREROUTING -p icmp -d $mainip -j DNAT --to-destination $localip
iptables -t filter -A FORWARD -p icmp -d $localip -j ACCEPT

ip rule add from $localip table vm2
ip route add default dev $publicinterface via $maingateway table vm2

Я понимаю, что при этом ни хост, ни кто-либо из гостей не будет иметь доступа к НАСТОЯЩЕЙ машине с IP-адресом 34.56.78.90, но меня это не волнует.

Проблема в том, что хотя виртуальные машины находятся в одной сети (vboxnet0), они не могут общаться друг с другом. Я уверен, что это потому, что хосты имеют разные подсети. traceroute и ping не дают никаких результатов. Затем я попытался сделать следующие маршруты:

ip route add 99.88.77.0/24 via 11.22.33.1 dev vboxnet0 table vm0
ip route add 34.56.78.0/24 via 11.22.33.1 dev vboxnet0 table vm0

ip route add 11.22.33.0/24 via 99.88.77.1 dev vboxnet0 table vm1
ip route add 34.56.78.0/24 via 99.88.77.1 dev vboxnet0 table vm1

ip route add 11.22.33.0/24 via 34.56.78.1 dev vboxnet0 table vm2
ip route add 99.88.77.0/24 via 34.56.78.1 dev vboxnet0 table vm2

Некоторый прогресс уже начался, но он пока не принес желаемого результата. После этого при попытке traceroute от одной виртуальной машины к другой он доходит до своего шлюза и на нём зависает

root@ubuntu-server-1804-fastpanel:~# traceroute -n 99.88.77.66
traceroute to 99.88.77.66 (99.88.77.66), 30 hops max, 60 byte packets
 1  11.22.33.1  0.222 ms  0.400 ms  0.334 ms^C
root@ubuntu-server-1804-fastpanel:~#

Также команда ping начала показывать, что шлюз перенаправляется на другой хост.

root@ubuntu-server-1804-fastpanel:~# ping 99.88.77.66
PING 99.88.77.66 (99.88.77.66) 56(84) bytes of data.
From 11.22.33.1: icmp_seq=2 Redirect Host(New nexthop: 99.88.77.66)
From 11.22.33.1: icmp_seq=3 Redirect Host(New nexthop: 99.88.77.66)
From 11.22.33.1: icmp_seq=4 Redirect Host(New nexthop: 99.88.77.66)
From 11.22.33.1: icmp_seq=5 Redirect Host(New nexthop: 99.88.77.66)
From 11.22.33.1: icmp_seq=6 Redirect Host(New nexthop: 99.88.77.66)
^C
--- 99.88.77.66 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 6066ms

root@ubuntu-server-1804-fastpanel:~#

Теперь мои маршруты на хосте выглядят так

root@hypervisor:~# ip route
default via 10.0.1.1 dev eth0 proto static 
default via 10.0.2.1 dev ppp0 proto static 
default via 10.0.3.1 dev ppp1 proto static 
10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.10 
10.0.2.1 dev ppp0 proto kernel scope link src 10.0.2.10 
10.0.3.1 dev ppp1 proto kernel scope link src 10.0.3.10 
10.27.137.0/24 dev vboxnet0 proto kernel scope link src 10.27.137.213 
34.56.78.0/24 dev vboxnet0 proto kernel scope link src 34.56.78.1 
11.22.33.0/24 dev vboxnet0 proto kernel scope link src 11.22.33.1 
99.88.77.0/24 dev vboxnet0 proto kernel scope link src 99.88.77.1 
root@hypervisor:~# ip route show table vm0 && ip rule show table vm0
default via 10.0.1.1 dev eth0 
34.56.78.0/24 via 11.22.33.1 dev vboxnet0 
99.88.77.0/24 via 11.22.33.1 dev vboxnet0 
199:    from 11.22.33.44 lookup vm0 
root@hypervisor:~# ip route show table vm1 && ip rule show table vm1
default via 10.0.2.1 dev ppp0 
34.56.78.0/24 via 99.88.77.1 dev vboxnet0 
11.22.33.0/24 via 99.88.77.1 dev vboxnet0 
97:     from 99.88.77.66 lookup vm1 
99:     from 99.88.77.66 lookup vm1 
root@hypervisor:~# ip route show table vm2 && ip rule show table vm2
default via 10.0.3.1 dev ppp1 
11.22.33.0/24 via 34.56.78.1 dev vboxnet0 
99.88.77.0/24 via 34.56.78.1 dev vboxnet0 
96:     from 34.56.78.90 lookup vm2 
98:     from 34.56.78.90 lookup vm2 
root@hypervisor:~#

Что мне нужно сделать в моем случае, чтобы хосты, находящиеся в разных подсетях, но в одной сети, могли общаться друг с другом?


Ответы (0 шт):