Armadilloフォーラム

Armadillo IoT A6E コンテナRAW_SOCKET使用方法に関して

ftokioka

2024年4月15日 19時26分

ホスト側で、受信しているeth0のパケットのみを
コンテナ内で、socket通信で、SOCK_RAWを使用して、ETH_P_ARP や ETH_P_IPの受信をしようとしております。
add_args --cap-add=NET_RAW --cap-add=NET_ADMINを指定すると
pingは、可能なことは確認をしております。

socket通信で、SOCK_RAWを使用して、EETH_P_ARP や ETH_P_IPの受信は、できていません。

受信ができないため、--driver macvlanを設定して、コンテナのIPアドレスを設定すると受信ができるのですが、
--driver macvlanを設定せずに、受信ができないかを教えて頂けますか?

コメント

at_dominique.m…

2024年4月16日 13時49分

ftokiokaさん

お世話になっています、
マルティネです。

> ホスト側で、受信しているeth0のパケットのみを
> コンテナ内で、socket通信で、SOCK_RAWを使用して、ETH_P_ARP や ETH_P_IPの受信をしようとしております。
> add_args --cap-add=NET_RAW --cap-add=NET_ADMINを指定すると
> pingは、可能なことは確認をしております。
>
> socket通信で、SOCK_RAWを使用して、EETH_P_ARP や ETH_P_IPの受信は、できていません。
>
> 受信ができないため、--driver macvlanを設定して、コンテナのIPアドレスを設定すると受信ができるのですが、
> --driver macvlanを設定せずに、受信ができないかを教えて頂けますか?

サポートしている podman ネットワークは3パターンがあります:
1/ デフォルト(driver bridge)
2/ macvlan
3/ host モード

デフォルトの場合、コンテナは podman0 という bridge に接続されて、iptables で NAT されていますので、送信の場合は NAT のルールでフォーワードされますが受信には追加のルールが必要です。
必要ですが、スタンダードで追加する方法がありませんので、とても推奨できない状態です。

なので、set_network host でホストネットワークを直接に使うか、macvlan を使うしかないと思います。

ちなみに、maclvan の場合には二つの設定方法があります:
1/ 固定 IP
network.conf に以下の様な内容で subnet, gateway を設定します

add_args --driver=macvlan --opt parent=eth0 --subnet=10.1.2.0/24 --gateway 10.1.2.254

コンテナのコンフィグファイルに IP アドレスを固定します

set_network network:ip=10.1.2.4

2/ dhcp
network.conf に subnet/gateway を設定しません

add_args --driver=macvlan --opt parent=eth0

netavark-dhcp-proxy サービスを有効します

armadillo:~# rc-update add netavark-dhcp-proxy
 * service netavark-dhcp-proxy added to runlevel default
armadillo:~# persist_file -vp /etc/runlevels/default/netavark-dhcp-proxy 
Added "/etc/runlevels/default/netavark-dhcp-proxy" to /etc/swupdate_preserve_files
'/mnt/etc/runlevels/default/netavark-dhcp-proxy' -> '/target/etc/runlevels/default/netavark-dhcp-proxy'
armadillo:~# rc-service netavark-dhcp-proxy start
netavark-dhcp-proxy      | * Starting netavark-dhcp-proxy ...                                    [ ok ]

コンテナに「set_network network」だけを指定すれば、dhcp で ip を自動的に取得します。

(この内容はマニュアルに載せてなくてお手数をお掛けしました…よろしければ使ってください)

よろしくお願いします。

host モードにて実施できることは確認いたしました。
ありがとうございました。