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を設定せずに、受信ができないかを教えて頂けますか?
コメント
ftokioka
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 を設定します
コンテナのコンフィグファイルに IP アドレスを固定します
2/ dhcp
network.conf に subnet/gateway を設定しません
netavark-dhcp-proxy サービスを有効します
コンテナに「
set_network network
」だけを指定すれば、dhcp で ip を自動的に取得します。(この内容はマニュアルに載せてなくてお手数をお掛けしました…よろしければ使ってください)
よろしくお願いします。