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 bukanOUTPUT
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
Jawaban:
Saya memiliki masalah yang sama persis, dan setelah hampir 1 hari, saya bisa menyelesaikan masalah ini. Solusi ini untuk siapa saja yang membaca ini di masa depan.
Target: Sama seperti OP yang saya coba jangkau
Klien -> VPN -> Proxy -> Internet
Setup: Ubuntu 16.04
VPN: L2TP menggunakan xl2tpd dan pptpd, serta strongswan untuk enkripsi Pengaturan VPN dan server Squid Proxy berada di mesin yang sama.
Pool IP Pribadi untuk membagikan IP kepada klien: 172.21.118.0/24
Seperti yang diharapkan OP, Anda perlu menjalankan
-j REDIRECT --to-port 3128
beberapa tabel nat (baik PREROUTING atau OUTPUT).Memeriksa dan masuk dengan tabel yang berbeda, di sini adalah path setiap paket yang berasal dari 172.21.118.0/24 berikut:
mangle PREROUTING -> nat PREROUTING -> mangle FORWARD -> filter FORWARD -> mangle POSTROUTING -> nat POSTROUTING
Saya mengerti cara kerjanya, menggunakan ilustrasi hebat siklus hidup paket iptables:
Sumber: http://64-bit.de/dokumentationen/netzwerk/e/002/DE-IPTABLES-HOWTO-3.html
Ternyata, pengaturan ini tidak mengirim apa pun pada rantai OUTPUT, jadi satu-satunya tempat untuk mengarahkan ulang port adalah rantai PREROUTING.
The solusi hanya:
Juga jangan lupa untuk SNAT ke IP publik Anda untuk mencapai internet:
sumber