Я использую 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