Chr*_*ong 103 virtualbox networking virtualization
在用VirtualBox设置虚拟机时,我经常想要以下特性
VirtualBox 网络连接方法都不能单独满足这些要求。
NAT
如果要从主机连接到 VM,则需要端口转发。
Host-only
除非主机是路由器,否则虚拟机无法访问互联网。
Bridged
将 VM 暴露给网络;不便携。
Chr*_*ong 116
我可以通过在 vm 上设置两个适配器来获得我想要的设置。
VirtualBox 4.2.12
Ubuntu 12.04 来宾
在 VirtualBox > Preferences > Network 中,设置一个仅限主机的网络。
我的是vboxnet0,手动配置:
ip 192.168.56.1
netmask 255.255.255.0
no dhcp
然后,在虚拟机的网络设置中,设置两个适配器:
仅适配器 1主机,vboxnet0
适配器 2
NAT
启动虚拟机并通过 VirtualBox 提供的控制台登录。
运行它以查看您的适配器:
ls /sys/class/net
Run Code Online (Sandbox Code Playgroud)
在我的例子中,适配器被命名为 eth1 和 eth2(还有,环回接口)。
然后,编辑您的网络配置。
sudoedit /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# Host-only interface
auto eth1
iface eth1 inet static
address 192.168.56.20
netmask 255.255.255.0
network 192.168.56.0
broadcast 192.168.56.255
# NAT interface
auto eth2
iface eth2 inet dhcp
Run Code Online (Sandbox Code Playgroud)
请注意,eth1
没有指定默认网关。eth2
将从 dhcp 获得默认网关。
见这个答案来自@ Hugo14453一个更新的版本与Ubuntu 17.10和更新工作。
小智 17
我可以用 Christian Long 的混合解决方案来解决我的问题。我添加了 2 个适配器:
适配器 1 - NAT
适配器 2 - 仅主机,vboxnet0
唯一的区别在于 VM 的接口文件:
sudoedit /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# NAT
auto eth0
iface eth0 inet dhcp
# Host only
auto eth1
iface eth1 inet dhcp
Run Code Online (Sandbox Code Playgroud)
在 VirtualBox 网络配置中,我选中了 DHCP。
虚拟机重启后一切正常。
Hug*_*ugo 17
Ubuntu 17.10.1 中的网络配置已更改。您现在使用 netplan 配置。
我在这里遵循了本指南
作为基督教答案的迁移,请执行以下操作:
在 /etc/netplan 中创建一个新的配置文件来保存您的仅主机适配器配置。
例如 sudo nano /etc/netplan/02-netcfg.yaml
输入以下内容以配置静态 IP 192.168.56.12,其中enp0s3
是仅主机适配器的名称。
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
addresses:
- 192.168.56.12/24
dhcp4: no
Run Code Online (Sandbox Code Playgroud)
然后运行以下两条命令:
sudo netplan generate
sudo netplan apply
Run Code Online (Sandbox Code Playgroud)
NAT 应该可以在没有配置的情况下工作,运行ifconfig
以查看结果:
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.12 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::a00:27ff:fe06:6cdd prefixlen 64 scopeid 0x20<link>
ether 08:00:27:06:6c:dd txqueuelen 1000 (Ethernet)
RX packets 252 bytes 23076 (23.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 208 bytes 30015 (30.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.3.15 netmask 255.255.255.0 broadcast 10.0.3.255
inet6 fe80::a00:27ff:fe4d:a6b8 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:4d:a6:b8 txqueuelen 1000 (Ethernet)
RX packets 95 bytes 94894 (94.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 85 bytes 7436 (7.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Run Code Online (Sandbox Code Playgroud)
小智 14
还有另一种简单的方法,我们不需要创建新的 NAT 适配器
在宿主机上,请添加以下iptables规则。这将通过主机将数据包转发到 Internet:
sudo iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)您还需要通过发出以下命令在主机上启用 IP 转发:
sudo sysctl -w net.ipv4.ip_forward=1
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
249997 次 |
最近记录: |