使用 Linux 网络命名空间的互联网连接

使用 Linux 网络命名空间的互联网连接

我在 Ubuntu 17.1 发行版上尝试使用 Linux 命名空间。最终目标是强制应用程序通过 3G 调制解调器而不是 Intranet 有线连接使用特定的网络接口。我的电脑有 3 个网络接口。

enp0s25:
有线连接到没有互联网连接的Inet 10.18.0.101内联网路由器

wlp3s0:
wireless,用于远程管理,在生产环境inet 10.11.1.116中不可用

enx8cae4cff1c86:有线,模拟4G USB移动调制解调器最终将用于生产环境
inet 10.11.1.142

wlp3s0 和 enx8cae4cff1c86 连接到同一路由器。我使用以下代码创建了一个名为的名称空间移动

ip netns add mobilens
ip link set dev enx8cae4cff1c86 netns mobilens
ip netns exec mobilens ifconfig enx8cae4cff1c86 10.1.1.10/24 up
ip netns exec mobilens ifconfig lo 127.0.0.1/8 up
ip netns exec mobilens route add default gw 10.1.1.1
ip netns exec mobilens dhcpcd enx8cae4cff1c86

我还创建了一个 /etc/netns/mobilens/resolv.conf 文件,其中包含以下条目

nameserver 10.11.1.1
nameserver 8.8.8.8
search google.com

在名称空间中运行 ifconfig

ip netns exec mobilens ifconfig

返回
inet 10.1.1.10 网络掩码 255.255.255.0
如果我查询命名空间中使用的 DNS 服务器,如下所示

ip netns exec mobilens nmcli dev show | grep DNS

它返回

IP4.DNS[1]: 10.11.1.1

我尝试使用此命名空间 ping google.com,它可以解析但失败。

ip netns exec mobilens ping www.google.com

PING www.google.com (172.217.7.4) 56(84) 字节数据。
从 10.1.1.10 (10.1.1.10) icmp_seq=1 目标主机无法到达
从 10.1.1.10 (10.1.1.10) icmp_seq=3 目标主机无法到达

我还需要做什么才能通过这个命名空间访问互联网?

编辑1:在命名空间中使用xterm,确实使测试变得更容易。
我也开始使用

dhclient -d enx8cae4cff1c86

而不是命名空间中的 DHSCP 服务器。
然而问题仍然存在。我认为这在某种程度上是由于路由造成的。以下是来自命名空间之外的接口的路由命令的结果

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         router.asus.com 0.0.0.0         UG    303    0        0 wlp3s0
10.11.1.0       0.0.0.0         255.255.255.0   U     303    0        0 wlp3s0
10.18.0.0       0.0.0.0         255.255.255.0   U     0      0        0 enp0s25
10.18.0.0       0.0.0.0         255.255.255.0   U     100    0        0 enp0s25

这个来自命名空间

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.1.1.1       0.0.0.0         UG    0      0        0 enx8cae4cff1c86
10.11.1.0       0.0.0.0         255.255.255.0   U     0      0        0 enx8cae4cff1c86
10.1.1.0       0.0.0.0         255.255.255.0   U     0      0        0 enx8cae4cff1c86

关于命名空间中路由的可能修改有什么建议吗?

答案1

[已解决]
解决办法是修改默认网关。我将以下行添加到命名空间配置文件中。

ip netns exec mobilens ip route change default via 10.11.1.1 dev enx8cae4cff1c86

此步骤足以让我 ping www.google.com
但是,当我禁用管理 wifi 连接时,ping 会出现与名称解析相关的错误。我通过在 \etc\netns\mobilens\resolv.conf 中创建一个文件解决了这个问题
文件包含:

nameserver 10.11.1.1
nameserver 8.8.8.8
search google.com

现在我可以访问任何给定域的互联网。

答案2

部分答案:

首先,在网络命名空间中启动 xterm,以便您可以更轻松地进行测试。我更喜欢我的颜色,并且使用我的用户 ID 而不是 root:

ip netns exec mobilens su -c "xterm -bg yellow &" my_userid

其次,您正在运行 DHCP服务器在该命名空间中,而不是客户端,您是运行网络管理器。你想要的是 DHCP客户在该名称空间或静态配置中。我不知道网络管理器在面对多个命名空间时会做什么(我在 NM 方面有过不好的经验,我永远无法让它做我想做的事)。

所以:任何一个看看 NM 对你的命名空间中的接口做了什么(如果 NM 妨碍了,就停止它),或者使用正确的网关、路由和名称服务器静态配置它们,或者例如,使用 DHCP 客户端dhclient -d enx8cae4cff1c86并观察输出以查看它是否正确分配了所有内容。

有疑问的话,tcpdump在接口上运行一下,看看数据包是否正常出去。

相关内容