Armadilloフォーラム

コンテナへのIPアドレス割り当てについて

urasue

2023年5月12日 16時09分

お世話になっております。
浦末です。

コンテナに固定IPアドレスを割り当てようとしています。
ホスト側と同じネットワークのIPアドレスを割り当てようとしたところ、
下記のエラーが表示され、割り当てに失敗しました。

armadillo:/etc/atmark/containers# cat my_network.conf
set_type network
add_args --subnet 192.168.101.0/24

armadillo:/etc/atmark/containers# podman_start my_network
Creating network 'my_network'
Error: subnet 192.168.101.0/24 is already used on the host or by another config

ホストと同じネットワークには出来ないのでしょうか。

コメント

at_dominique.m…

2023年5月12日 16時28分

浦末さん

マルティネです。

> コンテナに固定IPアドレスを割り当てようとしています。
> ホスト側と同じネットワークのIPアドレスを割り当てようとしたところ、
> 下記のエラーが表示され、割り当てに失敗しました。
>
> armadillo:/etc/atmark/containers# cat my_network.conf
> set_type network
> add_args --subnet 192.168.101.0/24
>
> armadillo:/etc/atmark/containers# podman_start my_network
> Creating network 'my_network'
> Error: subnet 192.168.101.0/24 is already used on the host or by another config
>
> ホストと同じネットワークには出来ないのでしょうか。

podman_start で作成するネットワークは podman network の "bridge" ドライバでインターフェースを使っていて、そのドライバーでは podman側で同じ subnet を使えません。
コンフィグに add_args --driver macvlan を設定すればネットワークを作成できると思いますが、どうでしょうか?

よろしくお願いします

マルティネ様
浦末です。
ご回答ありがとうございます。
教えて頂いた方法でネットワークの作成が出来ました。

ただ、別のPCからコンテナへのpingは通るのですが、
ホスト側からコンテナへのpingが通らない状態です。

また、コンテナ(debian)にiputils-pingをインストールしてpingを実行すると
下記のエラーが発生します。

-bash: /bin/ping: Operation not permitted

root@3d8e8d06c5f4:/etc# ls -alt /bin/ping
-rwxr-xr-x 1 root root 69080 Feb 2 2021 /bin/ping

何か権限が不足しているのでしょうか。

at_dominique.m…

2023年5月12日 17時12分

> ただ、別のPCからコンテナへのpingは通るのですが、
> ホスト側からコンテナへのpingが通らない状態です。

これは macvlan の仕様の問題ですね。
docker でも同じ問題があって、同じワークアラウンドを使えると思います
(英語ですみません、少し探せば日本語もあると思います: https://stackoverflow.com/a/64360858/2332808 特に nmcli のコメントを使って、/etc/NetworkManager/system-connections を persist_file で保存できると思います。最後まで確認する時間がなくてすみません)

> また、コンテナ(debian)にiputils-pingをインストールしてpingを実行すると
> 下記のエラーが発生します。
>
> -bash: /bin/ping: Operation not permitted

これは ping が raw socket を使いたいですが、コンテナから権利がないからです。
テストのためにコンテナに add_args --cap-add NET_ADMIN を追加すればできると思います

ちなみに、add_ports を使えない理由がありますか?
コンテナのサービスの分だけのポートをネットワークに降れさせた方が安全かと思いますので、サポートしやすい面でもセキュリティの面でも add_ports を使ってもらえたらと思います。

よろしくお願いします

お世話になります。
ご回答ありがとうございます。

> これは ping が raw socket を使いたいですが、コンテナから権利がないからです。
> テストのためにコンテナに add_args --cap-add NET_ADMIN を追加すればできると思います

コンテナのconfigにNET_ADMINを追加してみましたが、同じエラーとなってしまいました。
試しにNET_RAWを追加したところ、pingが使えるようになりました。
add_args --cap-add=NET_RAW

> コンテナのサービスの分だけのポートをネットワークに降れさせた方が安全かと思いますので、サポートしやすい面でもセキュリティの面でも add_ports を使ってもらえたらと思います。

add_portsにて、コンテナのサービスにポートを割り当てる方法で対応してみます。