VPN и изменение исходного интерфейса для каждого пользователя – правильный исходный IP, но неверный интерфейс

Вопрос или проблема

Я подключен через VPN, и я хочу, чтобы некоторые учетные записи пользователей обходили его. Интерфейс VPN – это tap0 (IP 172.16.x.x), основной интерфейс – wlan0 (IP 192.168.10.3). Весь обычный трафик идет в Интернет через tap0.

Я создал вторую таблицу маршрутизации и добавил правило uid:

# ip route add default via 192.168.10.1 dev wlan0 proto static table 2
# ip rule add uidrange 1001-1001 table 2
# ip route show table 2
    default via 192.168.10.1 dev wlan0

Я ожидаю, что трафик пользователя будет выходить на wlan0 с исходным IP 192.168.10.3. Однако трафик затронутого пользователя имеет IP интерфейса wlan0, но выходит на неправильном интерфейсе tap0 (и затем никуда не идет). Без правила трафик идет нормально через tap0.

Странно, но ip route get показывает то, что я ожидал. С установленным правилом:

$ ip route get 8.8.4.4
8.8.4.4 via 192.168.10.1 dev wlan0 table 2 src 192.168.10.3 uid 1001
    cache 

Без правила:

$ ip route get 8.8.4.4
8.8.4.4 via 172.16.0.1 dev tap0 src 172.16.0.102 uid 1001
    cache 

Я также пробовал добавить dev wlan0 и proto static в таблицу маршрутизации, но это ничего не изменило. У меня абсолютно ничего нет в iptables, все политики установлены на ACCEPT. Я также пробовал iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE, но это не помогло (очевидно, потому что трафик выходит через tap0). Я также установил rp_filter в ноль везде.

В любом случае, пользователь может успешно пинговать шлюз wlan0 на 192.168.10.1. Спасибо за помощь.

Ответ или решение

Проблема с использованием VPN, когда вы хотите, чтобы некоторым учетным записям пользователей обходить его, достаточно распространенная. Рассмотрим симптомы вашей ситуации более подробно и ознакомимся с возможными решениями.

Контекст ситуации

Вы подключены к VPN через интерфейс tap0, имеющий IP-адрес 172.16.x.x. Ваш основной интерфейс — это wlan0 с IP-адресом 192.168.10.3. Вы создали отдельную таблицу маршрутизации и добавили правило, чтобы заставить определенные UID (в вашем случае это UID 1001) использовать wlan0 для выхода в интернет. Это правильный подход, но возникают проблемы, так как трафик вместо wlan0 выходит через tap0.

Исследование проблемы

  1. Правила маршрутизации:

    • Вы правильно создали вторую таблицу маршрутизации и добавили правило для UID. Однако убедитесь, что у вас правильно настроены все необходимые параметры в системе. Эта часть вроде бы корректна, так как ip route get показывает ожидаемое поведение.
  2. Неявные правила маршрутизации:

    • Убедитесь, что в системе нет других правил, которые могут пересекаться с вашим правилом для UID. Например, если другой интерфейс (например, tap0) имеет более высокий приоритет по умолчанию, он может перехватывать трафик.
  3. Параметры маршрутизации:

    • Попробуйте обновить параметры маршрутизации в вашей таблице 2, добавив дополнительные флаги. Например, вы можете добавить параметр src, чтобы явно указать исходный IP-адрес.
      ip route add default via 192.168.10.1 dev wlan0 src 192.168.10.3 proto static table 2
  4. Проверка iptables:

    • Хотя вы упоминаете, что у вас нет правил в iptables, стоит проверить, не блокируют ли таблицы или цепочки NAT какой-либо трафик. Убедитесь, что у вас нет несовместимых портов или правил, которые могли бы повлиять на ваше сетевое окружение.
  5. Ограничения маршрутизации:

    • Если после всех изменений ваш трафик все еще идет через tap0, возможно, дефолтная таблица маршрутизации или правила ip rule грузятся неправильно. Попробуйте добавить приоритет вашему правилу:
      ip rule add from 192.168.10.3 table 2 priority 100

Заключение

Проблема "неправильного интерфейса" в вашем случае может быть связана с конфигурацией маршрутизации или пересечением с другими правилами. Постарайтесь проверить каждые шаги, и не забывайте, что VPN может вести себя по-разному в зависимости от настроек системы и конфигурации интерфейсов. Убедившись, что у вас есть и правильно настроены все параметры, вы сможете управлять трафиком и его маршрутизацией среди различных пользователей системы.

Если вышеупомянутые шаги не решают вашу проблему, желательно углубиться в логи системы или проверки сетевых соединений с использованием инструментов вроде tcpdump, чтобы выяснить, что происходит "под капотом".

Оцените материал
Добавить комментарий

Капча загружается...