ip add 10.0.0.1/24 gateway 10.0.0.254
異なるVLAN(10と20)にある2つの名前空間(1つはwith、もう1つはwith)の間に接続を確立する必要があります。ip add 20.0.0.1/24 gateway 20.0.0.254
これらはOVSブリッジに接続されており、3番目の名前空間はルーターとして機能する必要があります。これは可能ですか?このインターフェイスは、2 つのインターフェイスを介してブリッジに接続されます。インターフェイス gw1 10.0.0.254 とは異なるインターフェイス gw2 20.0.0.254 を割り当てました。ブリッジと名前空間1とgw1の間のインターフェイスにVLANタグを割り当てなかったときにICMP応答を受け取りましたが、スイッチポートにVLANタグを割り当てたときに何も起こりませんでした。ただ「ターゲットホストに接続できません」 Wiresharkを使用すると、ARPは応答を得られないようです。私は何を見逃していますか?
名前空間を作成します。
sudo ip netns add namespace1
sudo ip netns add namespace2
sudo ip netns add router
リンクを作成する:
sudo ip link add vif1 type veth peer name ethns1
sudo ip link add vif2 type veth peer name ethns2
sudo ip link add vif11 type veth peer name gw1
sudo ip link add vif22 type veth peer name gw2
OVSブリッジを作成し、ポートを接続します。
sudo ovs-vsctl add-br switch
sudo ovs-vsctl add-port switch vif1
sudo ovs-vsctl add-port switch vif11
sudo ovs-vsctl add-port switch vif2
sudo ovs-vsctl add-port switch vif22
名前空間に veth を追加します。
sudo ip link set dev ethns1 netns namespace1
sudo ip link set dev ethns2 netns namespace2
sudo ip link set dev gw1 netns router
sudo ip link set dev gw2 netns router
名前空間のアドレスを設定します。
sudo ip netns exec namespace1 ifconfig ethns1 10.0.0.1 netmask 255.255.255.0 up
sudo ip netns exec namespace1 route add default gw 10.0.0.254
sudo ip netns exec namespace2 ifconfig ethns2 20.0.0.1 netmask 255.255.255.0 up
sudo ip netns exec namespace2 route add default gw 20.0.0.254
sudo ip netns exec router ifconfig gw1 10.0.0.254 netmask 255.255.255.0 up
sudo ip netns exec router ifconfig gw2 20.0.0.254 netmask 255.255.255.0 up
インターフェース設定:
sudo ip link set dev vif1 up
sudo ip link set dev vif2 up
sudo ip link set dev vif11 up
sudo ip link set dev vif22 up
名前空間3(ルーター)でIP転送を有効にします。
sudo ip netns exec router sysctl -w net.ipv4.ip_forward=1
まだスイッチポートにVLANタグを追加していないので、名前空間1からgw1に接続できますが、そうすると次のようになります。
sudo ovs-vsctl -- set port vif1 tag=10
sudo ovs-vsctl -- set port vif2 tag=20
これら2つについてはよくわかりません。
sudo ovs-vsctl -- set port vif22 trunk=10,20
sudo ovs-vsctl -- set port vif11 trunk=10,20
それから何も起こりませんでした:(
私はまだUbuntuを初めて使用しているので、助けを探しています。
答え1
以前は、Open vSwitchを使ったことがなかったが、今は一度試してみました。
コア情報は にありman 5 ovs-vswitchd.conf.db
、さまざまな内容がvlan_mode
説明されています。
特に、使用する権利ポート、スイッチ内のパケットには常にタグ付けされ、スイッチの外部ではタグ付けされず、タグは受信時に追加され、送信時に削除されます。説明を聞いてそんな疑いをしましたが、確かに分かっていいですね。
したがって、アクセスポートのみを使用してシナリオを実装するには、次の3つの名前空間ns0
(ルーター)を使用しました。ns1
ns2
ns0:
veth0b (peer veth0a), 10.0.10.254/24
veth0d (peer veth0c), 10.0.20.254/24
ns1:
veth1b (peer veth1a), 10.0.10.1/24
ns2:
veth2b (peer veth2a), 10.0.20.1/24
main namespace:
br0 (ovs):
veth0a (access, tag=100)
veth0c (access, tag=200)
veth1a (access, tag=100)
veth2a (access, tag=200)
各ネームスペースから始めるのは非常に便利ですxterm
(私は背景色を好む)、tcpdump
ネームスペース内でパケットフローをデバッグすることもできます。
set
名前空間を作成し、veth-pairを作成し、必要に応じて名前空間に移動し、すべてのリンクを忘れないでくださいup
。それから
存在するns0
:
sudo ip addr add 10.0.10.254/24 dev veth0b
sudo ip addr add 10.0.20.254/24 dev veth0d
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
存在するns1
:
sudo ip addr add 10.0.10.1/24 dev veth1b
sudo ip route add default via 10.0.10.254
存在するns2
:
sudo ip addr add 10.0.20.1/24 dev veth2b
sudo ip route add default via 10.0.20.254
デフォルトの名前空間から:
sudo ovs-vsctl add-br br0
sudo ovs-vsctl add-port br0 veth0a tag=100
sudo ovs-vsctl add-port br0 veth0c tag=200
sudo ovs-vsctl add-port br0 veth1a tag=100
sudo ovs-vsctl add-port br0 veth2a tag=200
これで、各名前空間でpingが正しく機能し、直接パートナーを最初にテストしてから、ルーティングパートナーをテストする必要があります。
2つのアクセスポートveth-pairを単一に置き換えることもできます。クラスタ化そうですね。trunk=100,200
デフォルトでは、各非アクセスポートはすべてのVLANのトランクポートであるため、追加する必要はありません。
デフォルトの名前空間から:
sudo ovs-vsctl del-port br0 veth0a
sudo ovs-vsctl del-port br0 veth0c
sudo ip link del veth0a
sudo ip link del veth0c
sudo ip link add veth0a type veth peer name veth0b netns ns0
sudo ip link set veth0a up
sudo ovs-vsctl add-port br0 veth0a
存在するns0
:
sudo ip link add link veth0b name veth0b.100 type vlan id 100
sudo ip link add link veth0b name veth0b.200 type vlan id 200
sudo ip link set veth0b up
sudo ip addr add 10.0.10.254/24 dev veth0b.100
sudo ip addr add 10.0.20.254/24 dev veth0b.200
次に、上記のようにテストしてみてください。