微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 多个接口上的相同IP

网络大师你好,

我有一个Linux(内核3.14)服务器,它充当一个消费电子设备(机顶盒 – 机顶盒)农场的TFTP,NFS和HTTP服务器.设备使用TFTP从其引导内核,然后从我们机器上的NFS服务器等安装它们的根FSes等.

现在,由于一个深奥的技术原因,我不打算在这里钻研(只相信我:),每个STB必须在它自己的,物理上分开的局域网.
因此,建立网络的方式是ATM:

服务器有1个网卡,用于访问世界其他地方.
它还为每个服务的STB提供1个网卡 – 每个STB都连接到一个小型路由器,STB其他设备连接到该路由器并形成LAN.

目前有3个STB连接,局域网为172.16.50.0/24,172.16.51.0/24和172.16.52.0/24.一切都很好.

但是:我们有3个不同的LAN,这意味着必须从STB1访问172.16.50.1,从STB2访问172.16.51.1,从STB3访问172.16.52.1 – 这意味着我们的环境有点不同每个STB,每次我们 – 比如说 – 上传要在STB上使用的新RootFS,我们需要手动编辑一些配置文件并放置正确的IP服务器必须从这个特定的STB访问.不是很方便,容易出错!

这让我想到:如果我们简单地将这三个局域网配置为完全相同的172.16.50.0/24怎么办?从STB(以及局域网中其他设备)的角度来看,一切都应该没问题,但服务器的观点呢?

Linux服务器可以有N个不同的以太网接口,所有接口都配置了相同的静态IP,但是每个接口都连接到物理上独立的LAN?

解决方法

是的,这是可能的,使用一个称为网络命名空间的功能(参见man ip-netns(8)).它基本上为您提供了多个不同的网络堆栈,每个堆栈都有自己的接口,路由等.

您需要为每个STB创建一个命名空间,然后可以在每个命名空间中单独运行所需的服务.

对于名称空间,您需要按如下方式继续:

>创建一个名为net1的命名空间:

ip netns add net1

>将您的接口ethX分配给新命名空间并配置您的IP地址172.16.50.1:

ip link set dev ethX netns net1
ip netns exec net1 ip link set dev ethX up
ip netns exec net1 ip address add 172.16.50.1/24 dev ethX

现在,名称空间中不显示IP地址172.16.50.1.一个简单的ping 172.16.50.1不起作用,首先需要切换到net1命名空间并在那里执行命令:

ip netns exec net1 <command>

通过这种方式,您现在可以在每个命名空间中运行每个服务.

如果您喜欢冒险,您甚至可以尝试以某种方式将所有来自您的STB的请求重定向到中央服务.为此,您需要从每个命名空间到认命名空间的隧道(请参阅ip link help veth)和相当一些iptables魔术……

原文地址:https://www.jb51.cc/linux/399063.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐