独自の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アドレスを持ち、任意の方法で一緒に接続できます。

たとえば、プライベートネットワークを共有する3つのノードをシミュレートしたとします。まず、ネットワークを表すブリッジデバイスを作成します。

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アドレスを持つ3つの仮想ノードがあります。

# 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

ミニネットこれらの設定を自動化する優れたツールです。

関連情報