vagrant虚拟化之多网卡网络配置

上一篇博文Vagrant虚拟化之网络配置主要是单网卡环境的配置,当我们的电脑开启docker等服务时,就出现了多个网卡的情况下,我们应该怎么配置呢?

基本配置

1.下面先来看下我本机的网卡情况:

root@yanggd-OptiPlex-380:~# ifconfig
docker0   Link encap:以太网  硬件地址 02:42:08:e0:d0:6a  
          inet 地址:172.17.0.1  广播:0.0.0.0  掩码:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  跃点数:1
          接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:0 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:0 
          接收字节:0 (0.0 B)  发送字节:0 (0.0 B)

enp2s0    Link encap:以太网  硬件地址 bc:30:5b:ba:7f:7d  
          inet 地址:10.11.2.102  广播:10.11.255.255  掩码:255.255.0.0
          inet6 地址: fe80::9cc6:6dc7:1de2:237e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:3859380 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:1276942 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000 
          接收字节:2343679715 (2.3 GB)  发送字节:370668100 (370.6 MB)
          中断:16 
.........

vboxnet0  Link encap:以太网  硬件地址 0a:00:27:00:00:00  
          inet 地址:10.11.2.1  广播:10.11.2.255  掩码:255.255.255.0
          inet6 地址: fe80::800:27ff:fe00:0/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  跃点数:1
          接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:2066 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000 
          接收字节:0 (0.0 B)  发送字节:243885 (243.8 KB)

其中:
docker0是我本机docker服务启动后的网卡
enp2s0是我本机自带的网卡
vboxnet0是vagrant启动public_network的交接网卡

2.当我们配置好vagrantfile启动后,就会提示我们输入需要桥接的网卡,如下:

vim Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.define :admin do |admin|
        admin.vm.hostname = "ubuntu-admin"
        admin.vm.box = "yanggd/ubuntu"
        admin.vm.network "public_network", auto_config: false
        admin.vm.provision "shell",
                run: "always",
                inline: "ifconfig eth1 10.11.5.211 netmask 255.255.0.0 up"
        admin.vm.provision "shell",
                run: "always",
                inline: "route add default gw 10.11.15.4"
        admin.vm.provision "shell",
                run: "always",
                inline: "eval `route -n | awk '{ if ($8 == \"eth0\" && $2 != \"0.0.0.0\") print \"route del default gw \" $2; }'`"
  end
end

当我们vagrant reload时,会提示我们输入需要桥接的网卡:

==> admin: Attempting graceful shutdown of VM...
    admin: Guest communication could not be established! This is usually because
    admin: SSH is not running, the authentication information was changed,
    admin: or some other networking issue. Vagrant will force halt, if
    admin: capable.
==> admin: Forcing shutdown of VM...
==> admin: Clearing any previously set forwarded ports...
==> admin: Clearing any previously set network interfaces...
==> admin: Available bridged network interfaces:
1) enp2s0
2) docker0
==> admin: When choosing an interface, it is usually the one that is
==> admin: being used to connect to the internet.
    admin: Which interface should the network bridge to? 

由于enp2s0是我们本机自带的网卡,因此需要桥接到此网卡上,直接输入”1”即可:

    admin: Which interface should the network bridge to? 1
==> admin: Preparing network interfaces based on configuration...
    admin: Adapter 1: nat
    admin: Adapter 2: hostonly
    admin: Adapter 3: bridged
==> admin: Forwarding ports...
    admin: 22 (guest) => 2222 (host) (adapter 1)
==> admin: Booting VM...
==> admin: Waiting for machine to boot. This may take a few minutes...
    admin: SSH address: 127.0.0.1:2222
    admin: SSH username: vagrant
    admin: SSH auth method: private key
    ......

如果每次输入桥接网卡,很麻烦,我们可以在vagrantfile里通过”bridge:”直接指定,如

admin.vm.network "public_network", bridge: "enp2s0", auto_config: false

这样在vagrant reload后会自动桥接到enp2s0网卡上。

出现问题:

public_network无法ping通网络中其他主机

root@yanggd-OptiPlex-380:/# vagrant ssh
vagrant@ubuntu-admin:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:32:20:37 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe32:2037/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:c8:33:f3 brd ff:ff:ff:ff:ff:ff
    inet 10.11.5.211/16 brd 10.11.255.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fec8:33f3/64 scope link 
       valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:47:14:c9 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::a00:27ff:fe47:14c9/64 scope link 
       valid_lft forever preferred_lft forever

此时发现我们的vagrant vm有3个网卡,在vm里能ping我们的主机,但是ping不同网络中其他服务器,我们设置成public_network了啊,为什么?
下面我们开下此时vagrant up启动信息:

==> admin: Attempting graceful shutdown of VM...
    admin: Guest communication could not be established! This is usually because
    admin: SSH is not running, the authentication information was changed,
    admin: or some other networking issue. Vagrant will force halt, if
    admin: capable.
==> admin: Forcing shutdown of VM...
==> admin: Clearing any previously set forwarded ports...
==> admin: Clearing any previously set network interfaces...
==> admin: Available bridged network interfaces:
1) enp2s0
2) docker0
==> admin: When choosing an interface, it is usually the one that is
==> admin: being used to connect to the internet.
    admin: Which interface should the network bridge to? 1
==> admin: Preparing network interfaces based on configuration...
    admin: Adapter 1: nat
    admin: Adapter 2: hostonly
    admin: Adapter 3: bridged

当我们选定要桥接的网卡后,发现vm的3个网卡信息:

admin: Adapter 1: nat
admin: Adapter 2: hostonly
admin: Adapter 3: bridged

adapter 1为nat模式
adapter 2为hostonly模式,也就是private_networkd
adapter 3为bridage模式,也就是桥接模式
上面ifconfig信息中eth0、eth1、eth2就分别对应adapter1、adapter2、adapter3;其中我们在vagrantfile中配置ip的网卡为eth1,启动信息中adapter2显示为hostonly模式,因此我们的vm只能ping通本机,而无法ping通网络中的其他主机。
我们在vagrantfile中虽然绑定了桥接主机网卡,但是并没有说明vm中哪个网卡为public_network、哪个网卡为hostonly,因此出现了以上的问题。

解决方案:
经过测试,需要将设置ip的eth1,设置成public_network才能解决问题:

admin.vm.network "public_network", bridge: "enp2s0",adapter: 2, auto_config: false

vagrant reload后,我们可以看到启动信息:

==> admin: Attempting graceful shutdown of VM...
==> admin: Clearing any previously set forwarded ports...
==> admin: Clearing any previously set network interfaces...
==> admin: Preparing network interfaces based on configuration...
    admin: Adapter 1: nat
    admin: Adapter 2: bridged

adapter2网卡的模式变成了bridged,而不是hostonly了,此时测试vm既能ping通主机,又能ping同网络中其他机器。

注意:
在此public_network模式下,我将vm的ip地址和主机的ip地址设置成一个网段的,发现ping不通主机,改成其他网段是可以的。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值