我正在使用 Open vSwitch 在 virtualBox 客户机之间创建一个交换网络,并且我希望主机操作系统(Ubuntu 12.04)加入该网络并将其配置为该虚拟网络的网关:
首先,我创建了一个 vswitch 并向 tap 设备添加了端口(虚拟机将它们用作桥接接口):
ovs-vsctl add-br sw0
ovs-vsctl add-port sw0 tap0
之后,我静态设置了 Lubuntu 12.04 虚拟机的 IP:
ifconfig eth0 192.168.1.3/24 up
route add -net 0.0.0.0/0 gw 192.168.1.1
在主机操作系统端,我也设置了IP地址:
ifconfig sw0 192.168.1.1/24 up
此时,我可以从 Lubunut ping 到 Ubunutu。我现在想在主机上使用 IP 伪装将流量从网络 192.168.1.0/24 转发到我的物理接口(连接到 Internet):
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j MASQUERADE
因此,从 Lubuntu(虚拟机),我可以 ping 通 Ubuntu eth1 接口,但无法访问真实网络(例如:真实 LAN 上的网关),我已尝试过:
nslookup google.com
dig @8.8.8.8 yahoo.com
dig @192.168.30.1 google.com
网络拓扑结构
Internet (real gw) ------ Host OS -------- vswitch -------- VBox Guest 1
192.168.30.1 ip masquerade 192.168.1.0/24
|
------------ VBox Guest 2
答案1
答案其实不是我的,但是...尝试以下在 VirtualBox 上打开 vSwitch
一些 Fedora 人员还提供了有关类似主题的简短文本文件:libvirt 和 OpenVSwitch 以文本文件的形式...但无法找到它。
根据评论,这里是简短摘要:
(1)创建vnet0接口和br0桥:
ovs-vsctl add-br br0
ip tuntap add mode tap vnet0
ip link set vnet0 up
ovs-vsctl add-port br0 vnet0
ip link # (View the created interface)
(2)启动使用 vnet0 接口(作为桥接适配器)的虚拟机
(3)将网桥br0连接到真实网络:
ovs-vsctl add-br br0
ovs-vsctl add-port br0 eth0
ovs-vsctl add-port br0 vnet0
ifconfig eth0 0 && ifconfig br0 192.168.1.(X) netmask 255.255.255.0
route add default gw 192.168.1.1 br0
route del default gw 192.168.1.1 eth0
答案2
通过取消注释以下行来启用重启时转发/etc/sysctl.conf:
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1