我知道可以为同一个接口提供多个 IP 地址,比如eth0. 也可以在同一个物理网卡上建立多个虚拟接口,比如eth0:1,eth0:2,...。
假设现在它们都属于同一个子网。我可以对它们进行策略路由吗?例如,在同一个子网中有几台路由器,我可以为它们分配不同的网关吗?
- 不同的虚拟接口?
- 同一网卡上有不同的 IP 地址?
到目前为止,我尝试过但失败了。我现在想知道这是我的配置问题,还是原则上,IE,这根本就不可能实现。
编辑:
最后,我终于让它工作了,我想与有需要的普通读者分享这个指南。我使用的是 Debian 系列发行版。当我有时间的时候,我会发布systemd发行版,Fedora,Arch Linux,...
我不想使用 IP 别名,因为它是一种过时的技术,仅用于向后兼容,请参阅此git.kernel.org页面。因此,我让 eth0 通过 192.168.73.129 路由,但我希望创建一个新的虚拟接口通过 192.168.73.1 路由。我这样做:我不更改/etc/网络/接口,其中我没有配置任何内容。我添加了以下行
200 lab
到 /etc/iproute2/rt_tables。然后我发出命令:
ip link add link eth0 mac0 address 56:61:4f:7c:77:db type macvlan
这将创建虚拟接口mac0其 MAC 地址为 56:61:4f:7c:77:db,我使用它在路由器中保留地址;
ip link set mac0 up
这就引出了
dhclient mac0
并为其提供一个 IP 地址(由于地址保留,因此始终相同);
IP=$(ifconfig | grep -A 1 mac0 | grep inet | awk '{print $2}' | awk -F ":" '{print $2}')
存储虚拟接口的 IP 号码mac0在 shell 变量中知识产权;
ip route del default via 192.168.73.1 dev eth0
ip route add default via 192.168.73.129 dev eth0
ip route add 192.168.73.0/24 dev eth0
ip route add default via 192.168.73.1 dev mac0 table lab
ip route add 192.168.73.0/24 dev mac0 table lab
ip route del 192.168.73.0/24 dev mac0 table main
这将配置路由表,使用 192.168.73.129 作为路由表中 eth0 的默认网关,使用 192.168.73.1 作为 mac0 的网关实验室;
ip rule add from $IP table lab
该规则指定在什么条件下使用路由表实验室.所有上述命令都插入到可执行的 shell 脚本中,运行该脚本的命令放在/etc/rc.local,以便系统在启动时已经正确配置。
最后要做的事情是一些端口转发和地址保留。完成。
感谢您的帮助。
附言:如果有人想知道的话……我需要这个,因为我家里有两个路由器,192.168.73.1 和 192.168.73.129;第一个是普通路由器,另一个是 DD-WRT 路由器,充当我实验室 OpenVPN 服务器的 OpenVPN 客户端。出于明显的工作原因,所有到 192.168.73.129 的流量都会重定向到我的实验室,而家里的其他人使用 192.168.73.1,它执行 DHCP 服务。我的工作电脑使用 192.168.73.129 作为网关。当我在路上时,我有时需要在我的 PC 上访问与工作相关的业务,我的 PC 确实有一个正在运行的 SSH 服务器,但它会通过 192.168.73.1。因此,如果我尝试从家外通过 ssh 连接到我的工作电脑,请求通过 192.168.73.1 发送,但回复通过 192.168.73.129,并且 ssh 会话永远不会建立。上面的装置解决了这个难题。
答案1
- 是的你可以。
- 是的,如果您指的是 eth0、eth0:1、eth0:2 等上的 IP,则可以。我从未见过单个 NIC 上有多个 IP 地址(这就是 :1 :2 的用途)。
所有这些都可以通过 ip 命令来完成。
您遇到路由问题的原因是您只有一个路由表,并且由于接口位于单个子网中,因此最终将应用该子网的默认网关。但是,如果您创建了多个路由表,则可以根据它们进入的接口、原始 IP 或该上下文中可用的任何其他类型的标准来引导流量进出它们。
答案2
具体来说:
- 这 '界面'(更具体地说是以太网接口)是实际的硬件,具有唯一的 MAC 地址并在物理层和数据链路层运行。它实际上执行通信工作。
- 然后,您就可以在封包/數據報告此接口上的 OSI 层。
- 虚拟接口是内核中的软件抽象,指的是实际硬件接口或隧道(我认为是接口抽象)。
- 子网是可能的 IP 地址范围,因此需要路由器。
- 策略路由是基于目标地址以外的路由,例如基于发送方地址的路由,以通过不同的路由引导某些流量。
让我困惑的是‘在同一个子网上有多个路由器’。
另外,如果中间没有路由器,我认为网关一次只能处理与网络接口的一个连接。
希望这能帮助你思考这个问题。网络软件可能非常复杂,有时我对实际发生的事情感到惊讶。