データセンターに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すると、最初の応答を受け取り、次に何も得られません。
今、本当に恥ずかしいことは、数時間そのままにして戻ってきたときにホストや仮想マシンに何もしなかったことを強調しています。魔法のように働いた。私は魔法が好きではありません。私は科学者で、うまくいかなかったり、うまくいかないのが好きです。前者を好む。このような奇妙な遅延が発生する原因を知っている人はいますか?