Вопрос или проблема
Я установил и успешно запустил 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
, но оставался доступ к серверу, мы можем использовать следующие шаги.
Применение
-
Маркировка пакетов через 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
. -
Создание таблицы маршрутизации и правила iprule: После установки маркировки пакетов, необходимо настроить таблицу маршрутизации, которая будет учитывать эту маркировку.
-
Сначала добавьте новую таблицу в
rt_tables
:echo 201 crawl >> /etc/iproute2/rt_tables
-
Теперь настройте правило, используя iprule, чтобы пересылать маркированные пакеты в новую таблицу:
ip rule add fwmark 1 table crawl
Вы можете проверить, что правило добавлено, используя:
ip rule ls
-
-
Добавление маршрута в новую таблицу: Завершите настройку, добавив маршрут по умолчанию для этой таблицы, указывающий, что маркированные пакеты направляются через VPN-интерфейс.
ip route add default via 192.168.68.35 dev ppp0 table crawl
Теперь пакеты, которые соответствуют созданному iptables правилу, будут переадресовываться через VPN-соединение, в то время как остальной трафик будет использовать стандартные маршруты.
Заключение
Настройка маршрутизации трафика на уровне, позволяющем избирательно использовать VPN, требует детального понимания работы сетевых инструментов и их взаимодействия в Linux. Использование IPTABLES и IPROUTE2 даёт возможность реализовать сложные схемы маршрутизации, что может гибко удовлетворять потребности бизнеса, обеспечивая безопасность и доступность. Этот метод может быть расширен и усложнён, чтобы удовлетворять особым требованиям компании или инфраструктуры.