我想要做的是通过裸机PC中的Open vSwitch将数据包发送到服务器,而不是在VM上。
为此,我想到了以下结构。
Server PC ----------------------------- | ------ | | |SERVER| | | ------ | | |veth2 (192.168.0.152)| | | | | |veth1 | | ----------- | | | OVS (br0) | | | ----------- | | |eth0 (192.168.0.157) | -------|--------------------- | -------|-------- | Client PC | ----------------
用于制作上述环境
,我做了以下命令。
ovs-vsctl add-br br0
ovs-vsctl add-port br0 eth0
ip link add veth1 type veth peer name veth2 ifconfig veth1 up ifconfig veth2 up
之后,我尝试在客户端和服务器之间建立TCP连接。
我检查了客户端的SYN数据包是否发送到veth2。但是,服务器无法接收该数据包。
我无法猜出出现了什么问题以及我如何能够建立上述环境。
答案 0 :(得分:5)
我找到了解决方案。
通过使用网络命名空间,我可以建立逻辑网络堆栈。
http://man7.org/linux/man-pages/man8/ip-netns.8.html http://blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/
ovs-vsctl add-br br0
ovs-vsctl add-port br0 eth0
ip link add veth1 type veth peer name veth2
ip netns add ns1 ip link set veth2 ns1
完成后,我可以得到以下结构
Server PC ------------------------------- | ----------------------- | | | ns1 | | | | ------ | | | | |SERVER| | | | | ------ | | | | veth2|(192.168.0.157) | | | ----------------------- | | | | | | | | |veth1 | | ----------- | | | OVS (br0) | | | ----------- | | eth0|(192.168.0.157) | -----------|------------------- | ------|-------- | Client PC | ---------------