У меня есть дроплет Digital Ocean (похожий на экземпляр Amazon EC2) под управлением Ubuntu Server 12.04.3 x64 с установленными как strongswan 5.1.1 (созданный из исходного кода), так и squid 3.4.2 (также созданный из исходного кода).
VPN-серверы strongswan и прокси-сервер squid прекрасно работают по отдельности, с небольшими изменениями в правилах iptables, разумеется, между тестированием.
То, что я хотел бы сделать, это иметь возможность инициировать VPN-соединение с моего компьютера / устройства, и исходящий VPN-трафик автоматически направляется через локальный прокси-сервер squid.
То есть поток трафика должен выглядеть примерно так:
Клиент -> VPN -> Прокси -> Интернет
К сожалению, я не могу найти хороший способ заставить работать такого рода соединение. Друг указал, что цепочка вывода таблицы NAT в iptables может быть моим решением, предложив такое правило:
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128
Хотя для меня логично, как это могло бы работать, похоже, это не так. Я не вижу никаких пакетов, следующих правилу (периодически проверяя количество входящих / исходящих пакетов с помощью команды iptables-save), когда я пытаюсь загрузить контент при подключении к VPN.
Имейте в виду, я не эксперт по iptables или linux, поэтому, пожалуйста, потерпите меня здесь, если что-то, что я сказал (или что-то, что я говорю), глупо / глупо / очевидно-чертова проблема ;)
Я открыт для любых предложений о том, как решить эту проблему, но удаление компонента не является решением. Мне нужно, чтобы VPN и прокси работали так. Изменение версий любого компонента также не является идеальным, хотя гораздо более выполнимым.
Я предоставил как ipsec.conf, так и squid.conf, а также свой текущий скрипт правил iptables.
PS Если вы заметили, есть некоторые вещи, связанные с использованием RADIUS для аутентификации. Не беспокойся об этом. В настоящее время он не используется и не должен иметь никакого влияния на этот вопрос.
Скрипт iptables:
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
export WAN=eth0
export vpnclients=10.100.0.0/255.255.0.0
# Allow access to our SSH server from the WAN
iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT
# Add the rules for NAT
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE
iptables-save
ipsec.conf:
config setup
ca ipsec
cacert=ca.pem
auto=add
conn %default
ikelifetime=60m
keylife=20m
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
leftcert=vpn-server.crt
leftauth=pubkey
rightsendcert=never
leftsendcert=always
eap_identity=%identity%
leftfirewall=yes
auto=add
conn ikev1
keyexchange=ikev1
rightauth=pubkey
rightauth2=xauth
rightsourceip=10.100.0.0/16
right=%any
rightid=%any
rightdns=8.8.8.8,8.8.4.4
leftsourceip=<my_server_ip>
leftsubnet=0.0.0.0/1,128.0.0.0/1,::/1,8000::/1
conn ikev2
keyexchange=ikev2
rightsourceip=10.100.0.0/16
right=%any
rightid=%any
rightauth=eap-radius
squid.conf:
#dummy name used
cache deny all
forwarded_for off
#for debugging, enable in production
strip_query_terms off
cache_effective_user proxy
cache_effective_group proxy
client_dst_passthru on
host_verify_strict off
http_port 3130 intercept
http_port 3128
https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/dev/squid.pem
always_direct allow all
ssl_bump server-first all
# the following two options are unsafe and not always necessary:
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
# Change these to your local DNS servers
dns_nameservers 8.8.8.8 8.8.4.4
coredump_dir /var/cache/squid
http_access allow all
http_reply_access allow all