「固定する」

「固定する」

Linuxのマニュアルページネットワークネームスペース(7)説明する:

ネットワーク名前空間は、ネットワーク関連のシステムリソース([...]、/sys/class/netディレクトリ、[...])を分離します。

しかし、単に別のネットワークネームスペースに切り替えても内容が変更されるわけではないようです/sys/class/net(再現方法の詳細は下記参照)。私はちょうどsetns()間違って考えましたか?ネットワーク名前空間で十分ですか?現在接続されているネットワーク名前空間を/sys正しく一致させるには、常に再マウントする必要がありますか?/sys/class/netそれともここで別のものを見逃していますか?

再現例

*ubuntuシステムを選択し、rtkit-daemonのPIDを探し、デーモンのネットワーク名前空間を入力し、そのネットワークインターフェースを表示し、以下を確認してください/sys/class/net

$ PID=`sudo lsns -t net -n -o PID,COMMAND | grep rtkit-daemon | cut -d ' ' -f 2`
$ sudo nsenter -t $PID -n
# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
# ls /sys/class/net
docker0  enp3s0  lo  lxcbr0  ...

ip link showただ表示するloのは正しいですが、/sys/class/netみんな「root」ネットワークネームスペース(および「root」マウントネームスペース)に表示されるネットワークインターフェイス。

マウントネームスペースも入力してもrtkit-daemon違いはありません。sudo nsenter -t $PID -n -mこれにより、ls /sys/class/netネットワーク名前空間に存在しないネットワークインターフェイスが引き続き表示されます。

「固定する」

多くの栄誉@danilakeeferLinuxカーネルの背後で何が起こるか説明してください。再インストールsysfs しかし、正しいネットワーク名前空間を追加すると、次のようになります。正しいアイテム/sys/class/net

$ PID=`sudo lsns -t net -n -o PID,COMMAND | grep rtkit-daemon | cut -d ' ' -f 2`
$ sudo nsenter -t $PID -n
# MNT=`mktemp -d`
# mount -t sysfs none $MNT
# ls $MNT/class/net/
lo
# umount $MNT
# rmdir $MNT
# exit

今正しい結果が/sys/class/net

ベストアンサー1

私たちに見せてくださいman 5 sysfs

/sys/class/net
    Each  of the entries in this directory is a symbolic link representing
    one of the real or virtual networking devices that are visible in 
    the network namespace of the process that is accessing the directory.

したがって、このマンページによると、出力はプロセスのネットワークネームスペースls /sys/class/netによって異なります。lsしかし、実際の動作は、このマニュアルページに記載されているものと同じではないようです。どのように動作するかについての良いカーネル文書があります。

すべてのsysfsマウントには1つあります。名前空間タグと関連付けられる。このラベルは sysfs のインストール中に設定されます。呼び出しプロセスのネットワーク名前空間によって異なります。。各sysfsエントリ(例:のエントリ/sys/class/net)も名前空間タグがある可能性があります。と関連付けられる。

sysfs ディレクトリに移動すると、カーネルは次のようになります。sysfsマウントネームスペースラベル、項目を繰り返し、異なる名前空間タグを持つアイテムをフィルタリングします。

したがって、反復結果は、現在のプロセス/sys/class/netのネットワーク名前空間ではなく、マウントを開始したプロセスのネットワーク名前空間に依存するため、常に現在のネットワーク名前空間(すべてのプロセスに属する)にマウントする必要があります。名前空間を使用して正しい結果を確認してください。/sys/sys

おすすめ記事