Как настроить PPTP VPN клиент на сервере Ubuntu для маршрутизации определенного трафика?

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

Я установил и успешно запустил pptp vpn-клиент на сервере Ubuntu (aws ec2).

Я хочу иметь возможность доступа к определенным веб-сайтам через этот vpn. Однако все еще иметь возможность ssh и подключаться к серверу.

$ route -n  #после подключения к vpn

Таблица маршрутизации IP-адресов ядра
Назначение      Шлюз           Маска          Флаги Метрика Ссылка Использовать Iface
0.0.0.0         172.31.0.1     0.0.0.0         UG    100    0       0 eth0
172.31.0.0      0.0.0.0        255.255.240.0   U     0      0       0 eth0
192.168.68.35   0.0.0.0        255.255.255.255 UH    0      0       0 ppp0
209.99.22.18    172.31.0.1     255.255.255.255 UGH   0      0       0 eth0

Таблица маршрутизации выглядит как выше после подключения. Если я делаю ppp0 шлюзом по умолчанию, я не могу снова подключиться к серверу по ssh.

Поэтому я хочу добавить некоторые правила, чтобы всякий раз, когда приложение/скрипт запрашивает определенный веб-адрес или HTTP/HTTPS запросы, они перенаправляли трафик через ppp0 или vpn-соединение, но не через другие соединения.

Это возможно?

Заранее спасибо!

Вы можете пометить пакеты с помощью iptables и маршрутизировать помеченные пакеты через iproute2.

Это описано в LARTC

В вашем случае сначала нужно создать правило iptables:

iptables -t mangle -A OUTPUT -p tcp -m tcp -d 1.2.3.4 --dport 80 -j MARK --set-mark 0x1

Где 1.2.3.4 – ip-адрес целевого веб-сайта.

Затем добавьте таблицу маршрутизации с помощью iprule

echo 201 crawl >> /etc/iproute2/rt_tables
ip rule add fwmark 1 table crawl

Проверьте это

ip rule ls
0:  from all lookup local 
32765:  from all fwmark 0x1 lookup crawl 
32766:  from all lookup main 
32767:  from all lookup default

Теперь добавьте маршрут по умолчанию в таблицу crawl:

ip route add default via 192.168.68.35 dev ppp0 table crawl

Вот и все, пакеты с адресом назначения 1.2.3.4 и портом назначения 80 будут маршрутизироваться через интерфейс ppp0.

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

Настройка PPTP VPN клиента на сервере Ubuntu для маршрутизации определённого трафика может стать важной задачей в условиях, когда необходимо управлять сетевым трафиком так, чтобы определённые веб-сайты были доступны через VPN, оставаясь в то же время способным заходить на сервер через стандартное SSH-соединение. Это особенно важно в ситуациях, когда сервер работает в облаке, например, на AWS EC2.

Теория

Протокол PPTP (Point-to-Point Tunneling Protocol) активно используется для создания виртуальных частных сетей (VPN), и хотя он имеет определённые ограничения с точки зрения безопасности в современных условиях, для некоторых сценариев он остаётся востребованным. Когда вы подключаете сервер к VPN, всё сетевое трафик может быть перенаправлен через VPN-соединение, что иногда нежелательно, поскольку вы можете потерять доступ к серверу через SSH. Поэтому важно определить и настроить маршруты так, чтобы только определённый трафик использовал VPN, в то время как остальные подключения осуществлялись напрямую.

Для этого мы можем использовать комбинацию iptables и iproute2 – это мощные инструменты для управления трафиком и созданием сложных маршрутизационных схем в Linux.

Пример

Итак, вы установили PPTP VPN на Ubuntu и видите следующую таблицу маршрутизации после подключения:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.31.0.1      0.0.0.0         UG    100    0        0 eth0
172.31.0.0      0.0.0.0         255.255.240.0   U     0      0        0 eth0
192.168.68.35   0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
209.99.22.18    172.31.0.1      255.255.255.255 UGH   0      0        0 eth0

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

Применение

  1. Маркировка пакетов через iptables: Вы можете нацелить iptables на определённые виды трафика, которые вы хотите перенаправить. Например, для любого HTTP-запроса к IP-адресу 1.2.3.4:

    iptables -t mangle -A OUTPUT -p tcp -m tcp -d 1.2.3.4 --dport 80 -j MARK --set-mark 0x1

    В этой команде вы маркируете пакеты, пересылаемые на указанный IP адрес и порт 80 (HTTP) с помощью метки 0x1.

  2. Создание таблицы маршрутизации и правила iprule: После установки маркировки пакетов, необходимо настроить таблицу маршрутизации, которая будет учитывать эту маркировку.

    • Сначала добавьте новую таблицу в rt_tables:

      echo 201 crawl >> /etc/iproute2/rt_tables
    • Теперь настройте правило, используя iprule, чтобы пересылать маркированные пакеты в новую таблицу:

      ip rule add fwmark 1 table crawl

    Вы можете проверить, что правило добавлено, используя:

    ip rule ls
  3. Добавление маршрута в новую таблицу: Завершите настройку, добавив маршрут по умолчанию для этой таблицы, указывающий, что маркированные пакеты направляются через VPN-интерфейс.

    ip route add default via 192.168.68.35 dev ppp0 table crawl

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

Заключение

Настройка маршрутизации трафика на уровне, позволяющем избирательно использовать VPN, требует детального понимания работы сетевых инструментов и их взаимодействия в Linux. Использование IPTABLES и IPROUTE2 даёт возможность реализовать сложные схемы маршрутизации, что может гибко удовлетворять потребности бизнеса, обеспечивая безопасность и доступность. Этот метод может быть расширен и усложнён, чтобы удовлетворять особым требованиям компании или инфраструктуры.

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

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