Есть ли способ настроить клиентов OpenVPN для маршрутизации трафика для HTTP-порта 80 и HTTPS-порта 443 напрямую (то есть не через VPN), а через обычный шлюз по умолчанию, который есть у клиентов. Весь остальной трафик должен проходить через VPN.
Мой клиент работает под управлением OpenVPN в Windows, и моя текущая конфигурация выглядит так:
client
dev tun
proto tcp
remote my-server-2 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ../keys/ca.crt
cert ../keys/client1.crt
key ../keys/client1.key
ns-cert-type server
verb 3
route-metric 1
show-net-up
dhcp-renew
dhcp-release
route-delay 0 120
hand-window 180
management localhost 13010
management-hold
management-query-passwords
management-forget-disconnect
management-signal
auth-user-pass
OpenVPN не может фильтровать трафик - он просто отправляет IP-пакеты, которые проходят через VPN-туннель. Требуемые функции должны быть предоставлены операционной системой. ОС должна решить, следует ли маршрутизировать пакет с помощью OpenVPN или с помощью шлюза в локальной сети. В Linux это можно сделать с помощью iptables для маркировки определенных пакетов и iproute2 для выбора различных таблиц маршрутизации. Однако, насколько мне известно, это невозможно сделать в Windows.
Если ваш клиент OpenVPN находится в вашем шлюзе локальной сети, вы можете сделать следующее.
Пометить входящий http-трафик с помощью iptables
(iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 0x80
.
Затем создайте таблицу маршрутизации специально для отмеченного трафика.
echo "80 http" >> /etc/iproute2/rt_tables
ip route add default 11.22.33.44 dev ethX table http
И наконец, добавьте правило маршрутизации маркированного трафика по новой таблице.
ip rule add fwmark 0x80 lookup 80
Вы можете узнать больше о маршрутизации политик Linux в Linux Advanced Routing and Traffic Control Howto - http://www.lartc.org
Когда вы подключаетесь к VPN, он вносит некоторые изменения в вашу таблицу маршрутизации, чтобы решить, какой трафик идет на интерфейс openvpn, а какой - на локальный шлюз.
Его можно настроить двумя способами, два из которых следующие. (Я думаю, вам нужно поискать в Google конфигурации "разделенного туннеля" для получения более подробной информации.)
1) (по умолчанию) конфигурация заключается в том, что сервер отправляет клиенту запись в таблице маршрутизации со шлюзом интерфейса tun в качестве маршрута по умолчанию, в этом сценарии все трафик (включая порт 80 и 443) маршрутизируется через туннель openVPN.
2) Что (я думаю) вы хотите, так это настроить, чтобы при подключении к серверу openVPN в таблицу маршрутизации передавался только маршрут для трафика частной сети, чтобы все остальное отправлялось на локальный шлюз. (http, httpd, dns остаются локальными)
Обычно это включает установку директивы push
в server.conf
файл;
push "route 10.251.69.0 255.255.255.0"
Вот пример отключения «Следует ли маршрутизировать клиентский интернет-трафик через VPN?» в веб-панели администратора openvpn здесь
Вы также можете выполнить настройку для каждого клиента, однако в соответствии с сообщение в блоге, указанное в комментариях, трудно (невозможно ??) отключить маршруты, отправленные с сервера, без запуска какого-либо сценария bash, чтобы обернуть это. (Следовательно, проще, если вы можете установить это одинаково для всех клиентов в server.conf
).