我想做的是通过裸机上的open vswitch向服务器发送数据包,而不是在虚拟机上。
为此,我想遵循结构。
服务器PC
———————————————————————————---
|———--|
||服务器||
|———--|
|| veth2(192.168.0.152)|
|||
||第1版|
|—————---|
||超速档(BR0)||
|—————---|
|| eth0(192.168.0.157)|
—————————————————————————————-
γ
———————————
|客户端PC|
———————————
用于制造上述环境
,我执行了以下命令。
创建ovs桥
ovs vsctl添加br br0
将eth0设为ovs端口
ovs vsctl添加端口br0 eth0
创建兽医链接
IP链接添加veth1类型veth对等名称veth2
ifconfig veth1以上
ifconfig veth2以上
最后,我静态地设置客户端arp表,因为ovs端口(eth0)不能发送arp应答。
之后,我尝试在客户机和服务器之间建立TCP连接。
我检查了客户端的syn包是否已发送到veth2。但是,服务器无法接收该数据包。
我猜不出哪里出了问题,我怎么能创造出这样的环境。
最佳答案
我找到了解决办法。
通过使用网络名称空间,我可以创建逻辑网络堆栈。
http://man7.org/linux/man-pages/man8/ip-netns.8.html
http://blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/
创建ovs桥
ovs vsctl添加br br0
将eth0设为ovs端口
ovs vsctl添加端口br0 eth0
创建兽医链接
IP链接添加veth1类型veth对等名称veth2
创建网络命名空间
IP网络添加NS1
IP链路集VETH2 NS1
将ns1中veth2的ip和mac设置为eth0的ip和mac
这样做之后,我可以得到下面的结构
服务器PC
———————————————————————————————-
|—————————————————————-|
|| NS1号||
||———--||
|||服务器|||
||———--||
||维特2(192.168.0.157)||
|—————————————————————-|
|||
|||
||第1版|
|—————---|
||超速档(BR0)||
|—————---|
| eth0(192.168.0.157)|
———————————————————————————---
γ
—————————
|客户端PC|
———————————————————---