首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单独的网络命名空间中创建附加IP地址

在单独的网络命名空间中创建附加IP地址
EN

Unix & Linux用户
提问于 2020-12-04 14:53:57
回答 1查看 745关注 0票数 4

我正在运行Ubuntu18.04,Linux内核5.4.0。我的笔记本电脑有本地IP地址192.168.0.130:

代码语言:javascript
复制
$ sudo ip addr show dev wlp2s0
3: wlp2s0:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 7c:2a:31:09:3e:e0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.130/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp2s0
       valid_lft 2782sec preferred_lft 2782sec
    inet6 fe80::b375:a43d:9705:556a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

路由表如下所示:

代码语言:javascript
复制
$ sudo ip route
default via 192.168.0.1 dev wlp2s0 proto dhcp metric 600 
169.254.0.0/16 dev wlp2s0 scope link metric 1000 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.0.0/24 dev wlp2s0 proto kernel scope link src 192.168.0.130 metric 600 

我想使用本地网络上其他主机可见的额外IP地址(例如,192.168.0.12)。它的工作方式如下:

代码语言:javascript
复制
$ sudo ip addr add 192.168.0.95/24 dev wlp2s0
$ ssh 192.168.0.12 ping 192.168.0.95
...
64 bytes from 192.168.0.95: ...
(works)
^C
$ sudo ip addr del 192.168.0.95/24 dev wlp2s0

现在,我想将这个IP地址移动到一个名为net5的单独网络名称空间中,如下所示:

代码语言:javascript
复制
$ sudo ip netns add net5
$ sudo ip link add link wlp2s0 name net5in type macvlan
$ sudo ip link set net5in netns net5
$ sudo ip netns exec net5 ip addr add 192.168.0.95/24 brd + dev net5in
$ sudo ip netns exec net5 ip link set net5in up
$ ssh 192.168.0.12 ping 192.168.0.95
...
From 192.168.0.95: ... Destination Host Unreachable
(doesn't work)
^C
$ sudo ip netns add net5

How可以修复这个问题吗?

我正在学习这些教程:

更新

  • 我能够通过使用type ipvlan mode l2而不是上面的type macvlan来使它工作。本地ping仍然不起作用,但是--据我所知--这对macvlan和ipvlan来说是预期的。
EN

回答 1

Unix & Linux用户

发布于 2020-12-04 16:22:44

看起来macvlan在wifi上不起作用,详情见https://unix.stackexchange.com/a/555676。通过使用类型ipvlan模式的l2代替类型macvlan,可以使它同时在wifi和以太网上工作。

下面是我的完整设置,它创建了3个IP地址,每个地址位于各自的网络命名空间中:

代码语言:javascript
复制
sudo ip link del hostnet ||:
sudo ip link add hostnet link wlp2s0 type ipvlan mode l2
sudo ip addr add 192.168.0.90/32 brd + dev hostnet
sudo ip link set hostnet up  # `ip route add' below needs it.

for I in 91 92 93; do
sudo ip netns del net"$I" && sleep .5 ||:
sudo ip netns add net"$I"
sudo ip netns exec net$I ip link set lo up
sudo ip link add link wlp2s0 name net"$I"in type ipvlan mode l2
sudo ip link set net"$I"in netns net"$I"
sudo ip netns exec net"$I" ip addr add 192.168.0."$I"/24 brd + dev net"$I"in
sudo ip netns exec net"$I" ip link set net"$I"in up
sudo ip netns exec net"$I" ip route add default via 192.168.0.1
sudo ip route add 192.168.0."$I"/32 dev hostnet
done

这使得ping 192.168.0.91ping 192.168.0.92ping 192.168.0.93ping 192.168.0.130ping 192.168.0.12在所有5个参与者中都能工作:主机根网络名称空间(IP地址192.168.0.130),每个参与者3:主机net"$I"网络命名空间(IP地址192.168.0.91等),本地网络上的其他主机(IP地址例如192.168.0.12)。

这也使得TCP连接和UDP数据包在5个参与者之间的任意方向工作。

这也使得UDP广播在5个参与者中的任何一个之间都能工作。这是由上面的brd +子句设置的。但是,似乎不需要该子句,因为默认情况下启用了广播。

TCP连接具有正确的IP地址,除了从主机根网络命名空间到主机net"$I"网络命名空间的TCP连接显示传入IP地址192.168.0.90而不是192.168.0.130。

主机net"$I"网络命名空间可以使用IP地址192.168.0.90或192.168.0.130连接到主机根网络命名空间。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/622914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档