そういえば、うちのubuntu serverも26.04.1にアップデートしてServer機そのものもEthernetポートが2つのGMKtec ultra M5に更新していたのだけれど忙しくて環境はそのままにしていたのを、やっと構築し直す。これまではサーバー機にしていたmini PCにEthernetポートが1つしかなかったので
↑こんな感じにmacvlanを使って共有させていたが、GMKtec ultra M5は2.5GbEのポートが2つあり、うち1つだけ使っていて1つは使ってなかったので余ってるEthernetポートをLXDのコンテナから直接使わせようってわけだ。
なので以下、前提は前回と同様となるがEnternetポートが2つのPCの場合に差し代わることを書いておく(前回の記事の「LXDにmacvlanなネットワークを作る」から差し代わる)。という感じの、ま、個人メモっす。
Contents >>>>>>>>
LXDからminiPCの物理Enternetポートを割り当てる
前回つくったmacvlanなネットワークがあるが、現在profileに紐づいていて削除できないのでとりあえずそれはそのままで新しく空いてる物理Enternetを使うNetworkを作る。色々このあたり調べてみるとSR-IOVを使えとか、他にも色々とヒットしたりするが今回はそんな難しいことは一切省く。
サーバーであるminiPCのネットワークの状況をCockpitでEthernetポートを確認
enp1s0(Etnernet、停止)
enp2s0(Ethernet、サーバーがメインで使用)
wlp3s0(Wi-Fi、停止)
lxdbr0
;
となっており、目的のEthernetポートは「enp1s0」っすな。
LXD-UIを開いて左メニューから「Networks」を選ぶとこんな画面。

右上の緑の部分「+ create network」をおす。

ここで物理Etnernetポートを直接使うためのネットワークを作る。
Type:Physical
Name: eth06(自身でわかりやすく他と判別出来ればいい)
Description:(設定しなくてもいいし、なにか分かりやすい説明書いても良い)
Parent:(ドロップダウンからホストマシンのethernetインターフェースを選択する、つまり今回はenp1s0を選択)
で、右下の「Create」を押すとPhysicalなeth6が用意される。戻った画面で「eth06」「Physical」の行があるのを確認。
Physicalなeth06を使うLXDコンテナプロファイルを用意する
LXD-UIの左のメニューから「Profiles」を選び、右上の緑の部分「+Create profile」を押して新しいプロファイル(仮想マシンのスペックなど)をつくる。

詳しいプロファイルの作り方はググればいくらでも出てくるので要点だけ。デフォルトのプロファイルではなくて専用のプロファイルを用意してそれで立ち上げるようにする。「Profile name」はたとえば私は「Physical-used」とかにして分かりやすくした。
ついで「devices」→「Network」とすすみ「+ Attach network」を押す。

「Device Name」は自動で入っている状態のままでOK。大事なのは「Network」の方で、先ほど用意したPhysicalの「eth06」を選ぶ。
他、CPUやMemory、Diskなどなどを自身の望む設定(必要な設定)をしたあと右下の「Create」を押すと新しいプロファイルが出来る。
インスタンスのプロファイルを、用意したプロファイルを指定して切り替える(作る)
既にインスタンスを作ってあれば下の画面ショットの「Profiles」の部分をPhysicalを使うプロファイルに切り替えて起動しなおすだけ。

これから作る場合でも同じくPhysicalを使うプロファイルを指定して作るだけ。
起動したあと、ホストマシンでlxc listコマンドでも良いしコンテナのubuntuでip aコマンドでもいいので、ネットワークを確認。DHCPでホストマシンと同じネットワークのIPがふられているのが確認出来ればOK。
固定IPを割り当てる-準備
Physicalでホストマシンと同じネットワークにつながっていることを確認出来たら(無事ホストマシンの物理Ethernetポートを直接使えてるのを確認できたら)、serverとして使うために固定IPアドレスにする。
やり方は同じネットワークの別なマシンからSSHでもいいし、LXD-UIを使ってもいいが、ここではより簡単なLXD-UIを使う。
LXD-UIにて起動しているインスタンスの「Overview」を再度確認
「192.168.xxx.xxx(enp5s0)」とかになってた。DHCPで割り当てられたIPアドレスっすな。
先に「Netwoks」の項目を見ると(先述の例の場合)
NAME: eth06
INTERFACE: eth-1
TYPE: Physical(managed)
Mac ADDRESS: –
とかになっていて無事macvlanを使っている事が確認出来る。で、次がややこしいといいうかわかりにくかったのだが「General」のところを確認。

「IPv4」のところを見て欲しい。コンテナのubuntu的には先の説明で作ったeth-1とかになるのかなとか思ったら「enp5s0」だ。なので、固定IPアドレスを割り当てる設定をするのは「enp5s0」について、だ。
固定IPの設定はコンテナのubuntuにnetplanでする。起動している状態で「Overview」から「Terminal」もしくは「Console」タブに切り替えるとTerminalもしくはConsole画面になる(素の状態のままではrootユーザしかいないのでsudoが使える普段使うユーザを作ってそれで操作をする。既にユーザを作ってあればそれでよし)。ちなみにConsoleは「Graphic」と「Text console」と選べる。どっちでも良いw
一応すべて試してみたがTerminalが一番安定して使えるようなので私はTerminalで作業した。それにしてもLXD-UIがあると同じネットワーク内ならホストにさえアクセス出来ればsshとかせんでもさくっとコンテナ内のubuntuを弄れるんで圧倒的に楽 :-)
固定IPを割り当てる-コンテナ内のubuntuでの作業
コンテナのubuntuだが、まずは例によって例のごとくsudo apt updateとsudo apt upgradeをしておく(私は最小限のubuntuイメージをいれたので、デフォルトではnanoすらない状態だったので、nano(意地でもvi使わない私)とか他必要なものを予めここでInstall。以下作業中にもInstallされてなくて使えないコマンドなども都度Install。)
通常のubuntu serveと同じようにネットワークの設定を追加する。
ls /etc/netplan/
とかすると「50-cloud-init.yaml」が一つだけあるならこれをリネームしてバックアップしておく。
sudo /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak
「/etc/netplan/99-eth.yaml」とか頭に50以上の数字のついたyamlファイルを用意するか、50-cloud-init.yamlを(先述したリネームではなくコピーして一つはバックアップファイルにした上で)書き換えてもいい。私は今回はバックアップをした上で書き換えた。
sudo nano /etc/netplan/50-cloud-init.yaml
先述の例では内容はたとえばこんな感じ。ホストマシンが192.168.1.10/24なのでコンテナのubuntuはたとえば192.168.1.11とする(自身の環境にあわせて)。(注意行頭のスペースの個数とかちゃんと合わせないとエラーになるので注意。インデントにはスペース2個とかで合わせるのが一般的?)。
network:
version: 2
ethernets:
enp05s:
dhcp4: no
dhcp6: no
addresses:
- 192.168.1.11/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 192.168.1.1
ここで注意するのはこれも先述したとおり「enp05s」にすることだ。作ったらすぐに反映させてみたいところだがもうちょい我慢。netplanのyamlファイルはroot以外には開けないファイルでないとエラーになる。ので、オーナーと権限を変更する
sudo chown root:root /etc/netplan/*.yaml
sudo chmod 600 /etc/netplan/*.yaml
ネットワーク設定を反映させる
sudo netplan apply
ホストマシンでlxc listでも良いし、コンテナのubuntuでip aでも良ので設定したipアドレス192.168.1.11/24になっていることを確認。念のためコンテナ側からと外側からそれぞれpingを通して確認。ホストマシンにもPingを通してどちらもLANから使えることを確認。OK(^^)
ちなみに、LXD仮想マシンが起動している間は、ホストマシンのCockpitでネットワークを確認すると「enp1s0」は消えて管理がLXDの方に移っていることが確認できる。LXD仮想マシンを終了すると「enp1s0」が「停止」状態で確認できる。
てことで
LXDから直接マシンの余ってる物理Ethernetポートを使わせたいと思った時にググるとなんか色々と面倒だっりするような解説があったりするが、なんのことはない、LXD-UIから直接設定していけば良いだけだった。