On 11/25/2015 07:18 AM, Sergio Belkin wrote:
Are you talking bearing in mind VirtualBox?
Actually, no. I'd either missed that detail or forgotten it by that
time in the conversation. This might be the wrong list for VirtualBox
questions, since it's not distributed with CentOS. I've worked with
VirtualBox only a little bit, and I'm not sure what you're trying to do
is possible. I think it is, but I can only really describe how to
accomplish what you're trying to do with respect to libvirt/KVM (the
virtualization platform that's distributed with CentOS).
Anyway, the first thing you'd want to do is create a bridge interface
with no slaves, and then create two VMs. They should be attached to
that bridge device. (In virtualbox you might be able to do that with
"bridged networking" to br0, or you might be able to skip the virt host
bridge and use "internal networking". Try the former first.) The two
VMs will not be attached to the real network, but should be able to
reach each other. Now your topology looks like this:
---| Network |---| (eth0)-VM Host-(br0) |--+| (eth0)-VM1 |
\| (eth0)-VM2 |
...your virtualization host is connected to the real network on eth0.
The two VMs are attached to its br0 interface. They each have one
"ethernet" interface and can communicate with each other.
Once you've set that up and verified that it works, set up a new bridge
interface, br1. Move the IP configuration from eth0 to br1, and make
eth0 a slave of br1. Make sure the virtualization host has network
connectivity. Your network topology looks exactly like it did before,
except that the virt host uses br1 (with eth0 as a slave) to connect to
the real network.
---| Network |---| (br1)-VM Host-(br0) |--+| (eth0)-VM1 |
\| (eth0)-VM2 |
Next, you can add a second interface to VM1. This one will be connected
to br1. (again, in virtualbox, you might be able to do this with
bridged networking.) Give VM1's new interface (it's eth1) an IP
configuration appropriate for your real network, and verify that it has
full internet connectivity. Now your network looks like this:
/------------------| (eth1)\
---| Network |---| (br1)-VM Host-(br0) |--+| (eth0)-VM1 |
\| (eth0)-VM2 |
So, now VM2 can reach VM1, but not the real network, and VM1 can reach
the real network.
Finally, you'll create a bridge interface in VM1, and make both of its
"ethernet" interfaces slaves. Move its IP configuration from eth1 to
its new br0, and drop the IP configuration from eth0. This will give
VM2 connectivity to the real network, so update its IP configuration to
be compatible with the real network. Now your network looks like this:
/------------------| (eth1)\
---| Network |---| (br1)-VM Host-(br0) |--+| (eth0)-(br0)-VM1 |
\| (eth0)-VM2 |
When VM2 transmits a packet, it will be sent out VM2-eth0, across VM
Host br0 to VM1-eth0, across VM1-br0 to VM Host-br1, to the real network.
And most importantly, no bridge connects two interfaces to the same
broadcast domain. VM Host's br0 creates a collision domain spanning the
two VMs. VM Host's br1 creates a collision domain spanning the physical
network and VM1's eth1 interface. And VM1's br0 bridges those two
collision domains. No loops.
I don't know what performance will look like under VirtualBox, since I
don't use it for this sort of thing. However, under KVM/libvirt,
performance should be fairly good.
_______________________________________________
CentOS mailing list
CentOS@centos.org
https://lists.centos.org/mailman/listinfo/centos