我正在使用 Open vSwitch 在 virtualBox 来宾计算机之间创建交换网络,并且我希望主机操作系统(Ubuntu 12.04)加入该网络并将其配置为该虚拟网络的网关:
首先,我创建了一个 vswitch 并添加了端口以连接设备(虚拟机将它们用作桥接接口):
ovs-vsctl add-br sw0
ovs-vsctl add-port sw0 tap0
Run Code Online (Sandbox Code Playgroud)
之后,我静态设置了 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
Run Code Online (Sandbox Code Playgroud)
在主机 os 端,我还设置了 ip 地址:
ifconfig sw0 192.168.1.1/24 up
Run Code Online (Sandbox Code Playgroud)
此时,我可以从 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
Run Code Online (Sandbox Code Playgroud)
因此,从 Lubuntu(虚拟机),我可以 ping Ubuntu eth1 接口,但无法访问真实网络(例如:真实 LAN 上的网关),我尝试过:
nslookup google.com
dig @8.8.8.8 yahoo.com
dig @192.168.30.1 …
Run Code Online (Sandbox Code Playgroud) 我已经看到,在虚拟网络中,来宾 VM/容器可以通过使用内核桥接器(linux)或虚拟交换机与主机和互联网连接。
示例 - 桥梁
docker 使用 linux 内核桥接器将访客容器连接到主机和互联网。甚至,VMWare/VirtualBox 允许使用桥接网络将访客 VM 与主机和互联网连接起来。示例 - 虚拟交换机
VMWare ESX 使用虚拟交换机将虚拟机与主机和互联网连接起来。Microsoft Hyper-V 使用虚拟交换机将虚拟机与主机和互联网连接起来。所以,我开始想知道这两者(网桥和虚拟交换机)之间有什么区别,哪种方法比另一种更好。
(请随时编辑问题以扩展或使问题更有意义。)
过去的美好时光是怎样的network-scripts
:
我在文件中描述了桥和端口:
/etc/sysconfig/network-scripts/ifcfg-br0
/etc/sysconfig/network-scripts/ifcfg-port0
Run Code Online (Sandbox Code Playgroud)
比重新启动网络
systemctl restart network
Run Code Online (Sandbox Code Playgroud)
一切开始工作。
现在network-scripts
被标记为deprecated,有一个警告will be removed in one of the next major releases of RHEL.
,所以我必须切换到NetworkManager,对吧?
但如何使用 NetworkManager 设置 Open vSwitch?
我已经安装NetworkManager-ovs
并尝试了本指南,但描述的命令没有执行任何操作,我的意思是输出中没有出现任何内容ovs-vsctl show
nmcli networking off && nmcli networking on
或systemctl restart NetworkManager
没有任何影响
ifup br0
也不起作用:
Error: unknown connection '/etc/sysconfig/network-scripts/ifcfg-br0'.
Run Code Online (Sandbox Code Playgroud)