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)
...

哪裡 iface12分別是 172.1.1.{1,2}。 Iface 0 是 172.1.1.5。

我的問題是在伺服器上,我看到所有流量都流向 iface0,透過nload。伊法斯12顯示沒有流量。

對於連接到 nfs 伺服器的所有 10 個客戶端來說,情況都是一樣的。

是什麼導致流量流向 iface0,以及如何強制 nfs 客戶端的流量通過配置的介面?

答案1

要實現此功能,您必須為所有三個 inet 介面配置單獨的路由表和規則,並啟用arp_filter.
您可能還想先在虛擬機器環境中對此進行測試,因為您可以在接下來的步驟中輕鬆中斷任何連接,並且肯定會出現一些問題。


首先啟用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 是eth0,在以下範例中可能eth1eth2您的設定不匹配,因此您必須採用它。

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 環境中對此進行了測試。

相關內容