Saya memiliki tetesan Digital Ocean (mirip dengan contoh Amazon EC2) yang menjalankan Ubuntu Server 12.04.3 x64 dengan kedua strongswan 5.1.1 (dibangun dari sumber) dan squid 3.4.2 (juga dibangun dari sumber) diinstal.
Baik strongswan VPN dan squid proxy berfungsi dengan baik secara terpisah, dengan beberapa perubahan iptables kecil antara pengujian, tentu saja.
Yang ingin saya lakukan adalah dapat memulai koneksi VPN dari komputer / perangkat saya dan memiliki lalu lintas VPN keluar secara otomatis merutekan melalui proxy squid lokal.
Artinya, arus lalu lintas akan terlihat seperti ini:
Klien -> VPN -> Proxy -> Internet
Sayangnya, sepertinya saya tidak bisa menemukan cara yang baik untuk mendapatkan koneksi semacam ini agar berfungsi. Seorang teman menunjukkan bahwa rantai Output dari tabel NAT di iptables mungkin solusi saya, menyarankan aturan seperti ini:
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128
Meskipun secara logis masuk akal bagi saya bagaimana ini bisa berhasil, sepertinya tidak demikian. Saya tidak melihat paket mengikuti aturan (secara berkala memeriksa jumlah paket masuk / keluar dengan perintah iptables-save) saat saya mencoba memuat konten saat terhubung ke VPN.
Pikiran Anda, saya bukan ahli dengan iptables atau linux, jadi tolong bersamaku di sini jika sesuatu yang saya katakan (atau sesuatu yang saya katakan) konyol / bodoh / jelas-masalah-sialan. ;)
Saya terbuka untuk saran tentang cara mengatasi ini, tetapi menghapus komponen bukanlah solusi. Saya perlu VPN dan Proxy berjalan seperti ini. Mengubah versi kedua komponen juga tidak ideal, meskipun jauh lebih layak.
Saya telah menyediakan ipsec.conf dan squid.conf, serta skrip aturan iptables saya saat ini.
PS Jika Anda perhatikan, ada beberapa hal yang terkait dengan menggunakan RADIUS untuk otentikasi. Jangan khawatir tentang itu. Saat ini sedang tidak digunakan dan seharusnya tidak memiliki efek pada pertanyaan ini.
skrip 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
PREROUTING
rantai Anda dikomentari? Saya pikir itu akan berhasil dan bukan OUTPUT
rantai. Juga, saya apa yang terjadi jika Anda mencoba port 3130 bukannya 3128? Jadi saya akan mencobaiptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3130