我正在运行Ubuntu18.04,Linux内核5.4.0。我的笔记本电脑有本地IP地址192.168.0.130:
$ 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路由表如下所示:
$ 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)。它的工作方式如下:
$ 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的单独网络名称空间中,如下所示:
$ 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 net5How可以修复这个问题吗?
我正在学习这些教程:
更新:
type ipvlan mode l2而不是上面的type macvlan来使它工作。本地ping仍然不起作用,但是--据我所知--这对macvlan和ipvlan来说是预期的。发布于 2020-12-04 16:22:44
看起来macvlan在wifi上不起作用,详情见https://unix.stackexchange.com/a/555676。通过使用类型ipvlan模式的l2代替类型macvlan,可以使它同时在wifi和以太网上工作。
下面是我的完整设置,它创建了3个IP地址,每个地址位于各自的网络命名空间中:
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.91、ping 192.168.0.92、ping 192.168.0.93、ping 192.168.0.130和ping 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连接到主机根网络命名空间。
https://unix.stackexchange.com/questions/622914
复制相似问题