별도의 네트워크 네임스페이스에 추가 IP 주소 생성

별도의 네트워크 네임스페이스에 추가 IP 주소 생성

저는 Ubuntu 18.04, Linux 커널 5.4.0을 실행하고 있습니다. 내 노트북의 로컬 IP 주소는 192.168.0.130입니다.

$ sudo ip addr show dev wlp2s0
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 net5

위의 핑이 작동하도록 하려면 어떻게 해야 합니까?

나는 다음 튜토리얼을 따르고 있습니다 :

고쳐 쓰다:

  • 위의 방법 type ipvlan mode l2대신에 이를 사용하여 작동시킬 수 있었습니다 . type macvlan로컬 핑이 여전히 작동하지 않지만, 내가 아는 한 이는 예상된 현상입니다.맥에버랜드그리고IPVLAN.

답변1

처럼 보인다맥에버랜드Wi-Fi에서는 작동하지 않습니다. 참조https://unix.stackexchange.com/a/555676더 알아보기. 다음 명령을 사용하여 Wi-Fi 및 이더넷에서 작동하도록 할 수 있습니다.ipvlan 모드 l2를 입력하세요.바꾸다타입맥블란.

다음은 각각 자체 네트워크 네임스페이스가 있는 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.925개의 참가자 모두에서 작동합니다. 호스트 루트 네트워크 네임스페이스(IP 주소 192.168.0.130), 3개 각각: 호스트 네트워크 네임스페이스(IP 주소 192.168.0.91 등 ping 192.168.0.93), 로컬 네트워크 기타 호스트( IP 주소(예: 192.168.0.12).ping 192.168.0.130ping 192.168.0.12net"$I"

또한 이를 통해 TCP 연결과 UDP 패킷이 5명의 참가자 사이에서 어떤 방향으로든 작동할 수 있습니다.

이를 통해 UDP 브로드캐스트가 5명의 참가자 간에 작동할 수도 있습니다. 이는 위 조항에 의해 제공됩니다 brd +. 하지만 기본적으로 방송이 활성화되어 있기 때문에 이 조항은 필요하지 않은 것 같습니다.

TCP 연결에는 올바른 IP 주소가 있지만 호스트 루트 네트워크 네임스페이스에서 호스트 net"$I"네트워크 네임스페이스로의 TCP 연결에는 수신 IP 주소 192.168.0.130 대신 192.168.0.90이 표시됩니다.

호스트 net"$I"네트워크 네임스페이스는 IP 주소 192.168.0.90 또는 192.168.0.130을 사용하여 호스트 루트 네트워크 네임스페이스에 연결할 수 있습니다.

관련 정보