私の NFS サーバーには 3 つのインターフェースがあります。0: 1Gb、1: 10Gb、2: 10Gb。
Iface 0 は管理目的にのみ使用され、1/2 は 2 つの異なるマウントに使用されます。
すべてのインターフェースは同じサブネット (/24) 上にあります。
| サーバー | ----> iface 0/1/2 ----> |プライベート スイッチ| ----> |すべてのクライアント|
私のクライアントはインターフェース経由でNFSに接続するように設定されています1そして2。
$ 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)
...
どこにiface1そして2それぞれ172.1.1.{1,2}です。Iface 0は172.1.1.5です。
私の問題は、サーバー上ですべてのトラフィックがifaceに送られていることです0、nload経由。Ifaces1そして2トラフィックを表示しません。
これは、NFS サーバーに接続されている 10 台のクライアントすべてに当てはまります。
ifaceにトラフィックが流入する原因は何ですか?0、設定されたインターフェースを介して NFS クライアントのトラフィックを強制するにはどうすればよいでしょうか?
答え1
これを機能させるには、3 つの 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 は でありeth0
、次の例でeth1
は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 環境でこれをテストしました。