NFS 流量將與不同的 IP 地址但相同的子網進行介面
我的 NFS 伺服器有 3 個介面:0:1Gb、1:10Gb、2:10Gb。
Iface 0 僅用於管理目的,1/2 用於兩個不同的安裝。
所有介面都在同一個子網 (/24) 上。
| 伺服器 | —-> iface 0/1/2 —-> |私有開關| —-> |所有客戶|
我的客戶端配置為通過介面1和2連接到 nfs 。
$ 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 1和2分別是 172.1.1.{1,2}。Iface 0 是 172.1.1.5。
我的問題是在伺服器上,我看到所有流量都通過 nload 流向 iface 0。Ifaces 1和2顯示沒有流量。
這對於連接到 nfs 伺服器的所有 10 個客戶端都是一樣的。
是什麼導致流量進入 iface 0,如何強制 nfs 客戶端的流量通過配置的介面?
要完成這項工作,您必須為所有三個 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 環境中對此進行了測試。