![使用 macvlan 模拟网络上的多个硬件设备](https://linux22.com/image/175207/%E4%BD%BF%E7%94%A8%20macvlan%20%E6%A8%A1%E6%8B%9F%E7%BD%91%E7%BB%9C%E4%B8%8A%E7%9A%84%E5%A4%9A%E4%B8%AA%E7%A1%AC%E4%BB%B6%E8%AE%BE%E5%A4%87.png)
我正在尝试使用 Linux 的网络名称空间来模拟本地网络上的多个设备。我希望它显示为实际的网络设备,而不是子网上伪装的笔记本电脑 IP。这可能吗?
我想使用这些命名空间来启动几个可以访问互联网的 bash 脚本,即:
sudo ip netns exec netns1 myscript1.sh
sudo ip netns exec netns2 myscript2.sh
我正在编写一个脚本来创建虚拟网络。目前我只是尝试在命名空间上进行:
INTERFACE=enp59s0
IP1=192.168.2.101/24
# create macvlan and associate it to network device in bride mode
ip link add macvlan1 link $INTERFACE type macvlan mode bridge
# create new network namespace
ip netns add netns1
# associate the macvlan to the new namespace
ip link set macvlan1 netns netns1
# Set IP address
ip -n netns1 addr add $IP1 dev macvlan1
# set macvlan to up
ip netns exec netns1 ifconfig macvlan1 up
这让我可以对子网内的设备执行 ping 操作,即执行以下操作
sudo ip netns exec netns1 nmap -sn 192.168.2.1-255
但是,当我无法从默认命名空间 ping 虚拟设备时。
另外,在route中添加路由器仍然无法让我连接到外界:
sudo ip netns exec netns1 ip route add default via 192.168.2.1
sudo ip netns exec netns1 ping 8.8.8.8
From 192.168.2.1 icmp_seq=1 Destination Net Unreachable
有任何想法吗?这是正确的方法吗?
使用 ifconfig 为 IP 起别名会更好吗:
ifconfig enp59s0:0 192.168.2.101 up
然后以某种方式将新接口绑定到命名空间?