3

我想做的是通过裸机PC中的Open vSwitch向服务器发送数据包,而不是在VM上。

为此,我正在考虑以下结构。

服务器电脑
 -----------------------------------------
| ------ |
| |服务器| |
| ------ |
| |veth2 (192.168.0.152)|
| | |
| |veth1 |
| ------------ |
| | OVS (br0) | |
| ------------ |
| |eth0 (192.168.0.157) |
 --------|----------
        |
 --------|--------
| 客户端电脑 |
 ----------------

用于制作上述环境


,我做了下面的命令。

  1. 创建ovs桥
ovs-vsctl add-br br0
  1. 将 eth0 作为 ovs 端口
ovs-vsctl 添加端口 br0 eth0
  1. 创建 veth 链接
ip link add veth1 type veth peer name veth2
ifconfig veth1 向上
ifconfig veth2 向上
  1. 最后,我静态设置客户端 ARP 表,因为 ovs 端口(eth0)无法发送 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 添加端口 br0 eth0
  1. 创建 veth 链接
ip link add veth1 type veth peer name veth2
  1. 创建网络命名空间
ip netns 添加 ns1
ip 链接集 veth2 ns1
  1. 将ns1中veth2的ip和mac设置为eth0的ip和mac

这样做之后,我可以得到以下结构

服务器电脑
 -------------------------------------------
| ------------------------------------ |
| | ns1 | |
| | ------ | |
| | |服务器| | |
| | ------ | |
| | veth2|(192.168.0.157) | |
| ------------------------------------ |
| | |
| | |
| |veth1 |
| ------------ |
| | OVS (br0) | |
| ------------ |
| eth0|(192.168.0.157) |
 -----------|--------
            |
      ------|--------
     | 客户端电脑 |
      ---------------
于 2015-04-27T02:14:36.867 回答