NFS 流量将与不同 IP 地址但同一子网进行接口

NFS 流量将与不同 IP 地址但同一子网进行接口

我的 NFS 服务器有 3 个接口:0:1GB,1:10Gb,2:10Gb。

Iface 0 仅用于管理目的,1/2 用于两种不同的挂载。

所有接口都位于同一子网 (/24)。

| 服务器 | ----> iface 0/1/2 ----> |私人交换机| ----> |所有客户端|

我的客户端配置为通过接口连接到 nfs12

$ mount
...
iface1:/home on /home type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.1.1.3,local_lock=none,addr=172.1.1.1)
iface2:/scratch on /scratchlair type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.1.1.3,local_lock=none,addr=172.1.1.2)
...

iface 在哪里12分别为 172.1.1.{1,2}。Iface 0 为 172.1.1.5。

我的问题是,在服务器上,我看到所有流量都流向 iface0,通过 nload.Ifaces12显示无流量。

这对于连接到 nfs 服务器的所有 10 个客户端来说都是相同的。

什么原因导致流量流向 iface0,以及如何强制 nfs 客户端的流量通过配置的接口?

答案1

为了实现这一点,您必须为所有三个 inet 接口配置单独的路由表和规则并启用arp_filter
您可能还想首先在 VM 环境中测试这一点,因为在接下来的步骤中,您可能会轻松中断任何连接,而且肯定会出现一些问题。


首先启用arp_filter

sysctl net.ipv4.conf.default.arp_filter=1

为了使其永久保存,请将其添加到您的/etc/sysctl.conf。根据您的发行版,您还可以将其放入下面的文件中/etc/sysctl.d/

echo net.ipv4.conf.default.arp_filter = 1 >> /etc/sysctl.conf

现在让我们添加路由表。

cat << TABLES >> /etc/iproute2/rt_tables 
101 rt1
102 rt2
103 rt3
TABLES

假设您有一个/24网络掩码,并且您的默认网关是172.1.1.254。此外,接口 0、1 和 2 是eth0eth1并且eth2在以下示例中可能与您的设置不匹配,因此您必须采用它。

ip route add 172.1.1.0/24 dev eth0 src 172.1.1.5 table rt1
ip route add table rt1 default via 172.1.1.254 dev eth0
ip rule add table rt1 from 172.1.1.5

ip route add 172.1.1.0/24 dev eth1 src 172.1.1.1 table rt2
ip route add table rt2 default via 172.1.1.254 dev eth1 
ip rule add table rt2 from 172.1.1.1    

ip route add 172.1.1.0/24 dev eth2 src 172.1.1.2 table rt3
ip route add table rt3 default via 172.1.1.254 dev eth2
ip rule add table rt2 from 172.1.1.2

要使这些路由表和规则永久生效,您必须将上述步骤添加到 NIC 配置中。在基于 RHEL 的系统上,操作如下。

的路线和规则eth0

cat << ROUTE > /etc/sysconfig/network-scripts/route-eth0
172.1.1.0/24 dev eth0 src 172.1.1.5 table rt1
table rt1 default via 172.1.1.254 dev eth0
ROUTE

cat << RULE > /etc/sysconfig/network-scripts/rule-eth0
table rt1 from 172.1.1.5
RULE

的路线和规则eth1

cat << ROUTE > /etc/sysconfig/network-scripts/route-eth1
172.1.1.0/24 dev eth1 src 172.1.1.1 table rt2
table rt2 default via 172.1.1.254 dev eth1
ROUTE

cat << RULE > /etc/sysconfig/network-scripts/rule-eth1
table rt2 from 172.1.1.1   
RULE

的路线和规则eth2

cat << ROUTE > /etc/sysconfig/network-scripts/route-eth2
172.1.1.0/24 dev eth2 src 172.1.1.2 table rt3
table rt3 default via 172.1.1.254 dev eth2
ROUTE

cat << RULE > /etc/sysconfig/network-scripts/rule-eth2
table rt3 from 172.1.1.2   
RULE

正如评论中已经概述的那样,仅对接口使用不同的子网并在客户端上为不同的子网分配 IP 别名可能会更容易。

我已经在具有 CentOS7 NFS 服务器的 VM 环境中对此进行了测试。

相关内容