ネットワーク分離のためにネットワーク名前空間を使用して、VRF 動作 (仮想ルーティングと転送) を実現しようとしています。基本的に、デフォルトの名前空間の TCP ポートでサーバー アプリケーション (C/C++) を実行しています。私がやりたいのは、ネットワーク名前空間を使用して、VLAN を使用して分離された VRF を作成し、デフォルトの名前空間で実行されているそのアプリケーションが各名前空間にスレッドを生成して、名前空間ごとに同じポートでリッスンできるようにすることです。
私はネットワーク側を理解しましたが、スレッドを生成する方法がわかりません (可能であれば、clone() の代わりに pthread を使用することをお勧めします)、それらの名前空間の 1 つで setns() を呼び出し、同じ名前空間にバインドします。名前空間内のポート。名前空間とブリッジを作成するために私が行っていることは次のとおりです (簡単にするために、ここでは名前空間を 1 つに制限しています)。
# ip netns add ns_vlan100
# ip link add link eno1 eno1.100 type vlan id 100
# ip link add veth0 type veth peer name veth_vlan100
# ip link set veth0 netns ns_vlan100
# ip netns exec ns_vlan100 ip link set dev veth0 up
# ip link set dev veth_vlan100 up
# brctl addbr bridge_vlan100
# brctl addif bridge_vlan100 eno1.100
# brctl addif bridge_vlan100 veth_vlan100
# ip link set dev bridge_vlan100 up
# ip link set dev eno1.100 up
# ip netns exec ns_vlan100 ifconfig veth0 10.10.10.1 netmask 255.255.255.0 up
# ip netns exec ns_vlan100 ip route add default via 10.10.10.1
これにより、ピア マシン (コンテナーなし) に VLAN を作成し、問題なく 10.10.10.1 に ping を実行できます。だから私はリンクが良いことを知っています。私がやりたいことは、既存のアプリケーションが C または C++ でスレッドを生成できるようにし (pthreads が強く推奨されます)、そのスレッドが setns() を呼び出して名前空間 ns_vlan100 に入れることで、次にバインドできるようにすることです。その名前空間のすぐ内側にある、アプリケーションの同じポート。
これを行う方法がわかりません。どんな助けでも大歓迎です。