具有默认路由的虚拟接口

具有默认路由的虚拟接口

我的 Ubuntu 服务器有一个物理接口eth0。我想为服务器分配 3 个 IP(不同的子网)。我无法使用默认虚拟接口创建工具(如或ifconfig),因为对于这 3 个 IP,我需要指定一个默认网关。因此,是否有可能有一个可以连接的网桥(以及多个具有我想要的 IP 的 tap 或 tun 接口),但每个虚拟设备都可以连接到可通过 访问的子网。ip addr addeth0:0eth0eth0

编辑1:

假设我想要 5 个以太网接口来连接到 5 个不同的网络。但我买不起 5 个接口。所以我买了一个非托管交换机,并将所有 5 个网络的 cat5 电缆连接到该交换机,并将该交换机的一个端口连接到eth0Ubuntu 服务器。为了处理 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 地址(我的eth0192.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,然后像任何其他接口一样配置,就可以正常工作。

相关内容