Трафик NFS идет на интерфейс с другим IP-адресом, но той же подсети

Трафик NFS идет на интерфейс с другим IP-адресом, но той же подсети

Мой NFS-сервер имеет 3 интерфейса:0: 1Гб,1: 10Гб,2: 10Гб.

Iface 0 используется только для целей администрирования, а 1/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.

Моя проблема в том, что на сервере я вижу весь трафик, идущий на iface0, через nload. Ifaces1и2не показывают трафика.

То же самое происходит со всеми 10 клиентами, подключенными к серверу NFS.

Что заставляет трафик идти на 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, 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

Чтобы сделать эти таблицы маршрутизации и правила постоянными, вам нужно добавить вышеуказанные шаги в конфигурацию вашей сетевой карты. В системе на базе 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.

Связанный контент