자체 MAC 및 IP 주소로 가상 네트워크 카드를 만드는 방법은 무엇입니까?

자체 MAC 및 IP 주소로 가상 네트워크 카드를 만드는 방법은 무엇입니까?

Ubuntu에서는 실제 네트워크에 여러 개의 독립적인 시스템이 있는 것처럼 보이게 해야 합니다. 추가 가상 머신을 생성하지 않고 이 작업을 수행해야 합니다. 처음에는 IP 주소 앨리어싱을 생각했는데 실제로 효과가 있었습니다. 예를 들어 내 컴퓨터 어댑터의 이름은 enp0s3이고 해당 IP 주소는 10.0.2.14입니다. 다른 컴퓨터가 10.0.2.15에서 네트워크에 있는 다른 컴퓨터를 볼 수 있기를 원합니다. 이를 달성하기 위해 다음 명령을 사용합니다.

sudo ip a add 10.0.2.15/24 dev enp0s3

이것은 잘 작동하지만 MAC 주소 10.0.2.14와 .15가 동일하므로 허용되지 않습니다.

간단하게 MAC 주소를 변경해 보았는데 이로 인해 .14와 .15가 모두 변경되었습니다.

해결책은 무엇입니까? VirtualBox 네트워크 어댑터를 추가하면 자체 IP와 MAC 주소가 있기 때문에 이것이 가능하다는 것을 알고 있습니다. 많은 컴퓨터(50개 이상)를 시뮬레이션해야 하기 때문에 이 솔루션을 사용할 수 없습니다.

내가 찾은 가장 가까운 대답은 이것이었습니다.스택 교환 포스트.

도움을 주셔서 미리 감사드립니다!

답변1

여러 개를 생성할 수 있습니다.네트워크 네임스페이스, 각각 고유한 IP 주소를 갖고 원하는 방식으로 함께 연결할 수 있습니다.

예를 들어, 개인 네트워크를 공유하는 세 개의 노드를 시뮬레이션한다고 가정해 보겠습니다. 먼저 네트워크를 나타내는 브리지 장치를 만듭니다.

ip link add name br-net0 type bridge
ip addr add 192.168.13.1/24 dev br-net0
ip link set br-net0 up

이로 인해 우리는 다음과 같은 결과를 얻게 됩니다.

# ip addr show br-net0
3: br-net0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 2a:06:b9:b4:e9:61 brd ff:ff:ff:ff:ff:ff
    inet 192.68.13.1/24 scope global br-net0
       valid_lft forever preferred_lft forever

다음으로 가짜 머신을 나타내는 네트워크 네임스페이스를 만듭니다.

# ip netns add node0
# ip netns add node1
# ip netns add node2

다음으로 3개를 만듭니다.수의사 쌍이를 사용하여 네임스페이스를 브리지에 연결합니다.

ip link add name node0-ext type veth peer name node0-int netns node0
ip link add name node1-ext type veth peer name node1-int netns node1
ip link add name node2-ext type veth peer name node2-int netns node2

이러한 각 명령은 veth쌍을 만들고 쌍의 한쪽 끝을 지정된 네트워크 네임스페이스에 배치합니다. 각 쌍의 "외부" 끝을 브리지에 연결해야 합니다.

ip link set master br-net0 dev node0-ext
ip link set master br-net0 dev node1-ext
ip link set master br-net0 dev node2-ext

마지막으로 (a) 가상 노드에 주소를 할당해야 합니다.

ip netns exec node0 ip addr add 192.168.13.10/24 dev node0-int
ip netns exec node1 ip addr add 192.168.13.11/24 dev node1-int
ip netns exec node2 ip addr add 192.168.13.12/24 dev node2-int

ip netns exec명령을 사용하면 네트워크 네임스페이스 내에서 명령을 실행할 수 있습니다(이 작업을 수행하는 데도 사용할 수 있음 nsenter).

(b) 모든 인터페이스를 호출합니다.

for node in 0 1 2; do
  ip link set node${node}-ext up
  ip netns exec node${node} ip link set node${node}-int up
done

이제 각각 고유한 IP 주소와 MAC 주소를 가진 세 개의 가상 노드가 있습니다.

# ping -c 1 192.168.13.10
PING 192.168.13.10 (192.168.13.10) 56(84) bytes of data.
64 bytes from 192.168.13.10: icmp_seq=1 ttl=64 time=0.054 ms

--- 192.168.13.10 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.054/0.054/0.054/0.000 ms
# arp -an
? (192.168.122.1) at 52:54:00:90:73:ca [ether] on eth0
? (192.168.13.11) at ba:0b:4b:ed:e4:bb [ether] on br-net0
? (192.168.13.12) at da:38:38:32:29:17 [ether] on br-net0
? (192.168.13.10) at 56:ad:09:af:46:1f [ether] on br-net0

미니넷이러한 설정을 자동화하는 훌륭한 도구입니다.

관련 정보