VirtualBoxで複数の仮想マシンを実行しています。 Ubuntu Server 18.04がホストシステムにインストールされています。彼らはすべて「ホスト専用ゲスト」を使用します。インターネットは「ホスト専用アダプタ」でも動作します。
いくつかの理由で、ローカルIPアドレスではなくパブリック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
いくつかの進展が始まったが、まだ期待した結果を得ていない。その後、あるVMから別のVMへの経路追跡を試みると、そのゲートウェイに到達して停止します。
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:~#
私の場合、サブネットは異なりますが、同じネットワーク上のホストが互いに通信するにはどうすればよいですか?