Helo 大家,我偶尔是 Linux 用户,但我有一个项目要做,我需要一些帮助来桥接:)
我尝试过谷歌,但没有解决问题。
我的任务是创建网络命名空间,以便它可以用于从中执行其他一些任务。
Debian 8.2 用于 Windows 7 上的 VMWare 虚拟机。我也在树莓派 2 上尝试过同样的事情,但出现了同样的问题。
首先,我按照教程 https://lwn.net/Articles/580893/创建了一对虚拟以太网接口。所以现在我在全局命名空间中有 veth0,IP 地址为 10.1.1.2/24,在 netns1 命名空间中有 veth1,IP 地址为 10.1.1.1/24。
接下来,我按照教程 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地址显示
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
$ 路线
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 显示
bridge name bridge id STP enabled interfaces
br0 8000.000c2945b61d no eth0
veth0
提前感谢您的帮助:)
我已经找到了解决方案。
基本上,缺少 ip 转发,还有 2 个步骤(我以前尝试过它们,但由于 ip forward 未启用,它不起作用)。
以下是未来读者的步骤(在建立桥接以在全局命名空间中工作之后):
- 将 IP 地址分配给全局命名空间 (10.1.1.2) 中的 veth0,因为 ip地址在创建网桥之前被删除(在网桥教程中他们说:"IP地址需要在网桥之后设置配置。
- 将 netns1 命名空间中的默认网关分配为全局命名空间中的 veth0 "ip netns exec netns1 route add default gw 10.1.1.2"
- 启用 ip 转发"echo 1>/proc/sys/net/ipv4/ip_forward"