У меня есть 2 сервера, каждый из которых имеет 3 сетевых интерфейса. 1 интерфейс ("eno") используется для подключения к Интернету через шлюз, а 2 интерфейса ("ens0", "ens1") используются для непосредственного подключения обоих серверов к точке. Это выглядит как:
|
gw
| |
S1 == S2
Мне нужно отправить данные из "ens0" в "ens0" и из "ens1" в "ens1" независимо. Когда я пытался сделать это на сервере S2, я обнаружил, что весь трафик проходит через ens0, несмотря на то, что я связываю 2 сокета (C++) с различными интерфейсами. Когда я делаю это на S1, это работает хорошо. Поэтому я проверил «IP-таблицы». Они есть:
S1 (работает правильно):
default via 192.168.1.4 dev eno1
192.168.1.0/24 dev eno1 proto kernel scope link src 192.168.1.3
192.168.2.0/24 dev ens3f0 proto kernel scope link src 192.168.2.1
192.168.2.0/24 dev ens3f1 proto kernel scope link src 192.168.2.2
S2 (работает неправильно):
default via 192.168.1.4 dev eno2 proto static metric 100
default via 192.168.1.4 dev ens3f0 proto static metric 101
default via 192.168.1.4 dev ens3f1 proto static metric 102
192.168.1.0/24 dev eno2 proto kernel scope link src 192.168.1.2 metric 100
192.168.1.4 dev ens3f0 proto static scope link metric 100
192.168.1.4 dev ens3f1 proto static scope link metric 101
192.168.2.0/24 dev ens3f0 proto kernel scope link src 192.168.2.3 metric 100
192.168.2.0/24 dev ens3f1 proto kernel scope link src 192.168.2.4 metric 101
Таблица для S2 была сгенерирована ОС.
Чтобы исправить проблему, я попытался изменить таблицу IP-адресов S2, как для S1. Я изменил это до состояния:
default via 192.168.1.4 dev eno2 proto static
192.168.1.0/24 dev eno2 proto kernel scope link src 192.168.1.2
192.168.2.0/24 dev ens3f0 proto kernel scope link src 192.168.2.3
Тогда, когда я пытаюсь сделать
sudo ip route add 192.168.2.0/24 dev ens3f1 src 192.168.2.4
Я получил ошибку
RTNETLINK answers: File exists
net.ipv4.ip_forward = 0 for both servers.
Мои вопросы:
1) Почему я не могу добавить последнюю сущность на S2, когда она на S1?
2) Как правильно настроить ip таблицы для того, чтобы оба интерфейса могли работать независимо друг от друга и пересылка трафика для них была невозможна? (Я хочу быть уверен, если я отправлю трафик на определенный интерфейс - он никогда не пройдет через другой).