Назад | Перейти на главную страницу

Перенаправление VPN-трафика на прокси-сервер Squid

Я использую SoftEther в качестве VPN и Squid в качестве прокси.

Я хочу перенаправить этот VPN на прокси, а затем в Интернет.

Мое основное требование таково.

SmartPhone---->VPN--->Squid--->Internet
                        |
                        |
                        V
               internet access log

Пока я настроил SofteEther VPN, и он работает как обычный VPN, Squid установлен на сервере и работает при подключении как обычный прокси.

Я попытался установить правила iptables для перенаправления трафика vpn на squid (то есть с порта 80 на 3128 [порт прослушивания squid]), но это не сработало.

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

VPN и Squid настроены в Amazon EC2.

У меня есть эта настройка, мне тоже потребовалось время, чтобы настроить ...

Если вы используете OpenVPN, вы можете использовать мой скрипт вверх / вниз для OpenVPN / squid. Вам также необходимо настроить BIND для работы через VPN:

#!/usr/bin/env bash

status="$1"
ip="$5"
configdir_squid="/etc/squid/proxyoff"
configdir_bind="/etc/named"

if [ "$status" = "up" ]; then
        echo "tcp_outgoing_address $ip" > "$configdir_squid/tcp_outgoing_address.conf"
        echo "http_access allow localnet" > "$configdir_squid/http_access.conf"
        echo "query-source address $ip;" > "$configdir_bind/query_source.conf"
else
        echo "" > "$configdir_squid/tcp_outgoing_address.conf"
        echo "http_access deny localnet" > "$configdir_squid/http_access.conf"
        echo "" > "$configdir_bind/query_source.conf"
fi

systemctl restart named squid transmission-daemon

Затем создайте папку с именем proxyoff внутри / etc / squid. Затем настройте скрипты в OpenVPN:

up "/opt/scripts/openvpn_tun1.sh up"
down "/opt/scripts/openvpn_tun1.sh down"

Вам понадобятся правила IPtables, которые контролируют связь от squid и bind (вам нужно настроить статические маршруты для вашего VPN-провайдера):

-A vyprvpn-only -o lo -j ACCEPT
-A vyprvpn-only -d 192.168.1.0/24,10.8.0.0/24 ! -o tun1 -j ACCEPT
-A vyprvpn-only ! -o tun1 -j REJECT --reject-with icmp-net-unreachable
-A OUTPUT -m owner --gid-owner transmission -j vyprvpn-only
-A OUTPUT -m owner --gid-owner squid -j vyprvpn-only
-A OUTPUT -m owner --gid-owner named -j vyprvpn-only

Добавьте где-нибудь в конце ваших правил http_access в squid, но ДО того, как http_access запретить все:

include /etc/squid/proxyoff/http_access.conf

Также добавьте после http_port или после ваших правил http_access:

include /etc/squid/proxyoff/tcp_outgoing_address.conf

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

dns_v4_first on
dns_nameservers 8.8.8.8 8.8.4.4

Например, у меня есть dns_nameservers как 3 DNS-сервера Windows, которые обрабатывают AD, а затем отправляют любые запросы, которые они не знают, обратно на серверы BIND, работающие на тех же серверах, что и VPN.

Добавьте ошибку шлюза для ACL локальной сети в squid или переименуйте ACL и ACL в скриптах:

deny_info ERR_GATEWAY_FAILURE localnet

Затем просто настройте автоконфигурацию прокси:

function FindProxyForURL(url, host) {
    var proxy_on = "PROXY 192.168.1.20:3128; PROXY 192.168.1.21:3128";
    var proxy_off = "DIRECT";
    var network = "192.168.1.0";
    var subnet = "255.255.255.0";

    var proxy_bypass = new Array(
        "pyronexus.lan", "*.pyronexus.lan",
        "pyronexus.com", "*.pyronexus.com",
        "amazon.com", "*.amazon.com",
        "amazon.co.uk", "*.amazon.co.uk",
        "channel4.com", "*.channel4.com",
        "c4assets.com", "*.c4assets.com",
        "ipv6-test.com", "*.ipv6-test.com",
        // Banks
        "tsb.co.uk", "*.tsb.co.uk",
        "bankofscotland.co.uk", "*.bankofscotland.co.uk",
        "barclays.co.uk", "*.barclays.co.uk",
        "halifax.co.uk", "*.halifax.co.uk",
        "rbs.co.uk", "*.rbs.co.uk",
        "natwest.com", "*.natwest.com"
    );

    var blockedsites = new Array(
        "trafficstars.com", "*.trafficstars.com",
        "trafficfactory.biz", "*.trafficfactory.biz"
    );

    // Blocked websites (block them in the proxy server configuration to prevent circumvention
    for (var i = 0; i < blockedsites.length; i++) {
        if (shExpMatch(host, blockedsites[i])) {
            return "proxy 127.0.0.1";
        }
    }

    // Below here evaluates the above.
    // Bypass proxy for local web servers in the same subnet as the client.
    if (isInNet(host, network, subnet)) {
        return proxy_off;
    }

    // Bypass proxy for those listed under proxy_bypass.
    for (var i = 0; i < proxy_bypass.length; i++) {
        if (shExpMatch(host, proxy_bypass[i])) {
            return proxy_off;
        }
    }

    // Everything else not caught by the above, should be checked to see if it is HTTP, HTTPS or FTP
    // before sending to a proxy server.
    if (shExpMatch(url, "http:*") ||
        shExpMatch(url, "https:*") ||
        shExpMatch(url, "ftp:*")) {
            return proxy_on;
    }

    // Finally, send all other requests direct.
    return proxy_off;
}

Добавьте это в /etc/ named.conf в разделе options (добавьте серверы пересылки на DNS-серверы в Интернете, но удалите корневые ссылки):

include "/etc/named/query_source.conf";

Добавьте IP-адрес VPN в / etc / hosts:

209.99.22.37    uk1.vyprvpn.com

И добавляем маршрут:

ip route add 209.99.22.37/32 via 192.168.1.1 dev eth0

Вы можете увидеть некоторые из моих других руководств по прокси на https://pyronexus.com

Вы можете прочитать это:

https://www.williamjbowman.com/blog/2015/12/22/a-transparent-ad-blocking-vpn-via-softether-privoxy/

Автор перенаправляет весь 80-портовый трафик на privoxy, для блокировки рекламы вы можете изменить его команду на перенаправление на squid.

iptables -t nat -A PREROUTING -s YOUR.NET.ADDRESS/NETTMASK -p tcp -m multiport --dport 80 -j DNAT --to-destination 127.0.0.1:3128