У меня есть сервер Raspberry Pi, выполняющий множество задач и приложений через различные порты; одна из них - это служба домашней автоматизации, работающая через прокси-сервер Nginx на том же компьютере, который разрешает внешние соединения https, но только http-соединения в локальной сети. До сих пор это работало замечательно, но недавно я решил использовать платный VPN-сервис (используя OpenVPN) для повышения конфиденциальности. Это работает нормально, пока я не попытаюсь получить доступ к своему серверу домашней автоматизации, используя SSL (который требуется для таких сервисов, как Amazon Alexa). В результате я пытался обойти VPN для трафика SSL через порт 443, но форсирую весь другой трафик через туннель, используя следующие маршруты и правила ufw, когда VPN-соединение включено:

ip route add default via $route_vpn_gateway dev tun1 table 10
ip rule add from $ifconfig_local/32 table 10
ip rule add to $route_vpn_gateway/32 table 10
ip route flush cache


ufw insert 1 reject out on wlan0 from any
ufw insert 1 allow out on wlan0 from any port 443
ufw insert 1 allow in on tun1 to any
ufw insert 1 reject out on tun1 from any port 443
ufw insert 1 deny in on tun1 from any port 443
ufw insert 1 allow in on wlan0 to any port 443

Я попытался вставить более конкретные правила в начале списка правил. Это, похоже, не работает, и SSL-соединения по-прежнему не могут пройти. Есть что-то, чего я здесь не хватает? Конфигурация VPN настроена на предотвращение автоматической маршрутизации всего трафика через туннель.

2 ответа2

1

Для маршрутизации трафика в зависимости от того, на какой интерфейс он поступил и какой порт, вы можете использовать функцию метки iptables .

В вашем случае отметьте трафик, поступающий из порта 443 и / или интерфейса WAN / local, а затем используйте ip rule чтобы заставить его использовать выделенную таблицу маршрутизации. Установите маршрут по умолчанию в этой таблице, чтобы использовать ваш шлюз не vpn.

Как отмечать и направлять отмеченный трафик, объясняется здесь:

https://www.linuxquestions.org/questions/linux-networking-3/add-route-based-on-port-not-ip-486823/

Если вы отключите брандмауэр, вы должны увидеть, что трафик теперь правильно маршрутизируется.

Я не уверен на 100% в правилах брандмауэра, но проверьте журнал, чтобы увидеть, работает ли он /var/log/ufw.log .

Поскольку ufw - это интерфейс для iptables получите полный список правил, подобных этому iptables -S . Чтобы проверить, какие фактические правила влияют на ваш трафик, используйте функцию trace из iptables .

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .