我们设置了两台计算机。S 是可以访问互联网的服务器,C 是通过 192.168.0.0/24 网络连接到服务器的客户端。这很好用,但第三台计算机 C2 应该连接到 C。
问题是 C 和 C2 必须通过 192.168.0.0/24 连接,而 C2 不能看到 S。因此,我们要在 S 和 C 之间添加一个使用 192.168.1.0/24 的虚拟网络。
即我们有:
S <-- 192.168.0.0/24 -- C <---- X ---- C2
我们想要:
S <-- 192.168.1.0/24 -- C <-- 192.168.0.0/24 -- C2
我们在 S(之前通过 eth0 连接到 C)中的 /etc/network/interfaces 中添加以下内容,并执行“ifup eth0.1”:
auto eth0.1
iface eth0.1 inet static
address 192.168.1.254
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
在 C 语言中,在“ifdown eth0”之后,删除旧的 if 并输入:
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.254
然后,“ifup eth0”。
但不起作用!Ping 只是说:
$ ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
From 192.168.1.254 icmp_seq=1 Destination Host Unreachable
From 192.168.1.254 icmp_seq=2 Destination Host Unreachable
当我们改回来时,一切都正常了,我们甚至可以从客户端 ping eth0.1。如何从客户端更改网络?
答案1
问题在于您使用了 VLAN 802.1q 接口,它不是别名接口,因此您有 2 个不同的 VLAN,并且您需要一个典型的现场路由器配置来执行此操作,或者您需要使用虚拟模块创建一个虚拟接口(可能更容易)以这种方式:
#! /bin/bash
modprobe dummy
ip link set name ethvirt dev dummy0
ifconfig ethvirt hw ether 00:22:22:03:02:74
ifconfig ethvirt 192.168.1.254 netmask 255.255.255.0 up
希望能帮助到你!