У меня есть два подключения на моей локальной машине: один через eth0 (имеет статический IP, пусть он будет 10.10.10.10), другой - через ppp0 (имеет динамический IP, например 10.20.30.40). Оба имеют доступ к Интернету. У меня также есть удаленный сервер (предположим, что он имеет IP 1.2.3.4), к которому я хочу подключиться с моей локальной машины таким образом, чтобы пакеты, имеющие адрес источника 10.10.10.10 (eth0), должны проходить через eth0, тогда как те, которые имеют 10.20 .30.40 (ppp0) в качестве исходного адреса должен пройти через ppp0.Правило ip, похоже, не вызывается
Предварительно я удалил правило ip для основной таблицы маршрутов, чтобы предотвратить обработку пакетов этим правилом.
После этого я создал две таблицы маршрутов: одну для eth0 (с именем ETH) и другую для ppp0 (с именем PPP). Затем я добавил маршруты к этим таблицам следующим образом:
ip route add default dev ppp0 table PPP
ip route add default dev eth0 table ETH
Затем я добавил правила Ip, как следующие:
ip rule add from 10.10.10.10 lookup ETH
ip rule add from 10.20.30.40 lookup PPP
И это не работает. Однако, когда я использую ip rule add from all
вместо того, чтобы указывать на определенный IP-адрес, он работает (конечно, пакеты проходят через только один интерфейс в этом случае). Таким образом, кажется, что правило ip не вызывается, когда я указываю IP.
Что может быть причиной такого странного поведения?
У кого-нибудь есть идеи?