Назад | Перейти на главную страницу

Маршрутизация всего трафика от клиента с изменением локальной подсети через VPN

У меня есть простой ячеистый VPN (реализованный с помощью Tinc), который содержит мой персональный ноутбук и VPS с общедоступным IP-адресом. Допустим, публичный IP-адрес сервера 1.2.3.4. Личный адрес ноутбука: 10.16.1.2 а частный адрес сервера 10.16.0.2.

Я хочу проложить маршрут ВСЕ трафик с моего ноутбука через VPN и выход из VPS. Я уже настроил сервер для работы в качестве шлюза, включив пересылку и маскировку, но я не могу понять, как настроить маршрутизацию на ноутбуке.

Проблема в том, что у ноутбука нет фиксированной локальной подсети. Иногда это может быть 192.168.0.0/24 маршрутизатора моего дома, или это может быть 172.16.0.0/12 моего университета, например.

Я бы хотел, чтобы мой ноутбук направлял весь мой трафик через шлюз VPN, но в то же время у меня должен быть доступ к локальной сети, даже если в ней есть неизвестно изменяющаяся подсеть.

Вот что мне удалось сделать:

# ip route
default via 192.168.0.1 dev wlan0
0.0.0.0/1 via 10.16.0.2 dev vpn 
128.0.0.0/1 via 10.16.0.2 dev vpn 
10.16.0.0/16 dev vpn  proto kernel  scope link  src 10.16.1.2 
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.133

Следуя некоторым руководствам по OpenVPN, я разделил весь Интернет на два больших /1, так что они действуют как своего рода маршрут по умолчанию, не изменяя фактический маршрут по умолчанию (default via 192.168.0.1 dev wlan0). Проблема в том, что даже пакеты, предназначенные для VPS на 1.2.3.4 захвачены /1 маршруты, и движение застревает.

Если бы была возможность написать что-то вроде:

ip route add 1.2.3.4/32 via default

Было бы неплохо, но не думаю, что это возможно.

Я даже пробовал использовать маршрутизацию на основе политик и маркировку пакетов с помощью iptables, но безуспешно.

Не зная вашего фактического IP-адреса VPS, я не могу дать вам точные команды, но в основном вам нужно разделить «Интернет» на несколько частей, ни одна из которых не включает ваш VPS. Например, если ваш VPS-адрес 255.255.255.255 (что, очевидно, не так), тогда у вас будет

  • 127.0.0.0/7 через 10.16.0.2 dev vpn
  • 255.0.0.0/15 через 10.16.0.2 dev vpn
  • 255.255.0.0/23 через 10.16.0.2 dev vpn
  • 255.255.255.0/31 через 10.16.0.2 dev vpn

обратите внимание, что это покрывает весь ваш второй интернет-блок, ЗА ИСКЛЮЧЕНИЕМ вашего адреса VPS. Имейте в виду, что я намеренно выбрал простой адрес, чтобы меня не было здесь весь день, но вы можете делать это для чего угодно, если вы готовы написать достаточно маршрутов, и вам нужно сделать это только один раз, пока ваш адрес VPS не меняется.