以前の回答で述べたように、この問題の解決策は、ホストにmacvlanネットワークアダプターを追加することです。ただし、特にIPv6のサポートが必要で、プレフィックスが変更されたときにルートを手動で設定すると問題が発生する可能性があったため、macvlanアダプターへのルートを手動で再配線するのはちょっと面倒だと感じました。カーネルがルーティングテーブルの制御下に置かれる私の構成は次のとおりです。
(ここでの特定の構成はDebianおよびUpstart固有ですが、基本的な手順はすべてのGNU / Linuxで機能するはずです。)
起動時にmacvlanアダプターを作成する
最初に、アダプターのMACアドレスを選択する必要があります。ランダムに使用できる場合もありますが、手動でmacvlanアダプターを作成し、そのMACを使用することをお勧めします。このようにして、MACはそこに存在する可能性のあるすべての規則に従います。
固定MACを設定することをお勧めします。そうしないと、たとえばDHCPサーバーが再起動後にマシンを認識し、以前と同じIPアドレスを割り当てる方法がないためです。
アダプターを作成してMACを調べます。
root@host:~# ip link add link eth0 macvlan0 type macvlan mode bridge
root@host:~# ip addr show dev macvlan0
#: macvlan0@eth0: mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1
link/ether 12:34:56:78:90:ab brd ff:ff:ff:ff:ff:ff
...
強調表示されている16進数はMACアドレスです。
今度は、起動のたびにmacvlanアダプターを作成するために、ネットワークが初期化される前に実行する必要がある初期化スクリプトを作成します。これを行うコマンドは次のとおりです。
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
この目的のためのサンプルUpstart initスクリプトは次のようになります。
start on starting networking
script
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
end script
これを例えばに入れてください/etc/init/macvlan.conf
。
ネットワーク構成のセットアップ
で/etc/network/interfaces
、物理ネットワークアダプターを手動(ただし、自動のまま)に設定し、以前の構成(通常はDHCPまたは静的IPアドレス)をmacvlanアダプターに移動します。例えば:
auto eth0
iface eth0 inet manual
auto macvlan0
iface macvlan0 inet dhcp
物理アダプターのIPv6の無効化
最後に、物理アダプターがIPアドレスを取得しないようにします。IPv4の場合、アダプターを手動に設定すると、アドレスを取得できなくなります。ただし、カーネルがアダプターのIPv6アドレスを取得/割り当てできないようにする構成は見つかりませんでした。その場合、ルートも追加するため、問題が発生する可能性があります。したがって、最善の方法は、物理アダプターのIPv6を無効にすることです。あなたは行を追加することでこれを行うことができます
net.ipv6.conf.eth0.disable_ipv6=1
to /etc/sysctl.conf
、/etc/sysctl.d/
この行でファイルを作成するか、または
sysctl -w net.ipv6.conf.eth0.disable_ipv6=1
あなたのinitスクリプトに。
マシンを再起動すると、ホストからゲストへの通信はIPv4とIPv6の両方で機能するはずです。
この設定を間違えると、再起動後もネットワーク経由でホストにアクセスできなくなる可能性があることに注意してください。これを行うのは、マシンに物理的にアクセスできる場合や、潜在的な問題を修正できるように他の保護手段が整っている場合のみです。