linux – 多个接口上的相同IP
网络大师你好,
我有一个Linux(内核3.14)服务器,它充当一个消费电子设备(机顶盒 – 机顶盒)农场的TFTP,NFS和HTTP服务器.设备使用TFTP从其引导内核,然后从我们机器上的NFS服务器等安装它们的根FSes等. 现在,由于一个深奥的技术原因,我不打算在这里钻研(只相信我:),每个STB必须在它自己的,物理上分开的局域网. 服务器有1个网卡,用于访问世界其他地方. 目前有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魔术…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |