Armadilloフォーラム

Armadillo Base OS:コンテナ上のアプリからネットワーク切断する方法について

masa.yamaguchi

2024年6月24日 18時02分

現在、Armadillo Base OS(Armadillo-610)上のコンテナ上のアプリから ネットワーク接続/切断を実施しようとしていますが、
現状できておりません。
(ABOS Webは何でも出来てしまうことから、ユーザが不要な設定ができないようにする為、ABOS Web使わずネットワーク接続/切断を試みています)
■状況
・REST APIについては、ネットワーク切断する処理が見当たらなかったため、REST APIは未使用。
・sshpassを使用してネットワーク切断をしようとするとエラーとなり、切断できない。
 [前提]
  ・REST APIにてネットワーク情報の取得ができることは確認済み(GET "/api/connections")。
  ・sshpassはインストール後、"nmcli d"ができることは確認済み。
  ・無線LAN接続(インフラストラクチャモード)確認後、
   "podman exec -it アプリ名 bash" 実行し、コンテナ内のアプリで無線LANを切断しようとして
   "nmcli connection down"を実行するが、以下エラー発生。

root@armadillo:/# sshpass -p atmark ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null  atmark@IPアドレス  nmcli connection down コネクション名 
 Warning: Permanently added 'IPアドレス' (ECDSA) to the list of known hosts.
 Connection 'コネクション名' deactivation failed: Not authorized to deactivate connections

  ・nmcli connection down はホストでは実行できることを確認済み。

■質問
 Armadillo Base OSのコンテナ上のアプリからネットワーク接続/切断を実施する方法について、ご教示頂きたいです。
 

コメント

佐藤です。

> ・REST APIについては、ネットワーク切断する処理が見当たらなかったため、REST APIは未使用。
すいません、仰るとおり現状ネットワークを接続・切断するAPIは用意しておりません。すこし手間ですが、以下のようにするとできるかと思います。
(curl は apt install curl でインストールしておいてください)

curl -v -k -c cookie -b cookie -d password=<ABOS Webへのログインパスワード> https://127.0.0.1:58080/login
curl -k -v -c cookie -b cookie -d con_uuid=<コネクション名> https://127.0.0.1:58080/connection_down

connection_down の部分を connection_up にすると接続になります。
REST APIの方は今後のアップデートで対応を検討します。

>    "nmcli connection down"を実行するが、以下エラー発生。
atmark ユーザでログインしてる空ではないかと思います。

佐藤 様

masa.yamaguchiです。ご回答ありがとうございます。
以下curlコマンド実行により、コンテナからネットワークの接続・切断が確認できました。
1点だけ念のためにお伺いしたいこと★がございます。

<実行したcurlコマンド>
curl -v -k -c cookie -b cookie -d password=root https://<IPアドレス>:58080/login
curl -k -v -c cookie -b cookie -d con_uuid=ISB-CloudIQEx https://<IPアドレス>:58080/connection_down
curl -k -v -c cookie -b cookie -d con_uuid=ISB-CloudIQEx https://<IPアドレス>:58080/connection_up

★お伺いしたいこと

上記<IPアドレス>は以下のケースではコンテナ内からのcurlコマンド実行で接続・切断ができました。
 ・ホストのpodman0のIPアドレス:10.88.0.1
 ・ホストのeth0のIPアドレス:192.168.11.XX
しかしながら、ご提示いただいたループバックアドレス:127.0.0.1 の場合は、コンテナ内からのcurlコマンド実行ができませんでした。
(以下MSGが表示されます)

*   Trying 127.0.0.1:58080...                                                                                             
* connect to 127.0.0.1 port 58080 failed: Connection refused                                                              
* Failed to connect to 127.0.0.1 port 58080: Connection refused                                                           
* Closing connection 0                                                                                                    
curl: (7) Failed to connect to 127.0.0.1 port 58080: Connection refused 

上記事象は意図通りとなりますでしょうか。
(ホストでcurlコマンドに127.0.0.1を設定した場合は正常に動作します)

佐藤です。

> ★お伺いしたいこと
>
> 上記<IPアドレス>は以下のケースではコンテナ内からのcurlコマンド実行で接続・切断ができました。
>  ・ホストのpodman0のIPアドレス:10.88.0.1
>  ・ホストのeth0のIPアドレス:192.168.11.XX
> しかしながら、ご提示いただいたループバックアドレス:127.0.0.1 の場合は、コンテナ内からのcurlコマンド実行ができませんでした。
> (以下MSGが表示されます)
>

> *   Trying 127.0.0.1:58080...                                                                                             
> * connect to 127.0.0.1 port 58080 failed: Connection refused                                                              
> * Failed to connect to 127.0.0.1 port 58080: Connection refused                                                           
> * Closing connection 0                                                                                                    
> curl: (7) Failed to connect to 127.0.0.1 port 58080: Connection refused 
> 

> 上記事象は意図通りとなりますでしょうか。
> (ホストでcurlコマンドに127.0.0.1を設定した場合は正常に動作します)
すいません。アドレスの指定は "host.containers.internal" にしてください。(デフォルトは10.88.0.1です)

(こちらの手元で確認した環境では、コンテナconfファイルにset_network hostを設定していたため127.0.0.1で繋がりました。)

佐藤 様

masa.yamaguchiです。ご回答ありがとうございます。

アドレスの指定は "host.containers.internal" にしてください。(デフォルトは10.88.0.1です)

ご教示いただいた"host.containers.internal"を使用することで、アプリのコンテナ内からcurlコマンドを使用して
コネクションの接続・切断操作ができることを確認できました。
ご対応頂きありがとうございました。