ホストIPとは異なるサブネット上にあるが、ホストハードウェアアドレスに静的にルーティングされるVirtualbox仮想マシンの静的IPに接続できません。

ホストIPとは異なるサブネット上にあるが、ホストハードウェアアドレスに静的にルーティングされるVirtualbox仮想マシンの静的IPに接続できません。

データセンターにUbuntu Trusty(14.04)を実行している物理サーバーがあり、そこにIPアドレスと/ 28ブロック(IPアドレス16個、使用可能14個)を割り当てました。追加のサブネットが物理ホストを介して静的にルーティングされるとします。これは、そのネットワークがホストNICハードウェアアドレスからの要求のみを受け入れるという意味であると仮定します。

各仮想マシンが固有のIPアドレスを持ち、ネットワーク上の物理物理サーバーのように動作するように(つまりNATなし)、VirtualBoxでそれを使用します。また、要求がホストのハードウェアアドレスを使用するように、VMがホストを介してトラフィックをルーティングする必要があるとします。

私は基本的な固定IPまたはNAT以上の複雑なネットワークを確立する専門家ではないので、マニュアルページ、Ubuntuオンラインドキュメント、さまざまなStackExchangeサイトに関する多数の質問と回答を読んでいます。私が理解したのは、ホストのIPアドレスと、仮想マシンのゲートウェイとして機能するサブネットのアドレスとの間に仮想ブリッジを設定することです。したがって、仮想マシンにはそのサブネットにゲートウェイがある簡単な設定があります。

ホストからVMにアクセスでき、その逆も可能ですが、VMはホスト外のインターネットにアクセスできず、インターネットでもVMにアクセスできません。問題は、要求をルーティングするためにブリッジが正しく設定されていないためであると仮定します。正しい方向に進むのを手伝ってくれるアドバイスをいただきありがとうございます。

スポンサーの/etc/network/interfaces

auto lo
iface lo inet loopback

auto  br0
iface br0 inet static
  name      Bridge for VMs to connect via
  address   x.x.x.229
  netmask   255.255.255.192
  gateway   x.x.x.193
  # default route to access subnet - this was provided by the data centre:
  up route add -net x.x.x.192 netmask 255.255.255.192 gw x.x.x.193 eth0
  bridge_ports eth0
  bridge_fd 9
  bridge_hello 2
  bridge_maxage 12
  bridge_stp off

auto  br0:0
iface br0:0 inet static
  name      Gateway IP for VMs in subnet y.y.y.240/28
  address   y.y.y.241
  netmask   255.255.255.240
  broadcast y.y.y.255
  network   y.y.y.240

ホストシステム情報:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         x.x.x.193  0.0.0.0         UG    0      0        0 br0
x.x.x.192  0.0.0.0         255.255.255.192 U     0      0        0 br0
y.y.y.240  0.0.0.0         255.255.255.240 U     0      0        0 br0

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether c8:60:00:5e:bd:e0 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether c8:60:00:5e:bd:e0 brd ff:ff:ff:ff:ff:ff
    inet x.x.x.229/26 brd x.x.x.255 scope global br0
       valid_lft forever preferred_lft forever
    inet y.y.y.241/28 brd y.y.y.255 scope global br0:0
       valid_lft forever preferred_lft forever

$ ifconfig
br0       Link encap:Ethernet  HWaddr c8:60:00:5e:bd:e0  
          inet addr:x.x.x.229  Bcast:x.x.x.255  Mask:255.255.255.192
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:743907 errors:0 dropped:0 overruns:0 frame:0
          TX packets:519787 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:92549304 (92.5 MB)  TX bytes:172422977 (172.4 MB)

br0:0     Link encap:Ethernet  HWaddr c8:60:00:5e:bd:e0  
          inet addr:y.y.y.241  Bcast:y.y.y.255  Mask:255.255.255.240
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth0      Link encap:Ethernet  HWaddr c8:60:00:5e:bd:e0  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:743968 errors:0 dropped:0 overruns:0 frame:0
          TX packets:519787 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:102968103 (102.9 MB)  TX bytes:172422977 (172.4 MB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:674890 errors:0 dropped:0 overruns:0 frame:0
          TX packets:674890 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:302219962 (302.2 MB)  TX bytes:302219962 (302.2 MB)

仮想デバイス/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
  address y.y.y.243
  netmask 255.255.255.240
  gateway y.y.y.241

仮想マシンシステム情報:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         y.y.y.241  0.0.0.0         UG    0      0        0 eth0
y.y.y.240  0.0.0.0         255.255.255.240 U     0      0        0 eth0

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:f7:36:74 brd ff:ff:ff:ff:ff:ff
    inet y.y.y.243/28 brd y.y.y.255 scope global eth0
       valid_lft forever preferred_lft forever

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:f7:36:74  
          inet addr:y.y.y.243  Bcast:y.y.y.255  Mask:255.255.255.240
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:18112 errors:0 dropped:0 overruns:0 frame:0
          TX packets:241 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1123962 (1.1 MB)  TX bytes:54822 (54.8 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:444 errors:0 dropped:0 overruns:0 frame:0
          TX packets:444 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:35428 (35.4 KB)  TX bytes:35428 (35.4 KB)

$ ping -c 4 -W 5 x.x.x.229
PING x.x.x.229 (x.x.x.229) 56(84) bytes of data.
64 bytes from x.x.x.229: icmp_seq=1 ttl=64 time=0.117 ms
64 bytes from x.x.x.229: icmp_seq=2 ttl=64 time=0.106 ms
64 bytes from x.x.x.229: icmp_seq=3 ttl=64 time=0.102 ms
64 bytes from x.x.x.229: icmp_seq=4 ttl=64 time=0.103 ms

--- x.x.x.229 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.102/0.107/0.117/0.006 ms

$ ping -c 4 -W 5 x.x.x.193
PING x.x.x.193 (x.x.x.193) 56(84) bytes of data.

--- x.x.x.193 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3007ms

$ ping -c 4 -W 5 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

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

Virtualboxでは、VMの仮想ネットワークインターフェイスをbr0に接続されているブリッジアダプタとして設定しました。 eth0にも接続しようとしましたが、目立つ違いはありません。

修正する:

コメントで提案されているようにIP転送を有効にしました。

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
$ sudo sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

また、VirtualBoxネットワーク設定で無差別モードを有効にしましたが、違いはないと思います。

興味深いものを見つけました。ネットワーク(Googleのネームサーバーなど)で何かをpingすると、最初のpingは応答を受け取りますが、後続のpingでは応答を受け取りません。

$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From y.y.y.241: icmp_seq=1 Redirect Host(New nexthop: y.y.y.y.241)
64 bytes from y.y.y.241: icmp_seq=1 ttl=54 time=5.97 ms
From y.y.y.241 icmp_seq=2 Destination Host Unreachable
From y.y.y.241 icmp_seq=3 Destination Host Unreachable
From y.y.y.241 icmp_seq=4 Destination Host Unreachable
From y.y.y.241 icmp_seq=5 Destination Host Unreachable
From y.y.y.241 icmp_seq=6 Destination Host Unreachable
From y.y.y.241 icmp_seq=7 Destination Host Unreachable
^C
--- 8.8.8.8 ping statistics ---
9 packets transmitted, 1 received, +6 errors, 88% packet loss, time 8041ms
rtt min/avg/max/mdev = 5.972/5.972/5.972/0.000 ms, pipe 3

IP転送がオフになったときに得られるものは次のとおりです。

$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
11 packets transmitted, 0 received, 100% packet loss, time 10000ms

これは、仮想マシンの再起動後に初めて仮想マシンで8.8.4.4をpingしたときにホストからIPパケットをスニッフィングしたときに得られた結果です。同じIPアドレスの後続のpingは、一番下の重複行(最初の2行ではなく)のみを提供します。

$ sudo tcpdump -q -c 10 -e -n host y.y.y.243
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:32:57.199202 c8:60:00:5e:bd:e0 > cc:e1:7f:07:e0:af, IPv4, length 98: y.y.y.243 > 8.8.4.4: ICMP echo request, id 1060, seq 1, length 64
12:32:57.204498 cc:e1:7f:07:e0:af > c8:60:00:5e:bd:e0, IPv4, length 98: 8.8.4.4 > y.y.y.243: ICMP echo reply, id 1060, seq 1, length 64
12:32:58.202555 08:00:27:f7:36:74 > ff:ff:ff:ff:ff:ff, ARP, length 60: Request who-has x.x.x.193 tell y.y.y.243, length 46
12:32:59.201628 08:00:27:f7:36:74 > ff:ff:ff:ff:ff:ff, ARP, length 60: Request who-has x.x.x.193 tell y.y.y.243, length 46
12:33:00.201652 08:00:27:f7:36:74 > ff:ff:ff:ff:ff:ff, ARP, length 60: Request who-has x.x.x.193 tell y.y.y.243, length 46
12:33:01.201759 08:00:27:f7:36:74 > ff:ff:ff:ff:ff:ff, ARP, length 60: Request who-has x.x.x.193 tell y.y.y.243, length 46
12:33:02.201502 08:00:27:f7:36:74 > ff:ff:ff:ff:ff:ff, ARP, length 60: Request who-has x.x.x.193 tell y.y.y.243, length 46
12:33:03.201394 08:00:27:f7:36:74 > ff:ff:ff:ff:ff:ff, ARP, length 60: Request who-has x.x.x.193 tell y.y.y.243, length 46
12:33:04.201706 08:00:27:f7:36:74 > ff:ff:ff:ff:ff:ff, ARP, length 60: Request who-has x.x.x.193 tell y.y.y.243, length 46
12:33:05.201647 08:00:27:f7:36:74 > ff:ff:ff:ff:ff:ff, ARP, length 60: Request who-has x.x.x.193 tell y.y.y.243, length 46
10 packets captured
11 packets received by filter
0 packets dropped by kernel

何がそのような奇妙な結果をもたらすことができますか?ソリューションに近づくために何をテストできますか?

アップデート2:

私は今この問題についてとても混乱しています。そのサブネットへのパスが正しく機能していることを確認するために、ネットワークは追加のサブネット(yyy241)にあるホストのIPアドレスにSSH経由で接続しました。それからyyy243でsshを実行し、何も得られないと予想しましたが、驚くべきことに接続に成功しました!突然、すべてが期待どおりに動作します。 8.8.8.8 およびその他すべてのエントリに対して ping を実行し、すべてのインターネットホストに ssh を送信できます。これは、ホストまたは仮想マシンで何もしなかった後です。

もちろん、私は正しいことをしました。私は科学の名前でそれを破った。何がうまくいくのかを知る必要があります!したがって、ホストシステムで次のことを行います。

sudo sysctl -w net.ipv4.ip_forward=0

明らかに再び有効にしました。

sudo sysctl -w net.ipv4.ip_forward=1

もちろん上記の状況に戻りました。仮想マシンはホストマシンを除いて接続できません。仮想マシンでインターネットホストをpingすると、最初の応答を受け取り、次に何も得られません。

今、本当に恥ずかしいことは、数時間そのままにして戻ってきたときにホストや仮想マシンに何もしなかったことを強調しています。魔法のように働いた。私は魔法が好きではありません。私は科学者で、うまくいかなかったり、うまくいかないのが好きです。前者を好む。このような奇妙な遅延が発生する原因を知っている人はいますか?

関連情報