网络命名空间和桥接

时间:2016-01-26 20:19:32

标签: linux networking ethernet bridge linux-namespaces

Helo大家,我偶尔会有linux用户,但我有一个项目要做,我需要一些桥接帮助:) 我试过谷歌,但没有解决问题。

我的任务是创建网络命名空间,因此可以用它来执行其他任务。

Debian 8.2用于Windows 7上的VMWare虚拟机。我也在Raspberry Pi 2上尝试了相同的操作,但是出现了同样的问题。

首先,我已经按照教程https://lwn.net/Articles/580893/创建了一对虚拟以太网接口。 所以现在我在全局命名空间中使用了ip地址为10.1.1.2/24的veth0,以及在netns1命名空间中使用ip地址为10.1.1.1/24的veth1。

接下来,我已经按照教程http://www.linuxfoundation.org/collaborate/workgroups/networking/bridge来桥接eth0和veth0,所以我可以从netns1名称空间访问互联网。

  • 首先,我删除了eth0和veth0的ip地址 接口,并将它们设置为DOWN状态。

  • 创建新桥(br0)并且两个接口(eth0和veth0)都是 添加到它。

  • 然后两个接口都设置为UP状态,我运行" dhclient br0"至 将IP地址分配给br0。

现在可以从全局命名空间运行" ping google.com",但是从netns1命名空间我得到错误"网络无法访问"。 (我想路线有问题,我尝试过向netns1命名空间添加一些默认路由,但没有运气。我的网络知识很谦虚,所以我请求帮助。)

$ ip addr show

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 master br0 state UP group default qlen 1000
    link/ether 00:0c:29:45:b6:1d brd ff:ff:ff:ff:ff:ff
4: veth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 86:e4:6c:02:b6:79 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::84e4:6cff:fe02:b679/64 scope link 
       valid_lft forever preferred_lft forever
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 00:0c:29:45:b6:1d brd ff:ff:ff:ff:ff:ff
    inet 192.168.178.135/24 brd 192.168.178.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe45:b61d/64 scope link 
       valid_lft forever preferred_lft forever

$ route

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.178.2   0.0.0.0         UG    0      0        0 br0
default         192.168.178.2   0.0.0.0         UG    1024   0        0 br0
192.168.178.0   *               255.255.255.0   U     0      0        0 br0

$ ip netns exec netns1 ip addr show

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
3: veth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether ee:b8:f3:47:f7:0c brd ff:ff:ff:ff:ff:ff
    inet 10.1.1.1/24 brd 10.1.1.255 scope global veth1
       valid_lft forever preferred_lft forever
    inet6 fe80::ecb8:f3ff:fe47:f70c/64 scope link 
       valid_lft forever preferred_lft forever

$ ip netns exec netns1 route

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.1.1.0        *               255.255.255.0   U     0      0        0 veth1

$ brctl show

bridge name    bridge id        STP enabled    interfaces
br0        8000.000c2945b61d    no        eth0
                            veth0

先谢谢你的帮助:)

1 个答案:

答案 0 :(得分:2)

我找到了解决方案。

基本上,缺少ip forward,还有2个步骤(之前我已经尝试过了,但由于ip forward未启用,因此无法正常工作)。

这里为未来的读者提供了一些步骤(在使桥接器在全局命名空间中工作之后):

  • 将ip地址分配给全局命名空间(10.1.1.2)中的veth0,因为ip 在创建桥之前删除了地址(在桥梁教程中) 他们说:&#34;需要在桥接之后设置IP地址 被配置&#34)
  • 将netns1名称空间中的默认网关分配为全局名称空间中的veth0&#34; ip netns exec netns1 route add default gw 1​​0.1.1.2&#34;
  • 启用ip转发&#34; echo 1&gt;的/ proc / SYS /净/的IPv4 / IP_FORWARD&#34;