「ip netns list-id」から取得したnsidを使用して、「ip netns exec」コマンドを実行します。

「ip netns list-id」から取得したnsidを使用して、「ip netns exec」コマンドを実行します。

ip netns exec以前にnetnsインターフェースを変更するためにコマンドを使用したことがあります。しかし、netnsに関連付けられた名前(dockerなど)がない場合は、コマンドnsid結果を使用してip netns list-idnetnsインターフェイスを変更するにはどうすればよいですか?

ベストアンサー1

すべてのnsidの親プロセスIDを見つける必要があります。私が知っている唯一の方法は、/proc/[0-9]*/ns/netここで言及されているすべてを確認することです。https://serverfault.com/a/900972/205043

# Create netns directory if not exist
mkdir -p /var/run/netns

# Add all process namespaces to netns
for i in /proc/[0-9]*/ns/net; do
  ln -s $i /var/run/netns/proc$(echo $i | cut -d/ -f3)
done

# Remove unassociated network namespaces
for i in $(ip netns | grep ^proc | grep -v id); do
  rm -f /var/run/netns/${i}
done

# Remove children processes
for i in $(ip netns | grep ^proc | awk 'a[$3]++ {print $1}'); do
  rm -f /var/run/netns/${i}
done

# Do some action for each ns (eg. check if there is 1.2.3.4 address exists)
for i in $(ip netns | grep ^proc | awk '{print $1}'); do
  echo -n "$i "
  ip netns exec $i ip addr | grep -c '1.2.3.4'
done

# Remove added namespaces
rm -f /var/run/netns/proc*

私の場合、新しく追加されたnsidは次のようになります。

ip netns list-id
nsid 0 (iproute2 netns name: proc26847)
nsid 1 (iproute2 netns name: proc29068)
nsid 2 (iproute2 netns name: proc27483)
nsid 3 (iproute2 netns name: proc27644)
nsid 7 (iproute2 netns name: proc30377)
nsid 9 (iproute2 netns name: proc9606)
nsid 10 (iproute2 netns name: proc15587)
nsid 11 (iproute2 netns name: proc28395)
nsid 12 (iproute2 netns name: proc30729)
nsid 13 (iproute2 netns name: proc29702)
nsid 14 (iproute2 netns name: proc30060)
nsid 15 (iproute2 netns name: proc31698)
nsid 16 (iproute2 netns name: proc3309)
nsid 17 (iproute2 netns name: proc28934)
nsid 18 (iproute2 netns name: proc21272)
nsid 19 (iproute2 netns name: proc921)
nsid 21 (iproute2 netns name: proc32718)
nsid 26 (iproute2 netns name: proc5864)

おすすめ記事