3

私がやりたいことは、VM ではなく、ベアメタル PC の Open vSwitch を介してサーバーにパケットを送信することです。

そのために、次のような構造を考えています。

サーバーPC
 ------------------------------
| | ------ |
| | |サーバー| | |
| | ------ |
| | |veth2 (192.168.0.152)|
| | | | | |
| | |veth1 |
| | ----------- |
| | | | OVS (br0) | | |
| | ----------- |
| | |eth0 (192.168.0.157) |
 -------|---------------------
        | |
 --------|--------
| | クライアント PC |
 ----------------

上記の環境作りに


、以下のコマンドを実行しました。

  1. ovs ブリッジを作成する
ovs-vsctl add-br br0
  1. eth0 を ovs ポートにする
ovs-vsctl add-port br0 eth0
  1. veth リンクを作成する
ip link add veth1 タイプ veth ピア名 veth2
ifconfig veth1 アップ
ifconfig veth2 アップ
  1. 最後に、ovs ポート (eth0) が ARP 応答を送信できないため、クライアント ARP テーブルを静的に設定します。

その後、クライアントとサーバー間のTCP接続を試みました。

クライアントの SYN パケットが veth2 に送信されていることを確認しました。ただし、サーバーはそのパケットを受信できません。

何が悪いのか、どうすれば上記の環境を作ることができるのか推測できません。

4

1 に答える 1

6

解決策を見つけました。

ネットワーク名前空間を利用することで、論理的なネットワークスタックを作ることができます。

http://man7.org/linux/man-pages/man8/ip-netns.8.html http://blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/

  1. ovs ブリッジを作成する
ovs-vsctl add-br br0
  1. eth0 を ovs ポートにする
ovs-vsctl add-port br0 eth0
  1. veth リンクを作成する
ip link add veth1 タイプ veth ピア名 veth2
  1. ネットワーク名前空間を作成する
ip netns add ns1
IP リンク セット veth2 ns1
  1. ns1 の veth2 の ip と mac を eth0 の IP と mac に設定します。

それをした後、私は以下の構造を得ることができます

サーバーPC
 -------------------------------
| | ------------------------------------ |
| | | | ns1 | | |
| | | | ------ | | |
| | | | |サーバー| | | | |
| | | | ------ | | |
| | | | veth2|(192.168.0.157) | | |
| | ------------------------------------ |
| | | | | |
| | | | | |
| | |veth1 |
| | ----------- |
| | | | OVS (br0) | | |
| | ----------- |
| | eth0|(192.168.0.157) |
 -----------|-------------------
            | |
      ------|--------
     | | クライアント PC |
      ---------------
于 2015-04-27T02:14:36.867 に答える