スキップしてメイン コンテンツに移動

Hypver-V gest間で 特定のネットワークアダプターに名前付けしてlinux tagged vlanでvm同士を通信させる

Hyper-VゲストのLinux(Debian 12)間でvlanを構成したのですが当初は通信できませんでした。特に難しい設定ではないので、同様の設定を物理マシン間で再現したところ、通信できたので、どうやらHyper-Vは何もしていない場合、Guest上で設定したtagged vlanではvm間で通信できないようです。
そこで調べたところ、以下の様にするとVM同士のVLAN間で取敢えず通信できましたが、複数のNICを持たせてある場合、他が通信できなくなる落とし穴がありました。
Set-VMNetworkAdapterVlan r20 –Trunk –AllowedVlanIdList 1-4094 –NativeVlanId 0
Set-VMNetworkAdapterVlan r21 –Trunk –AllowedVlanIdList 1-4094 –NativeVlanId 0
Set-VMNetworkAdapterVlan r22 –Trunk –AllowedVlanIdList 1-4094 –NativeVlanId 0
trunkはトランク接続つまりtagged vlan 接続のことであり、このコマンドレットでr21-r22のGuest間でtagged vlan接続できるようになりましたが、複数のネットワークアダプターを持っている場合、上述のコマンドだとすべてのアダプターに対して、トランクモードが設定されてしまい、Hyper-Vマネージャで設定したvlan設定もすべてすっ飛んでしまいます。
> Get-VMNetworkAdapterVlan r20

VMName VMNetworkAdapterName    Mode  VlanList
------ --------------------    ----  --------
r20    ネットワーク アダプター Trunk 0,1-4094
r20    ネットワーク アダプター Trunk 0,1-4094
r20    ネットワーク アダプター Trunk 0,1-4094
r20    ネットワーク アダプター Trunk 0,1-4094
r20    ネットワーク アダプター Trunk 0,1-4094
r20    ネットワーク アダプター Trunk 0,1-4094
r20    ネットワーク アダプター Trunk 0,1-4094
しかも、どれが何のアダプターかわかりません。特定のネットワークアダプターのみTrunk接続させたい場合、要は対象となるネットワークアダプター名を先に変更してから、trunk接続の設定をする必要があるようです。
具体的には以下の様にします。既に変更してしまった場合、一旦Untaggedの状態にします。(この状態にしないとhypev-vマネージャーではエラーがでて変更することができませんでした。)
Set-VMNetworkAdapterVlan -VMName r20 -Untagged
続いて、どのネットワークアダプタがどれなのかわからいので、hyper-vマネージャーで手動でvlanとswitchの設定を基に戻し、確認します。
> Get-VMNetworkAdapterVlan -VMName r20

VMName VMNetworkAdapterName    Mode     VlanList
------ --------------------    ----     --------
r20    ネットワーク アダプター Untagged
r20    ネットワーク アダプター Access   20
r20    ネットワーク アダプター Access   21
r20    ネットワーク アダプター Access   22
r20    ネットワーク アダプター Access   23
r20    ネットワーク アダプター Access   24
r20    ネットワーク アダプター Untagged
次に、以下の様にしてアダプターを特定できるように確認します。
> Get-VMNetworkAdapter -VMName r20

Name                    IsManagementOs VMName SwitchName      MacAddress   Status IPAddresses
----                    -------------- ------ ----------      ----------   ------ -----------
ネットワーク アダプター False          r20    vsw01           00155D019C68 {Ok}   {}
ネットワーク アダプター False          r20    vsw20           00155D012020 {Ok}   {10.1.20.1, 240b...
ネットワーク アダプター False          r20    vsw21           00155D012021 {Ok}   {10.1.21.1, fe80...
ネットワーク アダプター False          r20    vsw22           00155D012022 {Ok}   {10.1.22.1, fe80...
ネットワーク アダプター False          r20    vsw23           00155D012023 {Ok}   {10.1.23.1, fe80...
ネットワーク アダプター False          r20    vsw24           00155D012024 {Ok}   {10.1.24.1, fe80...
ネットワーク アダプター False          r20    vsw-vlan-test00 00155D019C6E {Ok}   {10.1.27.1, fe80...
今回はSwitchNameが"vsw-vlan-test00"でMacAddressが"00155D019C6E"のネットワークアダプター名を変更して、それだけをtrunk 接続に接続してみます。まず、ネットワークアダプター名の変更は以下の様にしてみました。
> $vmnetadapt = Get-VMNetworkAdapter -VMName r20 | Where-Object {$_.MacAddress -EQ "00155D019C6E"}
> Rename-VMNetworkAdapter -VMNetworkAdapter $vmnetadapt -NewName vNic01

> Get-VMNetworkAdapter -vmname r20
Name                    IsManagementOs VMName SwitchName      MacAddress   Status IPAddresses
----                    -------------- ------ ----------      ----------   ------ -----------
ネットワーク アダプター False          r20    vsw01           00155D019C68 {Ok}   {}
ネットワーク アダプター False          r20    vsw20           00155D012020 {Ok}   {10.1.20.1, 240b...
ネットワーク アダプター False          r20    vsw21           00155D012021 {Ok}   {10.1.21.1, fe80...
ネットワーク アダプター False          r20    vsw22           00155D012022 {Ok}   {10.1.22.1, fe80...
ネットワーク アダプター False          r20    vsw23           00155D012023 {Ok}   {10.1.23.1, fe80...
ネットワーク アダプター False          r20    vsw24           00155D012024 {Ok}   {10.1.24.1, fe80...
vNic01                  False          r20    vsw-vlan-test00 00155D019C6E {Ok}   {10.1.27.1, fe80...

ここまでくればあとはvNic01に対しtrunk接続できるように設定するだけです。
> Set-VMNetworkAdapterVlan r20 -VMNetworkAdapterName vNic01 –Trunk –AllowedVlanIdList 1-4094 –NativeVlanId 0
> Get-VMNetworkAdapterVlan -VMName r20

VMName VMNetworkAdapterName    Mode     VlanList
------ --------------------    ----     --------
r20    ネットワーク アダプター Untagged
r20    ネットワーク アダプター Access   20
r20    ネットワーク アダプター Access   21
r20    ネットワーク アダプター Access   22
r20    ネットワーク アダプター Access   23
r20    ネットワーク アダプター Access   24
r20    vNic01                  Trunk    0,1-4094
以上の設定を他のVMにも適用してください。
参考までに、r20 r21 r22の/etc/network/interfaces.d以下の設定は以下の通りです。
# r20 /etc/network/interfaces.d/eth6.27
auto eth6.27
iface eth6.27 inet static
  address 10.1.27.1
  netmask 255.255.255.0

# r21 /etc/network/interfaces.d/eth2.27
auto eth2.27
iface eth2.27 inet static
  address 10.1.27.2
  netmask 255.255.255.0

# r22 /etc/network/interfaces.d/eth2.27
auto eth2.27
iface eth2.27 inet static
  address 10.1.27.3
  netmask 255.255.255.0
Hyper-vのネットワーク関係は設定が少し面倒だけど、何とかなりました。今回は以上です。それでは。

コメント

このブログの人気の投稿

wsdd を使ってSamba サーバをネットワークに表示

Windows 10のアップデートで、セキュリティー対応のため、smbv1がデフォルトではインストールされなくなり、Samba serverがエクスプローラーのネットワークに表示されなくなってしまいました。そこで、いくつか方法を調べたのですが、linuxでwsdの実装がないか探したところ、 https://github.com/christgau/wsdd が、見つかりましたので、さっそくインストールしてみました。まだパッケージにはないようですが、インストール自身は簡単です。wsdd自体は以下のように取得し、linkを張っておきます。 cd /usr/local/bin/ sudo wget https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py sudo chmod 755 wsdd.py sudo ln -sf wsdd.py wsdd こちらのsambaサーバはDebianなので、/etc/systemd/system/wsdd.serviceは以下のようにしました。 [Unit] Description=Web Services Dynamic Discovery host daemon Requires=network-online.target After=network.target network-online.target multi-user.target [Service] Type=simple ExecStart=/usr/local/bin/wsdd -d MYDOMAIN [Install] WantedBy=multi-user.target wsdd -d MYDOMAINのところを、環境にあわせて書き換えてください。 次に、systemdに登録・起動テストを行います。 systemctl enable wsdd systemctl start wsdd 起動に成功すると、エクスプローラーのネットワークに表示されます。  なおこのwsddはpython3が必要です。一度試してみてください。SMBv1/CIFSを停止していても、大丈夫です。 cで書かれたほかのwsddの実装もあるようなので、いずれパッケージになるかもしれませ

Windows デバイス暗号化 のサポートで "許可されていない dma 対応バス/デバイスが検出されました"の対処

Windows でセキュリティー関係を見ているのですが、とあるPCでmsinfo32で確認すると"デバイス暗号化のサポート"で"許可されていない dma 対応バス/デバイスが検出されました"と出ていました。このPCの場合、それ以外はOK(なにも表示されない)だったのですが、ネットでしらべるとMSのドキュメントではハードウェアベンダーに問い合わせるなどと敷居が高く具体的にどこが引っかかっているかわかりません。そこでほかに方法はないかとしらべやってみたところ、"前提条件をみたしています"まで持って行けたので、本稿を挙げた次第です。 具体的には、以下のようにします。 1-a. 許可するDMA対応バス・デバイスを指定するレジストリの所有権と書き込み設定をおこなう。 以下のレジストリキーの所有者を自分自身(管理ユーザ)のものにし、フルコントロール権を付与する。 HKLM\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses もしくは 1-b. MicrosoftよりPsExecをダウンロードし、System権限でRegeditを立ち上げ編集する。 Microsoftより、https://docs.microsoft.com/en-us/sysinternals/downloads/psexec にある こちら をダウンロードし、解凍する。解凍すると、x64の場合、PsExec64.exeがあるので、管理者権限で以下を実行し、システム権限でregeditを立ち上げることが出来るようになる。 cd Downloads\PSTools .\PsExec64.exe -sid C:\Windows\regedit.exe 2-a. パワーシェルスクリプトを実行し、PnPデバイスのうちインスタンスがPCIで始まるものを"AllowedBuses"に追加する。 以下のパワーシェルスクリプトを作成する。たとえばDocuments\allow-dma-bus-device.ps1として作成する。( こちらの記事のものを使用させていただきました: Thank you! ) $tmpfile = "$($env:T

フレッツ光クロス:MAP-E ROUTER by Debian Box (iptables)

フレッツ光クロスがようやく開通したので、Debianにてrouterを構成し接続してみました。なお、プロバイダーを選ぶにあたっては、IPoE方式がそれぞれ異なるため検討したところ、IPoEでは、MAP-Eでもv6plusとocnバーチャルコネクトがあり、前者がポート数240なのに対し、後者は約4倍のポート数が使えるようなネットの情報をみて、OCNバーチャルコネクトを選択しました。(プロバイダーとしてはぷららです。なおDS-LiteはCE側でのNATではないので今回は見送りました。)そこで、OCN バーチャルコネクトをDebian(iptables)で実現するとどうなるかと思い、ネットの情報を頼りにしつつ、設定した次第です。 実際に試した結果、とりあえず通信できていますが、MAP-Eは本来マッピングルールをマップサーバから取得するはずなので、今回のやり方が正解とはいえませんし、仕様変更されると通信できなくなる可能性があります。あくまでも参考程度ですが、本稿をUPしてみました。 2023/03/16追記: こちら にゲームコンソールNAT越え(Nintendo Switch ナットタイプ A判定)対応版を投稿しました。 2023/03/28追記:※1の記述および3行無効化によりNAT越え(Nintendo Switch ナットタイプ B判定)できるようになりました。 構成は以下の通りです。 ルーターがDebianで回線がOCNバーチャルコネクトであること以外はなにも特別なところはない構成です。 さて、いきなり設定ですが、まず、割り当てられたプレフィックスを確認します。 確認は、 dhclient -6 -d -P enp2s0 とします。出力の中に 前略 RCV: | | X-- IAPREFIX 2400:4050:5c71:af00::/56 後略 このようにプレフィックスが表示されるので、その確認したプレフィックスを書き留めておきます。これを こちらで 入力します。すると、 CE: 2400:4050:5c71:af00:99:f171:c600:2f00 IPv4 アドレス: 153.241.113.198 ポート番号:(1776-1791 2800-2815 3824-3839) 4848-4863 5872-5887 6896-