0

複数のネットワーク名前空間が定義された Linux サーバーがあります。

# ip netns list
qdhcp-7dedbd4e-2265-4aa2-baac-add4e341dd18
qdhcp-851379ba-1d51-4e45-8e50-b756e81c0949
qdhcp-a19927c5-83b4-4bb4-a8b8-f21fdb5e004b
qdhcp-b94605ff-b0e2-4cfe-a95e-3dd10208a5fb
... ...

各名前空間には、1 つ以上の仮想ネットワーク アダプターが含まれています。この場合は、TAP デバイスです。

# ip netns exec qdhcp-7dedbd4e-2265-4aa2-baac-add4e341dd18 ip route
192.168.168.0/24 dev tapda4018ab-b7  proto kernel  scope link  src 192.168.168.2
169.254.0.0/16 dev tapda4018ab-b7  proto kernel  scope link  src 169.254.169.254
default via 192.168.168.1 dev tapda4018ab-b7

ここで、アダプターのtapda4018ab-b7名前はわかっているとしますが、それが属する名前空間はわかりません。名前空間を1つずつチェックせずに調べる方法はありますか? これを行うための一般的な Linux コマンドはありますか? または、少なくとも OpenStack Neutron 固有のコマンドですか?

4

3 に答える 3

1

このマニュアルページhttp://man7.org/linux/man-pages/man8/ip-netns.8.htmlによると、すべての名前空間で exec コマンドを実行できますが、ubuntu の信頼できるサーバーでテストしましたが、実行されません。 " -all " を引数として受け入れます。したがって、そのような情報を取得する唯一の方法は、小さな bash スクリプトを使用することです。私のスクリプト スキルはかなり基本的なものなので、確実に改善できるものを作成しましたが、うまくいきます。

#!/bin/bash
i=$(ip netns list | wc -l)
counter=1
while [ $counter -le $i ]; do
    ns=$(ip netns | head -$counter | tail -1)
    ip netns exec $ns ip route | grep $1 | grep proto
    let counter=counter+1
done

次に、次の例のように、タップ デバイスを唯一の引数として使用してスクリプトを起動できます。

root@columbo:~# ./list_all_namespace tap8164117b-e3
5.5.5.0/25 dev tap8164117b-e3  proto kernel  scope link  src 5.5.5.3

引数を指定しないと、エラーが発生します。

于 2015-04-04T12:53:08.133 に答える
1

私が Neutron を正しく理解していれば (これは大きな問題です。私の唯一の経験は、Kilo/2015.1.2 のかなり限定的なおもちゃのインストールに関するものです)、neutron のデータベースを追跡して、探している netns を見つけることができるはずです。

タップ インターフェイスは、関連付けられているポート uuid の最初の 5 オクテット (10 文字) を使用して名前が付けられ、qdhcp netns はそのネットワークの uuid を使用するため、neutron CLI を使用して追跡できるはずです。正しい名前空間。

次のコマンドを使用して、タップ インターフェイスの neutron ポートを見つけることができるはずです。

$ neutron port-list | grep "da4018ab-b7"
| da4018ab-b7xx-xxxx-xxxx-xxxxxxxxxxxx |   | fa:16:xx:xx:xx:xx | {"subnet_id": ...

「da4018ab-b7」は「tapda4018ab-b7」から抜き出しました。その後、完全なポート uuid を使用できます。

$ neutron port-show da4018ab-b7xx-xxxx-xxxx-xxxxxxxxxxxx

port-show の結果の network_id から、tapda4018ab-b7 を含む netns (qdhcp-network_id) を特定できるはずです

同様のロジックを使用してqgインターフェースを追跡できるはずです(おそらくデフォルトのnetnsのブリッジに表示されます)が、その場合、必要なqrouter -device_id netnsを提供するポートを所有するdevice_idです。

于 2016-04-15T13:36:13.367 に答える
0

このスクリプトを使用できます。これを get_dhcp_namespace.sh として保存します:-

ubuntu@ubuntu$ cat get_dhcp_namespace.sh

#!/bin/bash

interface=$1
id=${interface:3}

port_id=$(neutron port-list | grep $id | awk -F'|' '{print $2}' | tr -d ' ')
net_id=$(neutron port-show $port_id | grep network_id | awk -F'|' '{print $3}' | tr -d ' ')
echo "DHCP namespace is: qdhcp-$net_id"

引数として提供されたタップ インターフェイスでこれを実行します。keystonerc/openstackrc/credentials ファイルを入手することを忘れないでください。

ubuntu@ubuntu$ ./get_dhcp_namespace.sh tapda4018ab-b7
qdhcp-bd39f45d-b45c-4e08-ab74-85c0b1180aea
于 2016-04-18T04:36:28.350 に答える