vvi*_*ilp 6 linux networking namespace
我想测试 linux 网络命名空间。
当前的问题是我无法在命名空间中连接互联网
这是我的命令:
1 创建网络命名空间netns1,创建一对veths(A和B)将B设置为命名空间
ip netns add netns1
ip link add A type veth peer name B
ip link set B netns netns1
Run Code Online (Sandbox Code Playgroud)
2 创建一个桥来连接 veth A
brctl addbr bridge0
ip addr add 172.17.42.1/16 dev bridge0
ip link set dev bridge0 up
brctl addif bridge0 A
ip link set A up
Run Code Online (Sandbox Code Playgroud)
3 在命名空间中,设置网络
ip netns exec netns1 ip link set dev B name eth0
ip netns exec netns1 ip link set eth0 up
ip netns exec netns1 ip addr add 172.17.42.99/16 dev eth0
ip netns exec netns1 ip route add default via 172.17.42.1
Run Code Online (Sandbox Code Playgroud)
当我 ping 谷歌时,我得到了这个:
ping: unknown host www.google.com
Run Code Online (Sandbox Code Playgroud)
如何在此命名空间中连接到 Internet?
以下是其他一些细节:




谢谢
更新 1
我也尝试设置 NAT:
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -d 0.0.0.0/0 -j 伪装
但还是未知主机
将网络命名空间视为另一台计算机。将 veth 对视为两个以太网卡,它们之间有一根交叉电缆。
将网络命名空间连接到 Internet 的主要方式有 3 种:NAT、传统 IP 路由、以太网桥接。
NAT 通常是最容易设置的,因为它适用于任何类型的上游互联网连接,并且不需要上游网络的配合。
为了使 NAT 发挥作用,需要做好几件事。
您还需要确保适当的 /etc/resolv.conf 可用于辅助网络命名空间中的程序。请记住,即使您在辅助网络命名空间中启动本地环回接口(您应该这样做),它仍然是每个网络命名空间的本地接口。
最初设置网络时,最好通过 IP 地址进行 ping/traceroute,以将名称解析问题与一般连接问题分开。
我假设您会ping: unknown host www.google.com因为以下提到的网络连接问题而导致名称解析失败。但是,您可能需要通过 ping IP 地址来仔细检查这不仅仅是 DNS 问题。
从您提供的信息来看,您似乎尚未向网桥添加物理接口。如果网桥上没有物理接口,该网桥上的流量就无法到达网络的其余部分。
将物理接口添加到网桥的另一种方法是打开 IP 转发并使用 .net 设置 NAT 规则iptables。