我的 Ubuntu 服务器有一个物理接口eth0
。我想为服务器分配 3 个 IP(不同的子网)。我无法使用默认虚拟接口创建工具(如或ifconfig
),因为对于这 3 个 IP,我需要指定一个默认网关。因此,是否有可能有一个可以连接的网桥(以及多个具有我想要的 IP 的 tap 或 tun 接口),但每个虚拟设备都可以连接到可通过 访问的子网。ip addr add
eth0:0
eth0
eth0
编辑1:
假设我想要 5 个以太网接口来连接到 5 个不同的网络。但我买不起 5 个接口。所以我买了一个非托管交换机,并将所有 5 个网络的 cat5 电缆连接到该交换机,并将该交换机的一个端口连接到eth0
Ubuntu 服务器。为了处理 Ubuntu 服务器上的所有 5 个网络,我创建了 5 个虚拟接口,它们的行为类似于物理接口(eth1、eth2 等),它们穿过交换机eth0
并最终到达交换机。我不介意所有这些独立的网络都通过一个非托管交换机。但我希望我的 Ubuntu 服务器将这些网络视为连接到 5 个物理接口。
答案1
系统上只能有一个默认路由。
您可以添加静态路由来强制某些流量通过不同的路由器:
route add 172.16.1.0/24 172.26.1.250
或者
ip route add 172.16.1.0/24 via 172.26.1.250 dev eth0:1
这些命令可以添加到 /etc/network/interfaces。
答案2
您想要的是影响内核中的路由决策。这通常称为策略路由:就您而言,我假设您想要一个作用于源地址的策略以路由回该接口。到达一个接口的网络流量应在该接口上退出,并且特定接口上的数据包应使用为该接口指定的规则而不是默认表。您想要的命令是ip rule
。
话虽如此,OP 中没有足够的信息来肯定地说需要策略路由。
答案3
经过几个月的谷歌搜索,我想我已经找到了答案。可以使用用于在 KVM 中为客户操作系统创建接口的 vde 工具来完成。步骤如下:
安装软件:
sudo apt-get install vde2
创建虚拟交换机:
sudo vde_switch -s /tmp/switch1 -daemon
创建一个 tap 设备:
sudo vde_switch -tap tap0 -daemon
创建另一个tap设备(需要指定新的socket文件):
sudo vde_switch -tap tap1 -sock /var/run/vde.ctl/ctl1 -daemon
tap
只要每个设备都有一个新的套接字文件,就可以创建任意数量的设备。
将你的物理设备连接到 vde 交换机:
sudo vde_pcapplug -d eth0
为两个 Tap 设备分配 IP 地址(我的eth0
是192.168.1.10/24
):
sudo ifconfig tap0 192.168.1.80 netmask 255.255.255.0
sudo ifconfig tap1 192.168.1.90 netmask 255.255.255.0
我已将所有接口放在同一个网络上,以便可以互相 ping 并测试设置是否运行良好。
现在从位于同一网络上的不同主机 (可能是您的 Windows 机器) ping 该 IP192.168.1.80
和。192.168.1.90
从 Ubuntu 可以通过新设备 ping 网络上的其他主机,tap
如下所示:
ping -I tap0 192.168.1.1
现在ifconfig
可以用来重新分配属于不同网络的 IP 地址给 Tap 设备。
就是这样。独立的虚拟接口就像独立的接口一样。
我还没有找到任何解释此过程的指南/教程。也许有人可以在各种情况下测试它,看看它是否是在生产环境中实施的可行解决方案。
答案4
为什么不在 Linux 中使用简单的 tuctl 实用程序:
tunctl -u root -i eth5
这将创建新的接口 eth5,为其分配 IP/MASK,然后像任何其他接口一样配置,就可以正常工作。