OpenVPN: Маршрут SquidProxy
Я пытаюсь настроить общедоступный прокси-сервер Squid, который направляет свой трафик через VPN-сервер в любую точку мира. Он работает внутри док-контейнера на хосте VPS.
Используя настройки по умолчанию с push-шлюзом, я могу получить доступ к squid proxy на самом VPS, и он маршрутизирует свой трафик через vpn.
Однако никакие внешние IP-адреса не могут получить доступ к прокси-серверу Squid. У меня есть докер, перенаправляющий порт 3128:3128.
Это как-то связано с созданными маршрутами OpenVPN (так как прокси Squid доступен до запуска OpenVPN)
Я обнаружил, что именно этот маршрут, кажется, блокирует мой внешний трафик.
128.0.0.0/1 via 10.91.10.5 dev tun0
(10.91.10.5 - это шлюз VPN)
Если я удаляю его, я снова могу получить доступ к squid, но тогда исходящие запросы не используют VPN.
Я могу заставить свой внешний IP работать, явно добавив его так
ip route add 203.X.X.X via 172.18.0.1 dev eth0
(172.18.0.1 - это док-шлюз)
Но мне это нужно для работы с любыми внешними IP-адресами.
Я попытался IP-маршрут добавить 0.0.0.0 через 172.18.0.1 dev eth0.
Но это не работает, так как 128.0.0.0/1 более конкретен, поэтому сначала сопоставим.
В заключение
1) Нужен любой IP для доступа к SquidProxy (порт 3128)
2) Нужно, чтобы все исходящие запросы SquidProxy (80,443) проходили через VPN
Любая помощь будет принята с благодарностью!
1 ответ
ОБНОВИТЬ:
Так что у меня это работает
1) Запустите OpenVPN с помощью приведенной ниже команды
openvpn --route-nopull --script-security 2 --up /etc/openvpn/up.sh
Это отключает его от настройки маршрутов VPN. Таким образом, весь входящий и исходящий трафик использует маршрут по умолчанию, а не через VPN
2) В up.sh я запускаю следующие команды
#!/bin/sh
/sbin/ip route add 0.0.0.0/0 dev $1 table 100
/sbin/ip rule add from all fwmark 1 table 100
/sbin/iptables -A OUTPUT -t mangle -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
/sbin/iptables -t nat -A POSTROUTING -o $1 -j MASQUERADE
Затем я настроил Squid так, чтобы он разрешал только порты 80 и 443. В Docker порт 3128 открыт для доступа к контейнеру.
Мне также нужно было использовать --sysctl net.ipv4.conf.all.rp_filter=0 в команде запуска docker.