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

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

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

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

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

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 шлюзом по умолчанию, я не могу снова подключиться к серверу через 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-соединения, должна оставаться без изменений. Прежде всего, изучим, как именно это можно реализовать, используя комбинацию инструментов, таких как iptables и iproute2.

Теория

При подключении VPN, вся сетевая активность сервера может быть перенаправлена через VPN шлюз. Это удобно, но в вашем случае вам необходимо, чтобы только определенные HTTP/HTTPS-запросы шли через VPN, а все остальное шло напрямую через интернет-подключение сервера. Задача решается путем создания правил маршрутизации и использования разметки пакетов с помощью iptables и iproute2.

Пример

Установка связи

Уже выполнена установка и успешный запуск клиента 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 в качестве шлюза по умолчанию теряется возможность подключаться через SSH к серверу. Проблема в том, что все SSH-сессии также начинают проходить через VPN, что ведет к прерыванию существующих соединений.

Настройка разметки пакетов

Итак, нам нужно отметить пакеты, которые предназначены для определенных веб-сайтов, чтобы они могли быть перенаправлены через VPN:

  1. Определяем IP-адреса целевых веб-сайтов: Вы должны выяснить IP-адреса сайтов, которые необходимо маршрутизировать через VPN. Это можно сделать с помощью команд nslookup или dig.

  2. Создаем правила для iptables:

    iptables -t mangle -A OUTPUT -p tcp -m tcp -d <целевой_IP> --dport 80 -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -p tcp -m tcp -d <целевой_IP> --dport 443 -j MARK --set-mark 0x1

    Где <целевой_IP> – IP-адрес вашего целевого веб-сайта.

Настройка iproute2

  1. Добавляем новую таблицу маршрутизации:

    echo "201 vpnroute" >> /etc/iproute2/rt_tables
  2. Создаем правило:

    ip rule add fwmark 1 table vpnroute
  3. Добавляем маршрут по умолчанию для таблицы vpnroute:

    ip route add default via 192.168.68.35 dev ppp0 table vpnroute

Эти команды создадут правило, которое будет перенаправлять трафик, отмеченный с помощью iptables, через интерфейс ppp0. Остальной трафик будет работать по обычной таблице маршрутизации.

Применение

Теперь все запросы к веб-сайтам, которые вы указали, будут проходить через VPN-туннель. В то же время, остальные подключения (включая SSH) будут идти не через VPN, что позволит вам сохранить доступ к серверу через SSH без прерываний.

Проверка конфигурации может быть осуществлена с помощью команд ip rule ls и ip route show table vpnroute, которые покажут активные правила и маршруты. Убедитесь, что ваше подключение через VPN установлено, прежде чем тестировать конечную настройку.

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

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

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

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